[C++] Accès à une classe fille
Résolu
Bonjour à tous,
J'aimerais savoir comment, en C++, accéder à une classe fille à partir d'une classe de base.
Merci d'avance !
--
peter1789 :o)
J'aimerais savoir comment, en C++, accéder à une classe fille à partir d'une classe de base.
Merci d'avance !
--
peter1789 :o)
Configuration: Windows XP Firefox 2.0.0.3
2 réponses
-
Ca n'a pas de sens. Que veux tu faire ?
Bonne chance-
Bonjour mamiemando,
Pour répondre à ta question, je voudrais créer avec SDL une arborescence d'objets similaire à ce que l'on trouve en javascript. Voici mon code source en très simplifié :class Calque { // une surface SDL améliorée protected: // ici les attributs public: Calque(int hauteur, int largeur); ~Calque(); int ajouterEnfant(Calque* enfant) { // ajouter un enfant au calque // modification des attributs du futur calque enfant } }; class Image : protected Calque { // une image protected: // attributs public: Image(char* nomImage); }; Calque calque(50,50); // création d'un calque 50*50 Image image("photo.bmp"); // création d'une image à partir du fichier "photo.bmp" calque.ajouterEnfant(&image); // Ai-je le droit d'éxécuter cette instruction sachant que je modifierais les attributs d'une image à partir d'un calque, même si je donne une image à l'argument de type calque ?
Voilà, merci d'avance
--
peter1789 :o)
-
-
Yep mais c'est bizarre comme manière de faire. Enfin globalement vu qu'un image est un cas particulier de calque dans ta structure de classe, toute fonction qui attend un calque peut utiliser une image. Plutôt que de passer par des pointeurs moi je te conseille d'utiliser des références, c'est plus la classe : ca donne un code plus lisible et tu bénificies des avantages des pointeurs (pas de recopies inutiles, possibilité de modifier le paramètre pointé par la référence etc...)
Exemple :struct A{ int plop; A(int a0=0):a(a0){} }; int f(A & a){ a.plop = 2; }
Ensuite je ne sais pas trop ce que tu entends par "ajouter un enfant" mais si ca consiste à rajouter un objet dans un container, je t'invite à utiliser tout simplement des conteneurs de la STL, par exemple un std::map.
Pour conclure, tu peux utiliser sur une classe fille les méthodes protected et public de la classe mère (si c'est un héritage public) mais ce n'est pas le cas dans un héritage protected...
Enfin si tu as besoin d'utiliser des méthodes de la classe fille sur un objet de type mère (mais qui est en réalité une instance fille), tu disposes d'outils tels que le dynamic_cast ou le static_cast... à utiliser avec modération.