类型决定调用,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;
}