#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"A's cons."<<endl;}
virtual ~A(){cout<<"A's des."<<endl;}
virtual void f(){cout<<"A's f()"<<endl;}
void g(){f();}
};
class B:public A
{
public:
B(){f(); cout<<"B's cons."<<endl;}
~B(){cout<<"B's des."<<endl;}
};
class C:public B
{
public:
C(){cout<<"C's cons."<<endl;}
~C(){cout<<"C's des."<<endl;}
void f(){cout<<"C's f()."<<endl;}
};
void main(){
A *a = new C;
a->g();
delete a;
using namespace std;
class A
{
public:
A(){cout<<"A's cons."<<endl;}
virtual ~A(){cout<<"A's des."<<endl;}
virtual void f(){cout<<"A's f()"<<endl;}
void g(){f();}
};
class B:public A
{
public:
B(){f(); cout<<"B's cons."<<endl;}
~B(){cout<<"B's des."<<endl;}
};
class C:public B
{
public:
C(){cout<<"C's cons."<<endl;}
~C(){cout<<"C's des."<<endl;}
void f(){cout<<"C's f()."<<endl;}
};
void main(){
A *a = new C;
a->g();
delete a;
}
输出:
A's cons.
A's f()
B's cons.
C's cons.
C's f().
C's des.
B's des.
A's des.
构造函数和析构函数中调用虚函数采用静态联编,成员函数中调用虚函数采用动态联编。