心胸决定格局,眼界决定境界...

[转]多重继承与虚继承

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;
}

 

posted @ 2014-03-29 22:40  WELEN  阅读(119)  评论(0)    收藏  举报