c++有虚函数的类会有一张放有虚函数的地址的虚函数表,一维数组
虚函数表可以被继承
有虚函数的类被实例化以后在对象的开头有一个虚函数指针,指向类的虚函数表,
如果子类重新实现了虚函数,那么子类就会有一张相同的虚函数表,子类的指针指向子类的虚函数地址,否则子类的虚函数指针
还是指向父类的虚函数。当把子类对象赋值给父类的时候,调用的是子类对象虚函数指针指向的虚函数表里放的虚函数的地址。
有多态运用的类的析构函数申明为虚函数,这样在把子类对象赋值给父类指针以后,对象销毁的时候会调用子类的析构函数,先析构自己,再析构父类。否则,会调用父类的析构函数,子类的那部分内存没有释放,造成内存泄漏。