菱形继承

当我们实例化一个双栖艺人类的时候,使用eat(),编译器就懵逼了,到底调用谁的eat方法, 歌手爸爸的,演员类爸爸的,还是爷爷的?

实际上,两个爸爸都没有eat()方法,都来源于爷爷,而实际的一个情况是不能跨越父类,调用爷爷的方法

#include <iostream>
using namespace std;

//艺人类
class Artist{
public:
    void eat(std::string){
         cout<<"Artist::eat()"<<endl;
    }
public:
    std::string name;//姓名
protected:
    int age;//年龄
private:
    double fee;//出场费
};

//歌手类
class Singer:public Artist{
public:
    void sing(std::string name){

    }
};
//演员类
class Actor:public Artist{
public:
    void perform(std::string name){

    }
};

//双栖艺人呢
class AmphibiousArtist:public Singer, public Actor{
public:
    std::string emphsis;//事业侧重点
};
int main(int argc, const char * argv[]) {
    AmphibiousArtist aa;
//    aa.eat(); 编译器报错,不知道调用谁的eat()
    aa.Singer::eat("方便面");
//    aa.name;编译器又报错,说明不能跨过父类去访问主父类
    //那么这个问题该如何解决呢
    return 0;
}

results matching ""

    No results matching ""