3Fermer5
Kevin KoflerLe 20/09/2009 à 19:36
icule {   Q_OBJECT   public:     int nb_pignons, nb_plateaux; }; void Vehicule::debug_output() {   Moto *moto = qobject_cast<Moto *>(this);   if (moto) {     qDebug("%s", moto->carburant.toLocal8Bit().data());   } else {     Velo *velo = qobject_cast<Velo *>(this);     if (velo) {       qDebug("%d %d", velo->nb_pignons, velo->nb_plateaux);     }   } }Bah, l'alternative, c'est d'avoir une méthode virtuelle dans la classe Véhicule qui fait le boulot, après c'est pour l'ajout d'une méthode qu'il faut tout modifier. Il y a aussi des bidouilles comme le visitor pattern qui peuvent aider. Ou sinon, une solution (bidouille, il faut le dire) comme ça (l'exemple est encore en Qt parce que c'est ce que je connais le mieux):class Vehicule {   Q_OBJECT   public:     int vitesse_moyenne;     void debug_output(); }; class Moto : public Vehicule {   Q_OBJECT   public:     QString carburant; }; class Velo : public Veh
(L'avantage de cette solution est qu'il y a un seul endroit à modifier si on ajoute une classe (la classe Véhicule) et de même si on ajoute une méthode.)