Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/03/2007, à 01:01

Rodriguez

[C++]Héritage

Bonsoir,

j'ai une classe B qui hérite d'une classe A

class A{
private:
  int a, b, c;
  
public:
  void affiche(){ ...}
};

class B:public A{
private:
  int d,e;
  
public affiche(){...}
};

Dans la méthode affiche de la classe A, je demande d'afficher les valeurs des attributs a, b, c.
Dans la méthode affiche de la classe B, je souhaite appeler la méthode affiche de A pour avoir les valeurs de a, b, c et afficher les valeurs de d et e.

Comment est-ce que je dois faire dans la méthode affiche de B pour appeler celle de A.
Est-ce qu'il faut que je mette des "options" avant les méthodes ?

Merci

Hors ligne

#2 Le 12/03/2007, à 01:18

jobherzt

Re : [C++]Héritage

si B herite de A, alors B a ses propres valeurs a,b et c, tu n'as donc pas a appeler la methode de A, tu peux directement dans la methode de B afficher a,b et c.

Hors ligne

#3 Le 12/03/2007, à 04:22

FiFouille

Re : [C++]Héritage

il faut utiliser ce qu'on appelle "l'opérateur de résolution de portée", toujours bien à placer dans les dîners mondains.

A::affiche() devrait donc appeler la méthode affiche() de la classe A

avec un bel exemple bien long et bien crade, ça donne

#include <iostream>
using std::cout;
using std::endl;

class A {
        private:
                int a,b,c;
        public:
                A(int aa,int bb,int cc) {
                        a = aa; b = bb; c = cc;
                }
                void affiche() {
                        cout << a << b << c;
                }
};

class B: public A {
        private:
                int d,e;
        public:
                B(int aa,int bb,int cc,int dd,int ee) : A(aa,bb,cc) {
                        d = dd; e = ee;
                }
                void affiche() {
                        A::affiche();
                        cout << d << e;
                }
};

int main (void) {
        A testa(1,2,3);
        B testb(4,5,6,7,8);

        testa.affiche();
        cout << endl;
        testb.affiche();
        cout << endl;
        
        return 0;
}

Hors ligne

#4 Le 12/03/2007, à 21:34

slapierre

Re : [C++]Héritage

Je préconise la surcharge de l'opérateur d'affichage, c'est beaucoup plus élégant qu'une méthode affiche(). Voir :

http://forum.ubuntu-fr.org/viewtopic.php?id=101512


Simon


"Le spectre de la folie nous empêchera-t-il de hisser l'étendard de l'imagination?" - André Breton

Hors ligne

#5 Le 13/03/2007, à 00:03

FiFouille

Re : [C++]Héritage

Je crois que la technique du "une étape après l'autre" serait plus avisée dans le cas présent.

Je me vois mal partir tout de suite avec une explication sur les références, les flux, les classes amies et la surcharge d'opérateur.
Enfin, si t'es motivé tu peux, pas de problème, et n'oublie pas la partie héritage, ça inclut une petite subtilité pour la surchage de l'opérateur <<

Hors ligne

#6 Le 13/03/2007, à 01:38

Luc Hermitte

Re : [C++]Héritage

FiFouille a écrit :

Je me vois mal partir tout de suite avec une explication sur les références, les flux, les classes amies et la surcharge d'opérateur.

Les références doivent être vue avant l'héritage public. Les flux n'en parlont même pas.
Quant à l'amitié, avec les accesseurs qui vont bien, son intérêt est assez limité pour les I/O au travers de flux.

M'enfin bon. S'il part sur une fonction affiche (non virtuelle), c'est que son prof ne va pas tarder à leur montrer le polymorhisme d'inclusion. Cela me semble être un des cas où pinailler sur le comment la classe aurait dûe être définie ne va pas apporter dans chose. Attendez quelques semaines encore.