#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
class Root
{
public:
Root()
{
}
virtual void v1()
{
cout<< "ROOT V1 is "<< endl;
}
virtual void v2()
{
cout<< "ROOT V2" << endl;
}
void over()
{
cout << "ROOT is show R_AGE is "<< r_age << endl;
}
protected:
int r_age;
};
class TrunkA: virtual public Root
{
public:
int t_age;
TrunkA()
{
r_age = 1;
}
/*
void v1()
{
cout << "TrunkA V1 " << endl;
}
*/
void over()
{
cout<< "TrunkA is show R_age is " << r_age << endl;
}
};
class TrunkB: virtual public Root
{
public:
TrunkB()
{
r_age = 2;
}
/*
virtual void v1()
{
cout<<"TrnkB V1" << endl;
}
void v2()
{
cout<< "TrunkB V2 " << endl;
}
*/
void over()
{
cout << "TrunkB is show R_age is "<< r_age << endl;
}
};
class TrunkC : public Root
{
public:
void over()
{
cout << "TRUNKC R_AGE is"<< r_age << endl;
}
};
class Leaves : public TrunkB, public TrunkA, public TrunkC{
public :
void over()
{
cout<< "Leaves is show "<< endl;
}
};
int main()
{
Leaves L1;//含2个 ROOT 对象 (TrunkA, TrunkB 为虚继承共用一个 ROOT, TrunkC 使用一个ROOT)
// 共用的ROOT 的r_age 为 先声明的TrunkA设置的变量值,值为 1;
L1.over();
//L1.v1();
//L1.v2();
//Root r1 = (Root)L1; --- error
TrunkB b = (TrunkB)L1;
b.over();
b.v1();
Root rb = (Root)b;
rb.over();
TrunkA a = (TrunkA)L1;
a.over();
a.v1();
a.v2();
Root ra = (Root)a;
ra.over();
TrunkC c = (TrunkC)c;
c.over();
c.v1();
c.v2();
return 0;
};