22. C++ 虚函数
1. 使用“.”调用虚函数时
2. 使用指针或引用调用虚函数时
3. 虚析构函数
下面为基类析构函数不为虚函数的情况:
#include <iostream>
using namespace std;class base {
public:base() {cout << "base constructor" << endl;int *b = new int[5];}~base() {cout << "base destructor" << endl;delete[] b;}private:int *b;
};class derived : public base {
public:derived() {cout << "derived constructor" << endl;int *d = new int[8];}~derived() {cout << "derived destructor" << endl;delete[] d;}private:int *d;
};int main()
{base *pBase = new derived;cout << "---" << endl;delete pBase;return 0;
}
运行结果:由于pBase是指向基类的指针,基类的析构函数不为虚函数,所以delete pBase时只调用了基类的析构函数。
base constructor
derived constructor
---
base destructor
若基类的析构函数是虚函数,则会先调用派生类的析构函数,然后调用基类的析构函数
base constructor
derived constructor
---
derived destructor
base destructor
4. 虚函数注意事项