Rechercher : dans
Par :

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

Dernière réponse le 7 avr 2007 à 20:22:41 peter1789, le 6 avr 2007 à 18:08:41 
 Signaler ce message aux modérateurs

Bonjour à tous,
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

Meilleures réponses pour « [C++] Accès à une classe fille » dans :
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Les templates en C++ VoirIntroduction Avantages Inconvénients Quand utiliser des templates ? Que dois-je mettre dans les .hpp et dans les .cpp ? Convention de notations Quelques templates célèbres STL BGL Premiers pas Spécifications de templates Template par...
Les objets en langage C++ VoirLa création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique La création statique d'objets consiste à créer un objet en lui affectant un...
Les classes en langage C++ VoirLa notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...
Les accesseurs et les mutateurs en langage C++ VoirLa protection des données membres L'un des aspects les plus essentiels du concept « orienté objet » est l'encapsulation, qui consiste à définir des étiquettes pour les données membres et les fonctions membres afin de préciser si celles-ci sont...

1

mamiemando, le 6 avr 2007 à 21:53:38

Ca n'a pas de sens. Que veux tu faire ?

Bonne chance

Répondre à mamiemando

2

peter1789, le 7 avr 2007 à 11:08:00

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)

Répondre à peter1789

3

kilian, le 7 avr 2007 à 16:16:49

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.
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

4

 mamiemando, le 7 avr 2007 à 20:22:41

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.

Répondre à mamiemando