一、虚指针(vptr) 虚表(vtbl)
vptr:
若类对象中含有虚函数,则在对象模型中会存在一根虚函数指针
vtbl:虚函数指针指向一块内存,称为虚表。可以将它理解为一种表格,每个表格的位置存放一个虚函数对应内存的地址;
二、关于this
通过this指针调用虚函数指针指向虚表中实际对应的虚函数。
举例理解:class类比作房子,this就好比一把钥匙,通过钥匙来打开了这座房子的门,那么里面的东西就随意你取用了。
his作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。
三、动态绑定
需要满足三个条件:
1.使用指针调用
2.存在向上转型
3.调用的是虚函数
四、const
表示此函数保证不更改data members。
由上图可以看到:
常量(const)对象可以调用const成员函数
const对象不可以调用non-const成员函数
非常量(non-const)对象可以调用const成员函数
non-const对象可以调用non-const成员函数
五、关于new 和 delete
1)全局的new/delete:
::operator new(),
::operator delete(),
如果重载全局的new和delete,将影响整个项目
2)类成员的new和delete
如果没有定义成员new/delete,则调用全局的new/delete
如果定义了成员new/delete的类,可以使用::前缀强制调用全局new/delete
六、总结
这节课讲了较多概念性的东西,在整个c++学习中都有用,需要经常巩固。