Pourquoi le code ci-dessous n'est pas ambigu et comment cela fonctionne?Pourquoi ce morceau de code "n'est pas ambigieux!" - fonctions virtuelles
#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();
}
Ceci n'est pas un exemple de [héritage virtuel] (http://stackoverflow.com/questions/21558/in-c-what-is-a-virtual-base-class), ce qui est quelque chose de totalement différent. –
@BoPersson en quoi est-ce différent de l '«héritage virtuel»? –
bien oui @BoPersson mais l'héritage que j'ai utilisé est un exemple de problème de diamant. Je suis un peu confus concernant les "appels d'ambiguïté" – highlander141