美文网首页
Boolan - C++学习笔记 二 - 第二周

Boolan - C++学习笔记 二 - 第二周

作者: amberfjx | 来源:发表于2017-05-18 21:04 被阅读0次

    C++程序设计(2)


    第二周笔记

    1 对象模型(object model)

    1.1 关于虚指针(virtual point)和虚表(virtual table)

    每个具有虚函数的类的对象都有一个虚指针vptr,该指针指向虚函数表vtble,该表存放了类的所有虚函数地址,即改数组是函数指针数组。

    如果类A派生B,同时B重写了A的虚函数A::fun(),此时类B的对象B

    b,b具有虚指针,指向类B的虚函数表,同时,A::fun()位置被重写的函数B::fun()替换掉,如图中B::vfunc1()所示。

    C++编译器对于函数的处理,考虑静态绑定(普通函数)和动态绑定或虚机制(虚函数)。

    动态绑定必须是用对象指针来访问对象成员,编译成下面所示内容,在程序执行过程中,根据P所指的对象是基类还是派生类成员来决定调用哪一个类的函数。这就现实了多态。

    1.2 关于this指针

    用This指针来实现模板方法,注意:不是模板函数。

    所有非静态成员函数都隐式含有this指针。This指向当前对象。

    myDoc.OnFileOpen()

    等价于:Cdocument::OnFileOpen&myDoc);

    OnFileOpen()是类Cdocument的成员函数。

    This->Serialize()//Serizlize()是虚函数,因此

    等价于:(*(this->vptr)[n])(this)

    动态绑定的三个条件:

    A* pa = new B;

    pa->vfun();

    1、通过指针来访问

    2、访问虚函数

    3、向上转型up-cast

    关于Const关键字

    Const是函数签名(signature)的一部分。

    1、常成员函数:表示函数不能修改类成员变量的值,同时也不能调用可以修改类成员变量值的成员函数。

    int getX () const{ return this -> x };

    常对象,只能调用类的常成员函数。

    ConstString str(“Hello World\n”);

    str.print();

    str.setX(intx);//can not complie successfully.

    2、修饰函数参数void* strcpy(void* dst, const void* src);

    3、定义只读变量const intx = 100;

    关于New和delete

    new和delete都是C++运算符,注:不是函数;

    malloc()和free()才是函数。

    New和delete内部是分别调用malloc和free函数来实现的。

    重载之后的new和delete参数是有编译器传进来的。

    下图是全局重载,影响非常大。

    相关文章

      网友评论

          本文标题:Boolan - C++学习笔记 二 - 第二周

          本文链接:https://www.haomeiwen.com/subject/yghexxtx.html