Portée des méthodes et données.

Portée des méthodes et des données membres dans les héritages.

operator ::

Voir version :

Pas de dépendances

Télécharger :

#include <iostream>
#include <cstdlib>

using namespace std;

class Mere
{
public:
    Mere(){}
    char* Get(){return "mere";}
    Mere(const Mere& m){cout<< "recopie mere"<<endl;}
};

class Fille:public Mere
{
public:
    Fille(){}
    char* Get(){return "fille";}
    Fille(const Fille& f){cout<< "recopie fille"<<endl;}
};


int main()
{
    Fille f;
    cout << "get sur une fille : " << f.Get() << endl;
// recopie : sale
    Mere m = f;
    cout << "get sur une mere : " << m.Get() << endl;
// reference : propre
    Mere& m2 = f;
    cout << "get sur une mere& : " << m.Get() << endl;
// portée
    cout << "portee : " << f.Mere::Get() << endl;

    system("pause");
    return 0;
}



Commentaires


  Le but de ce tuto est de montrer l'opérateur de portée dans un héritage.
  Nous pouvons constater que Fille hérite de Mere, et qu'elles ont toutes les deux une fonction Get !!

  Si j'instancie une Fille, et que je fais Get, j'appelle le get d'ou ?
  --> De la fille (vérifiez en lançant le programme)

  La fille a la priorité.

  Maintenant, imaginons que je veuille appeler, depuis une fille, la fonction get de la mere :

  1) je fais Mere m = f  --> Attention, vous créez une mere, et vous recopiez la partie mere de fille dedans : recopie.
  Vous voyez d'ailleurs le message "recopie de mere" s'afficher : parce que je l'ai mis dans le constructeur par recopie, pour
  bien montrer qu'on passe dedans.
  si ensuite vous faites m.Get(), vous appelez bien sur la fonction de Mere.

  2) je fais Mere& m2 = f --> Par de recopie ici : vous définissez m2 comme une reference sur f : pour ceux qui aiment les pointeurs, 
  c'est un peu comme si j'avais mis un pointeur sur f. Du coup, pas de recopie, mais si vous modifiez m2, ça modifie f. Principe des références.
  si ensuite vous faites m.Get(), vous appelez bien sur la fonction de Mere.

  3) vous vous dites que c'est dommage de créer une Mere, ou une Mere& juste pour appeler sa fonction.
  Vous appelez donc la fonction Get de Mere via son opérateur de portée.

  f.Mere::Get()

  Appelle directement la méthode Get() de Mere depuis la fille.


  Note : ceci marche aussi pour les données membre.
  Par exemple, si vous avez un "int a" dans la mere, et un "int a" aussi dans la fille. Vous etes dans une des méthodes de fille, et
  vous voulez accéder à a.
  Si vous appelez directement a = 5; vous appelerez celui de la fille. pour appeler celui de la mere, il faudra faire :
  Mere::a = 5;

  Cela revient au meme que pour les fonctions.