读书人

虚承袭

发布时间: 2012-12-25 16:18:28 作者: rapoo

虚继承

#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

读书人网 >编程

热点推荐