多继承中不懂得地方
#include <iostream>class Animal //定义动物类
{
public:
void Eat();
};
class Pig : public Animal //小猪类
{
public:
void climb();
};
class Dog : public Animal //小狗类
{
public:
void jiao();
};
class DP : public Dog,public Pig //狗猪类
{
};
void Animal::Eat()
{
std::cout << "我正在吃东西。" << '\n';
}
void Pig::climb()
{
std::cout << "我正在爬树。" << '\n';
}
void Dog::jiao() //叫
{
std::cout << "wang wang\n";
}
int main()
{
DP p;
p.climb();
p.jiao();
p.Eat(); //没注释会出错 注释了就不会了为什么调用会出错
return 0;
}
vc6的提示
'DP::Eat' is ambiguous
could be the 'Eat' in base 'Dog' of class 'DP'
or the 'Eat' in base 'Pig' of class 'DP'
就是说DP类中的Eat是不可以分辨出是继承自Pig还是Dog
因为这两个类中的Eat都是继承自Animal
你可以试想下如果Pig类和Dog类都重写了Eat 参数都一样
只是干的事情都不一样 那实际运行起来时DP对象中的Eat到底是要显示哪一个呢
多重继承中两个或多个父类中的函数不能相同 这个其实是钻石继承的问题 要解决只要采取虚拟继承
class Pig : virtual public Anima
{
} 优雅的独行者 发表于 2014-7-30 18:55
vc6的提示
'DP::Eat' is ambiguous
could be the 'Eat' in base 'Dog' of class 'DP'
那如何解决? 优雅的独行者 发表于 2014-7-30 22:07
这个其实是钻石继承的问题 要解决只要采取虚拟继承
class Pig : virtual public Anima
{
2个子类都加上virtual 果然行了 谢了
页:
[1]