一般对于类而言凡是有虚函数就会有虚析构函数,因为有虚函数就可能出现多态现象也就是指向子类的基类指针,那么会delete 指向子类的基类指针也就是要虚析构函数了。
用户delete子类对象的基类指针 虚西沟函数保证:子类的析构会被执行,而子类的析构又会回溯调用基类的析构,那么所有内存都会得到正确的释放,永远可以指向子类的析构, 防止内存泄漏, 在这里有虚析构函数可能没啥好处 ,但至少没有坏处。可以作为约定,一般有虚函数就得有析构,虚析构后面得写个大括号。
多态必须要有虚函数。
对于虚函数一虚则全虚 指的是基类虚函数则子类即便没关键字virtual也是虚函数
虚函数--多态--重写 是运行期才执行是动态联编的
#include<iostream>
using namespace std;
class A
{
public:
virtual ~A(){};
virtual void fA(){};
};
class B
{
public:
virtual void fB(){};
};
class C: public A,public B
{
public:
};
int main()
{
C a;
A* pa = &a;
B* pb = &a;
C* pc = &a;
cout << pa << " " << pb << " " << pc << " "<<endl;
}
//output
//0024FD04 0024FD08 0024FD04
//请按任意键继续. . .