1)构造函数是从基类到子类逐步构造,像一颗生长的树。
2)析构函数是从子类到基类逐步析构,像一颗退化的树。
3)基类声明了一个成员函数为virtual,子类只要重写了该方法,无论是否声明为virtual,都将具有多态的性质。
#include <iostream>
using namespace std;
class A
{
public:
A(){cout << "constructed A"<< endl;}
virtual ~A(){cout << "destructed A"<< endl;}
virtual void fun1(){cout << "A" << endl;}
virtual void fun2(){cout << "A" << endl;}
};
class B:public A
{
public:
B(){cout << "constructed B"<< endl;}
~B(){cout << "destructed B"<< endl;}
void fun1(){cout << "B" << endl;}
void fun2(){cout << "B" << endl;}
};
class C:public B
{
public:
C(){cout << "constructed C"<< endl;}
~C(){cout << "destructed C"<< endl;}
void fun1(){cout << "C" << endl;}
void fun2(){cout << "C" << endl;}
};
int main(void)
{
A* pa;
pa = new A();
pa->fun1();
pa->fun2();
delete(pa);
pa = new B();
pa->fun1();
pa->fun2();
delete(pa);
pa = new C();
pa->fun1();
pa->fun2();
delete(pa);
return 0;
}