|
class A
{
public:
int aa;
A() : aa( 1 ){}
~A(){}
virtual void ABC(){ aa = 2; }
};
class B : public A
{
public:
B(){}
~B(){}
virtual void ABC(){ aa = 3; }
};
class C : public B
{
public:
C(){}
~C(){}
};
class D : public C
{
public:
D(){}
~D(){}
};
a = new D;//這時候aa的值為1,這是初始化的效果
a->ABC();//這時候aa的值為3,調用的是類B中的ABC()
思考結果:虛函數調用時,沿著繼承逆方向尋找調用函數,中間有一個層次沒有定義相應函數則會繼續在其直接基類中尋找,依此類推。
|
|