[C++] héritage
Aurélien
-
marvinrouge -
marvinrouge -
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+
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
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
c'est le principe même de l'héritage, cercle et rectangle sont des Figures mais spécialisées
Chouba
Casque Bleu forumique
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.
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.
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 ?
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 ?
Chouba
Casque Bleu forumique
Merci
Auré
Chouba
Casque Bleu forumique