[C++] Accès à une classe fille

Résolu
peter1789 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,
J'aimerais savoir comment, en C++, accéder à une classe fille à partir d'une classe de base.
Merci d'avance !

2 réponses

mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Ca n'a pas de sens. Que veux tu faire ?

Bonne chance
0
peter1789 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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)
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > peter1789 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Si tu dois modifier les attributs propres à une image à partir d'un calque, alors autant faire une méthode comme
int ajouterEnfant(Image* enfant)

Mais si tu dois accéder à un attribut de l'image qui est hérité d'un calque, alors ça ne pose pas de problème.
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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.
0