[转]多重继承与虚继承
1.虚继承解决多重继承出现基类成员拷贝两份的问题
2.多重继承继承了多个基类的成员变量;其它同单个继承类似。
3.多重继承的最上层基类成员的初始值,取决于最后继承的类的初始值。
4.多重继承可能出现上层基类函数同名问题。
#include "stdafx.h"
class BaseClass
{
public:
BaseClass(){};
~BaseClass(){};
int Base;
virtual void GetName(){printf("BaseClass\n");}
virtual void GetResult(){printf("From BaseClass\n");}
};
class A :public virtual BaseClass
{
public:
A(){Base = 1;};
~A(){};
public:
int a;
virtual void GetName(){printf("A\n");}
virtual void GetResult(){printf("From A\n");}
void Get(){printf("A A\n");};
};
class B :public virtual BaseClass
{
public:
B(){Base = 2;};
~B(){};
public:
int b;
virtual void GetName(){printf("B\n");}
void Get(){printf("B B\n");};
};
class E: public B, public A
{
public:
E(){};
~E(){};
virtual void GetName(){A::GetName();};
};
int _tmain(int argc, _TCHAR* argv[])
{
E e;
printf("%d\n",e.Base);
e.GetName();
//e.Get(); 出错,模糊不清
BaseClass* pBaseClass = new BaseClass();
A* pA = new A();
B* pB = new B();
pA->GetName();//A
pB->GetName();//B
pBaseClass->GetName();//BaseClass
pBaseClass->GetResult();//From BaseClass
pA->GetResult();//Frome A
pB->GetResult();//From BaseClass
pBaseClass = static_cast<BaseClass*> (pA);
pBaseClass->GetResult();//Frome A
pBaseClass->GetName();//A
pBaseClass = static_cast<BaseClass*> (pB);
pBaseClass->GetResult();//Frome BaseClass
pBaseClass->GetName();//B
return 0;
}

浙公网安备 33010602011771号