如何能避免在调用子类对象的虚函数时调用父类的虚函数呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何能避免在调用子类对象的虚函数时调用父类的虚函数呢?相关的知识,希望对你有一定的参考价值。

参考技术A 既然是虚析构函数,函数调用的地址就是在运行时候确定的。
任何一个带有虚函数的类,其任一个实例对象首4字节都保存的虚函数表的地址,当此实例调用其虚成员函数时候,不是直接调用其成员函数地址,而是查找其内存块的头4个字节找虚函数表,根据虚函数表里面此函数的地址来调用相应的函数。
你既然定义的是b
B,那么B(是实例,不是类)就有个虚函数表,里面只有一个项目也就是其析构函数的地址。所以析构的时候就调用它了。而普通的析构函数是先调用
~b(),在调用
~a();

C++中的虚函数(类的向上转换,和向下转换)

1.C++中的封装是为了代码的模块化,继承是为了代码的重用,而多态则是为了接口的重用。
2.C++中的多态是用虚函数来实现的。
3.子类对象向父类指针的转换(向上转换)是安全的,隐式的,而父类对象向子类指针的转换(向下转换)是不安全的,用dynamic_cast<>转换会得到一个空指针。
4.普通的成员函数会根据指针的类型决定调用哪个函数,而虚函数则会每次都去查虚函数表,根据具体的类对象来决定调用哪个函数。

以上是关于如何能避免在调用子类对象的虚函数时调用父类的虚函数呢?的主要内容,如果未能解决你的问题,请参考以下文章

C++子类如何调父类的虚函数

请教,父类中如何调用子类中的虚函数

C++中,子类会继承父类的虚函数表!对于父类的析构函数(虚函数) 也会继承吗?

关于C++的虚函数在父类的内部调用

深入C++对象模型&虚函数表

游戏开发面试总结2