[C++] héritage

Fermé
Aurélien - 30 juin 2003 à 12:01
 marvinrouge - 30 juin 2003 à 16:53
Salut !
G une petite question concernant l'héritage en C++.
Imaginons une classe Figure, et deux autres classes rectangle et cercle héritant de figure.
Si je crée un vecteur/tableau de figures, est-ce que je pourrais y insérer des rectangles et cercles, qui, même si ils ne sont pas du même type, en héritent quand même.
Merci A+

3 réponses

choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
30 juin 2003 à 12:08
Salut

c'est le principe même de l'héritage, cercle et rectangle sont des Figures mais spécialisées

Chouba
Casque Bleu forumique
0
Donc rectangle et cercle peuvent bien être stockés dans un talbeau de figure ?
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101 > Aurélien
30 juin 2003 à 13:39
oui, à condition de savoir de quel type de figure tu as affaire lorsque tu dois l'extraire de ta structure de données

Chouba
Casque Bleu forumique
0
Aurélien > choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024
30 juin 2003 à 13:45
Et il y a moyen de savoir quel est le type de la figure avant de l'extraire? (a priori non étant donnée ta réponse..)
Merci
Auré
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101 > choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024
30 juin 2003 à 14:55
je ne connais pas tous les objets et leurs méthodes héritées en C++, mais par exemple en java, il existe une méthode "instanceOf() qui permet celà, peut être qu'en C++, il existe l'équivalent...

Chouba
Casque Bleu forumique
0
olivier.s Messages postés 49 Date d'inscription jeudi 11 avril 2002 Statut Membre Dernière intervention 28 mars 2015 15
30 juin 2003 à 15:54
Salut,

Ca fait un petit moment que j'ai pas touché au C++, dc je pense mais je suis pas sur que tu n'as pas de chose similaire a instanceof de Java. La si je dis une connerie, arretez moi.

Par contre tu peux peut etre declarer une methode virtuelle pure ds ta classe mere et la redefinir ds tes clases fille pour qu'elle te done le nom de la classe. Et t'apelles direct ta methode depuis l'element du vecteur : monVecteur[i].quelleClasse() si c'est possible. Quelque chose comme ca quoi. J'espere avoir ete clair et que ca d'aidera.
A ce niveau de mon explic je te cache pas que ce que je te raconte me rappelle fortement les listes (ou autres piles..) pseudo-generique en C. Mais bon...

Par contre tu parles de vecteurs, si t'utilises la STL n'inseres pas directement tes objets dedans mais des pointeurs (ca evite les appels aux constructeurs de copie de tes objets et tout le bazar s'en suivant pour des clopinettes). Va voir la doc de la STL.
0
marvinrouge
30 juin 2003 à 16:53
Travaille avec unn tabelau de pointeurs

int nbFigures = 1000;

Figure** tab = new Figure*[nbFigures];

for (int i=0; i<nbFigures; i++)
if (i%2==0)
tab[i] = new Cercle(i); // cercle de rayon i
else
tab[i] = new Rectange(2*i, i); rectange de cotés 2*i et i

for int i=0; i<tab[i]; i++)
cout << "aire de la figure = " << tab[i]->calculeAire() << endl;

avec calculeAire() vurtuelle pure dans la classe figure

et calculeAire() retourne pi * rayon * rayon dans cercle
et calculeAire() retourne longuer * largeur dans cercle

ok ?
0