类型决定调用,virtual开启多态,是对象决定成员的调用
1.父类指针指向子类堆上的对象
2.delete 父类指针
3由1,2会导致子类析构调用不成,所以解决此问题的方法就是将基类析构函数改成虚函数
这时候就不得不提构造函数一定不能是虚函数
- 原则:一个类或者他的父类存在被继承和虚函数,那么必须定义虚析构函数
- const 函数可被const和非const成员调用,而非const函数只能被非const成员调用
#include <iostream>
using namespace std;
class A{
public:
    A(){
        cout << "A construct"<< endl;
    }
    virtual ~A(){
        cout << "A destruct"<< endl;
    }
    virtual void Func()const {
        cout << "A::Func"<< endl;
    }
    void Func(int n)const {
        cout << "A::Func () "<< endl;
    }
    
};
class B:public A{
public:
    B(){
        cout << "B construct"<< endl;
    }
    ~B(){
        cout << "B destruct"<< endl;
    }
    void Func()const {
        cout << "B::Func"<< endl;
        A::Func();
    }
    
};
int main(){
//  B b;
//  b.Func();
    
    //A* a = &b;
    //a->Func();
    A* a = new B;
    a->Func();
    delete a;
    a = NULL;
}