侯捷C++及C++ Primer plus(六)

reference

reference是一种代表关系
refenence一定要有初值
编译器对待r使用指针实现,但用逻辑的角度应该将r看作与他引用的对象相同的数据类型

r代表了一个变量后不可重新代表其他物体
在这里插入图片描述
object和其refenence的大小相同,地址也相同(全部都是假象)
reference通常不用于声明变量,而用于参数类型和返回类型的描述
在这里插入图片描述
const是函数签名的一部分,也就是说如果上述不能共存的函数一个有const一个没有const则视为签名不同,因此能同时存在

复合&继承关系下的构造和析构

继承关系下的构造和析构

在这里插入图片描述
构造由内而外
子类的构造函数首先调用父类的默认构造函数,然后才执行自己

析构由外而内
子类的构造函数首先执行自己,然后才调用Base的析构函数

复合关系下的构造和析构

在这里插入图片描述
复合——左边拥有右边
构造由内而外
子类的构造函数首先调用父类的默认构造函数,然后才执行自己

析构由外而内
子类的构造函数首先执行自己,然后才调用Base的析构函数

继承+复合关系下的构造和析构

在这里插入图片描述
构造由内而外
子类的构造函数首先调用父类的默认构造函数,然后调用拥有对象的构造函数,才执行自己的

析构由外而内
子类的构造函数首先执行自己,然后调用拥有对象的析构函数,最后执行父类的(和构造函数的执行顺序完全相反)

对象模型(Object Model)

继承是继承调用权而不是继承父类的内存大小
在这里插入图片描述
虚指针vptr和虚表vtbl

虚指针:其实就是一个地址值,以该地址为起始地址的一片内存单元存放着各虚函数的入口地址,这一片内存单元合起来就称为虚函数表(想象一下:一片内存单元存着许多函数地址,想执行哪个虚函数就来这片内存单元查找该虚函数的入口地址,就像查表一样,故称虚函数表)。经过以上解释,可以发现,所谓虚指针,就是个指向指针的指针。

通过指针去调用虚函数,编译器就知道不能静态绑定了,而是动态绑定

C++编译器看到函数时会做两个考量:静态绑定还是动态绑定
静态绑定是被编译为:call ***,一定是被调用到某个地址
如果符合三个条件会进行动态绑定
1.必须是通过指针来调用
2.指针是向上转型,这样可以保证安全
3.调用的是虚函数
动态绑定要看p的指向调用

虚指针能指向很多的形态,这种样式称为多态
在这里插入图片描述
this
在这里插入图片描述
this指针指向的object称为this object

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值