C++ hériatage

Résolu
The_First_Empire Messages postés 187 Date d'inscription   Statut Membre Dernière intervention   -  
The_First_Empire Messages postés 187 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, j'ai un soucis de compréhension concernant les héritages, voici un exemple concret:

Une classe mère A dont une des méthode retourne un objet de type A
A effectue(A objetA); //prototype de la méthode

Une 2ème classe B qui hérite de A dont j'aimerai que la même fonction ressemble à
B effectue(B objetB);

B objetB;
objetB.effectue(objetB);//cette ligne marche sans avoir à déclarer la méthode effectue dans la classe B..

Je comptais dans B appeler la méthode qui retourne l'objet A puis le transformé en objet B mais
aparement ça marche sans... mais pourquoi?
merci d'avance

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Exemple : A=Animal, B=Brebis, une brebis est un animal (B hérite de A), mais tous les animaux ne sont pas des brebis (A n'hérite pas de B).
Toi tu as une méthode A m(A), par exemple Animal donneNaissance(Animal).
N'importe quel animal peut donner naissance à un autre animal.

Si tu ne redéfinis pas ta méthode B m(B), tu peux utiliser celle de A.
Dans ce cas ta brebis (qui est un animal) va donner naissance à un autre animal, mais ce n'est pas forcément une brebis (le type de retour est A, pas B)
Si tu veux qu'une brebis donne naissance à une brebis il faut redéfinir la méthode B m(B) pour que dans le cas spécifique où l'animal est une brebis, l'animal à qui il donne naissance est aussi une brébis...

Je sais pas si tu comprends mieux avec mes brebis ^^
1
The_First_Empire Messages postés 187 Date d'inscription   Statut Membre Dernière intervention   11
 
Merci de ta réponse, j'avais un peu près compris le principe en codant jusqu'à maintenant, c'est plus le type de retour qui me gênait et tu viens de m'éclaircir avec tes brebis, le type de retour est bien celle de la classe mère et non celle de la fille.

B effectue(B objetB) retourne donc un A, au lieu de redéfinir toutes les méthodes de ce type, j'ai juste réussi à redéfinir l'opérateur = dans B pour pouvoir écrire :
objetB=effectue(B objetB)
Pb résolu merci bien
0