在函数声明时加virtual
virtual void display();
实现用基类指针访问派生类函数
要把基类的析构函数声明为 虚函数
这是因为当通过 动态方式 建立 对象的时候,当使用多态性,利用基类指针指向 派生类,那么当对指向派生类的基类指针 使用delete,如果析构函数不是虚基类,则仅仅调用基类的 析构函数,而不是调用派生类的析构函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include<iostream> using namespace std; class ClxBase{ public : ClxBase() {}; ~ClxBase() {cout << "Output from the destructor of class ClxBase!" << endl;}; void DoSomething() { cout << "Do something in class ClxBase!" << endl; }; }; class ClxDerived : public ClxBase{ public : ClxDerived() {}; ~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; }; void DoSomething() { cout << "Do something in class ClxDerived!" << endl; }; }; int main(){ ClxBase *p = new ClxDerived; //基类指针,指向派生类 p->DoSomething(); delete p; //这里因为析构函数不是虚函数,所以仅仅调用基类 的 析构函数 return 0; } |
这段代码输出如下:
构造函数不能声明为虚函数