C++虚函数

问题1、虚函数如何实现的?
答:
C++的多态使用虚函数实现,通过"晚绑定",使程序在运行的时候,根据对象的类型去执行对应的虚函数。
C++ 之虚函数的实现原理是
带有虚函数的类,编译器会为其额外分配一个虚函数表,里面记录的使虚函数的地址,当此类被继承时,子类如果也写了虚函数就在子类的虚函数表中将父类的函数地址覆盖,否则继承父类的虚函数地址。 实例化之后,对象有一个虚函数指针,虚函数指针指向虚函数表,这样程序运行的时候,通过虚函数指针找到的虚函数表就是根据对象的类型来指向的了。


问题2、虚函数前面加static,行不行?
答:不行,仅非静态成员变量是虚拟的。


问题3、为什么析构函数要加虚函数?
答:
虚析构函数就是用来解决通过父类指针释放子类对象。多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。
解决方式:将父类中的析构函数改为虚析构或者纯虚析构。

另网上答案: 基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构内函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放。如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类的析构容函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。所以,将析构函数声明为虚函数是十分必要的。
posted @ 2020-04-11 17:40  Akmf's_blog  阅读(89)  评论(0)    收藏  举报