多态

多态机制的实现就是通过虚函数。

虚函数的原理 虚函数表
单个类的虚函数表


以上结论通过以下代码测试:
运行结果:

证明内存就是如上分布。
通过调用命令行同样可以证得此结论:

使用继承的虚函数表

此时:

代码验证:

运行结果:


使用多重继承的虚函数表


vs中,多重继承时,会继承多个虚函数表(实际是虚表指针,存放顺序按照继承类的声明顺序来);
自己本身的虚函数地址会写入第一个虚函数表的最后;
自己本身的数据成员会写在对象内存最后。
代码验证:(关键代码)

结果:

命令行查看:

final
用来修饰类,让该类不能被继承
理解:使得该类终结!


用来修饰类的虚函数,使得该虚函数在子类中,不能被重写
理解:使得该功能终结!

override
override仅能修饰虚函数
作用:
1.提示程序的阅读者,这个函数是重写父类的功能。
2.防止程序员在重写父类的函数时,把函数名写错。

遗失的子类析构函数

运行结果:
case3会导致内存泄漏。解决方法:将父类的析构函数定义成虚函数,改动代码如下:

运行结果:

此虚函数区别于一般的虚函数,这不是为了重新实现函数功能,而是为了能够动态析构。

补充:
经测试,virtual关键字加入析构函数,仅仅是针对基类指针类型。
纯虚函数和抽象类





tips:

浙公网安备 33010602011771号