菱形继承
当我们实例化一个双栖艺人类的时候,使用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;
}