ylww

随笔仅作学习记录,请辩证参考!!!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

多态

 

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

 

虚函数的原理   虚函数表

单个类的虚函数表

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

运行结果:

 证明内存就是如上分布。

通过调用命令行同样可以证得此结论:

 

 

 使用继承的虚函数表

 

此时:

 代码验证:

运行结果:

 

 

 

使用多重继承的虚函数表

vs中,多重继承时,会继承多个虚函数表(实际是虚表指针,存放顺序按照继承类的声明顺序来);

自己本身的虚函数地址会写入第一个虚函数表的最后;

自己本身的数据成员会写在对象内存最后。

 代码验证:(关键代码)

 结果:

 命令行查看:

 

 

 final

 用来修饰类,让该类不能被继承

理解:使得该类终结!

 

 

 

 

用来修饰类的虚函数,使得该虚函数在子类中,不能被重写

理解:使得该功能终结!

 

 

 

 

override

override仅能修饰虚函数

作用:

1.提示程序的阅读者,这个函数是重写父类的功能。

2.防止程序员在重写父类的函数时,把函数名写错。

 

 

遗失的子类析构函数

 运行结果:

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

 运行结果:

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

 补充:

经测试,virtual关键字加入析构函数,仅仅是针对基类指针类型。

 

 

纯虚函数和抽象类

 

 

tips:

 

posted on 2022-10-10 10:14  理想主义者光芒万丈  阅读(26)  评论(0)    收藏  举报