虚继承
#include<iostream>using namespace std;class X{ int i;public: X(int ii):i(ii){} void fun(){cout<<"X::fun()"<<endl;}};class Y:virtual public X{public: Y(int ii):X(ii){}};class Z:virtual public X{public: Z(int ii):X(ii){}};class A:public Z,public Y{public: A(int ii):X(ii),Z(ii),Y(ii){}};int main(){ A a(10); a.fun();}class Top{public: virtual ~Top(){}};class Left:virtual public Top{public: void f(){}};class Right:virtual public Top{public: void f(){}};class Bottom:public Left,public Right{public: using Left::f;};class VeryBottom:public Bottom{};int main(){ Bottom b; b.f();//left VeryBottom vb; vb.f();//left}#include<iostream>using namespace std;class SuperHero{ int strengthFactor;public: SuperHero(int i):strengthFactor(i){} virtual void savePersonFromFire()=0; virtual void move()=0;};class SuperlativeMan:virtual public SuperHero{ int i;public: SuperlativeMan(int ii):SuperHero(ii),i(ii){} void savePersonFromFire(){cout<<"Superlativeman save person from fire"<<endl;} void move(){cout<<"SuperlativeMan move"<<endl;} void eatFood(double food){cout<<"SuperlativeMan eat "<<food<<endl;}};class Amoeba:virtual public SuperHero{ int i;public: Amoeba(int ii):SuperHero(ii),i(ii){} void makeNoise(){cout<<"Amoeba make noise"<<endl;} void savePersonFromFire(){cout<<"Amoeba save person from fire"<<endl;} void move(){cout<<"Amoeba move"<<endl;} void eatFood(string food){cout<<"Amoeba eat "<<food << endl;}};class TarantulaWoman:virtual public SuperHero{ int i;public: TarantulaWoman(int ii):SuperHero(ii),i(ii){} void savePersonFromFire(){cout<<"TarantulaWoman save person from fire"<<endl;} void move(){cout<<"TarantulaWoman move"<<endl;}};class SuperlativeAmoeba:public SuperlativeMan,Amoeba{ int i;public: using Amoeba::eatFood; SuperlativeAmoeba(int ii):SuperHero(ii),SuperlativeMan(ii),Amoeba(ii),i(ii){ eatFood("rice"); } void savePersonFromFire(){cout<<"SuperlativeAmoeba save person from fire"<<endl;} void move(){cout<<"SuperlativeAmoeba move"<<endl;} friend ostream& operator<<(ostream& os,SuperlativeAmoeba* sa){ os << sa->i << endl; return os; } SuperlativeAmoeba* operator=(SuperlativeAmoeba* sa){ return sa; }};void saveFromFile(SuperHero* superHero){ superHero->move(); superHero->savePersonFromFire();}int main(){ SuperlativeAmoeba* superlativeAmoeba = new SuperlativeAmoeba(10); SuperlativeAmoeba* superlativeAmoeba2 = superlativeAmoeba; cout << superlativeAmoeba2 ; saveFromFile(superlativeAmoeba);}Amoeba eat rice10SuperlativeAmoeba moveSuperlativeAmoeba save person from fire