Bonjour tout le monde,
Je travaille actuellement sur un projet où je dois réaliser des héritages multiples. Bien qu'utilisant la bibliothèque QT, je ne pense pas que mon problème se limite à celle-ci. Je vais quand même l'utiliser pour illustrer mon problème ici.
Dans mon monde, comme illustré ci dessus, je crée une une classe de base : le moteur.
Je crée aussi une classe Advanced Moteur qui hérite de la classe moteur et de la classe QObject, pour pouvoir beneficier des fonctions de la classe QOject (comme vous le devinez ici, des signaux et des slots)
A présent je considère un moteur, Rolls-Roys, qui lui communique avec mon pc avec un protocole Série. Du coup, je me dit que ça serait bien que mon moteur Rolls-Royce puisse dériver de la classe QTSerial, qui gère le protocole série, chez QT. Jusqu'à là rien ne semble bien folichon et ça devrait fonctionner.
Là où ca se complique, c'est que si l'on regarde de plus prêt, comme j'ai essayé tant bien que mal, d'illustrer ci dessous, QTSerial, on se rendra compte que celle-ci hérite indirectement de QObject (comme toutes les classes QT) : et là, comme vous pouvez vous en douter, si je prends la fonction deleteLater, il y a ambiguïté : si je fais(fonction qui est dans qobject.h), alors le copilo ne saura pas quelle voie prendre pour aller la chercher... ce qui est normal.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Rolls_Roys->deleteLater()
Alors, pour lever certaines ambiguités, j'ai essayé de virtualiser les héritages, après avoir lu http://loic-joly.developpez.com/arti...tage-multiple/. Idéalement, il faudrait que je fasse, d'après ce tutoriel la chose suivante :
Or modifier QIODevice.h est à proscrire, comme vous pouvez bien l'imaginer.
Du coup, j'ai essayé la chose illustrée ci dessous, sans succès :
Il y a t-il une façon de faire cet héritage virtuel dans mon cas?
J'ai trouvé une solution pas très jolie, je trouve, pour résoudre mon problème : c'est de surcharger les fonctions que j'utilise. Par exemple :
Et là l’ambiguïté est levée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void Rolls_Royce::deleteLater() { QObject::deleteLater(); }
Qu'en pensez-vous? Est-ce la seule solution que je puisse utiliser?
Partager