J'ai un problème avec l'héritage multiple.Héritage multiple en C++ (exemple Qt)
Je souhaite qu'un classe IEdge implémente QGraphicsItem "interface", qui contient des méthodes abstraites boundindRect() et paint (...). IEdge ajoute également de nouvelles méthodes.
class IEdge : public QGraphicsItem
{
public:
virtual Vertex * getVertex1() = 0;
virtual Vertex * getVertex2() = 0;
}
Maintenant, je veux créer UndirectedEdge, qui s'étendent iEDGE, mais je ne veux pas mettre en œuvre boundingRect() et de la peinture (...) par moi-même, je veux utiliser la mise en œuvre IQGraphicsLineItem.
class UndirectedEdge : public IEdge, public IGraphicsLineItem
{
public:
virtual Vertex* getVertex1();
virtual Vertex* getVertex2();
}
Mais cela ne fonctionne pas, le compilateur dit que UndirectedEdge est abstraite parce que boundingRect() et de la peinture (...) ne sont pas mis en œuvre (mais je suis sûr que, IGraphicsLineItem contient ces méthodes). Je n'ai aucune idée, pourquoi ça ne marche pas. Merci beaucoup pour les explications.
Edit:
je peux résoudre ce problème, mais je suis seulement curieux. Dans ma langue principale C# cela fonctionnerait, il me manque quelque chose d'important sur l'héritage en C++ :-(... un indice serait apprécié, merci
Merci pour la solution, mais je suis juste curieux, pourquoi cela ne fonctionne pas. Je suis sûr que cela fonctionnerait en C# parfaitement :) Il me manque quelque chose sur l'héritage en C++ :-( – bidacek
Le compilateur connaît la différence entre IEdge :: boundingRect() et IGraphicsLineItem :: boundingRect() ... ils ne sont pas la même fonction, même si une partie de la signature est épelée de la même manière. – Bill