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.

Nom : HeritageDiamant.PNG
Affichages : 528
Taille : 14,0 Ko

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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Rolls_Roys->deleteLater()
(fonction qui est dans qobject.h), alors le copilo ne saura pas quelle voie prendre pour aller la chercher... ce qui est normal.

Nom : HeritageDiamant2.png
Affichages : 432
Taille : 18,1 Ko

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 :

Nom : HeritageDiamant3.png
Affichages : 433
Taille : 19,1 Ko

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 :

Nom : HeritageDiamant4.png
Affichages : 435
Taille : 18,9 Ko

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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
void Rolls_Royce::deleteLater()
{
QObject::deleteLater();
}
Et là l’ambiguïté est levée.

Qu'en pensez-vous? Est-ce la seule solution que je puisse utiliser?