美文网首页
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