【发布时间】:2015-12-06 06:35:20
【问题描述】:
为什么下面的代码没有歧义以及它是如何正常工作的?
#include <QCoreApplication>
#include <iostream>
using namespace std;
class Shape{
public:
virtual void drawShape(){
cout << "this is base class and virtual function\n";
}
};
class Line : public Shape{
public:
virtual void drawShape(){
cout << "I am a line\n";
}
};
class Circle : public Shape{
public:
virtual void drawShape(){
cout <<" I am circle\n";
}
};
class Child : public Line, public Circle{
public:
virtual void drawShape(){
cout << "I am child :)\n";
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//Shape *s;
//Line l;
Child ch;
//s = &l;
//s = &ch;
ch.drawShape(); // this is ambiguous right? but it executes properly!
//s->drawShape();
return a.exec();
}
【问题讨论】:
-
这不是virtual inheritance的例子,这是完全不同的东西。
-
@BoPersson 与
virtual inheritance有何不同? -
嗯,是的@BoPersson,但我使用的继承是钻石问题的一个例子。我对“歧义调用”有点困惑
标签: c++ multiple-inheritance virtual-functions ambiguous name-lookup