IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Heritage et type de retour des methodes


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 13
    Par d�faut Heritage et type de retour des methodes
    Bonjour a tous, ca fait un peut de temp que j'essaie de resoudre ce probleme -_- mais rien a faire

    Voila j'ai une methode :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    virtual Noeud& filsGauche()  =0;
    define dans una classe abstrate Noeud

    Ce une reference, mais etant abstraite je n'ai pas trouve autre chose pour eviter que G++ ne rale.

    Maintenant je cree la classe NoeudV et je veut redefinir la methode:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    NoeudV& filsGauche() {return NoeudV(2*index+1,infos);}
    Bon ca ne marche pas, car on renvoie un NoeudV& qui est une reference vers un temporaire qui n'existe plus, alors je met

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    NoeudV filsGauche() {return NoeudV(2*index+1,infos);}
    Mais il aprecie pas, il trouve que ce pas la meme -_- or si j'avait bien compris le type de retour n'est pas dans la signature de la fonction...

    Comment faire :'(

  2. #2
    Membre chevronn�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par d�faut
    Salut,

    Le type de retour fait partie de la signature de la fonction.

    Donc quand tu red�finis une fonction virtuelle, il faut que le type de retour soit le m�me. La seule exception � cette r�gle : le type de retour de la fonction red�finie peut �tre un type d�riv� du type de retour de la fonction virtuelle. Mais dans ce cas il faut manipuler la variable de retour de mani�re "polymorphe" autrement dit via un pointeur ou une r�f�rence.

    En effet, si B d�rive de A, il est possible d'affecter un B* � un A* ou un B � un A&, d'o� cette possibilit� de changement de type. Par contre il n'est pas possible d'affecter un B � un A.

    Si tu utilises une r�f�rence, tu n'as pas le choix, il faut que ta variable soit initialis�e avant. Sinon tu peux retourner un pointeur et allouer celui-ci dans le corps de ta fonction avant de le retourner, mais je n'aime pas trop cette m�thoe, l'ownership du pointeur est transf�r�e de mani�re implicite.

  3. #3
    Membre habitu�
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 13
    Par d�faut
    mmm mais pour l'avoir declarer avant ce n'est pas tjr evident non?
    Et je ne voit pas comment faire en tout cas dans le cas de ma classe ^^'

    Pour les pointeur, j'immagine donc que faire une methode qui fait directement un return ce n'est plus bon ^^"

    Mais pourquoi tu n'aime pas cette facon deja? (ce un travail pour mes cours donc si il y a des truc pas bien faut que jepuisse le savoir pour ecrire un code propres)

    Merci d'avance

  4. #4
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Le type de retour ne fait PAS partie de la signature de la fonction - pas au sens recherche de fonction qui va bien -, en revanche, il est analys� dans le cas d'une hi�rarchie pour avoir une coh�rence - le type de retour d'une hi�rarchie fille doit h�riter du type de retour dans la hi�rarchie parente -. Et une r�f�rence transform�e en non r�f�rence, ce n'est pas le m�me type, donc c'est dans le dernier cas que �a plante.

  5. #5
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Le polyrmohisme d'inclusion (en C++: h�ritage + red�finition de fonctions membres virtuelle) ne me parait pas �tre ce qu'il y a de plus indiqu� pour d�finir des arbres. Au contraire du polymorphisme param�trique (C++: templates).

    Mais passons. De tous les arbres que j'ai manipul�s, les noeuds existaient d�j� avant qu'on les cherche et renvoie. Et du coup, apr�s seuls des pointeurs se balladent.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  6. #6
    Membre habitu�
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 13
    Par d�faut
    les template rentrerons dans un deuxieme temp ^^ ce un travail d'ecole j'ai donc des conigne a respecter.

    Mais j'envisage la solution avec des pointeur, meme si j'ai jamais vu ce gendre de code.

  7. #7
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    virtual std::auto_ptr<Noeud> filsGauche()  = 0;
    Par exemple.

    Mais c'est bien s�r pas tr�s bon.
    Je vois pas pourquoi tu devrais utiliser de l'h�ritage pour indiquer diff�rents types de noeuds. Tout ce que tu peux diff�rencier c'est les noeuds sans fils, sans fils gauche, sans fils droit, et avec les deux.

  8. #8
    Membre habitu�
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 13
    Par d�faut
    oO et ce quoi ca?

    Tu n'aurait pas un lien vers un tuto qui explique stp?

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Type de retour des surcharges d'op�rateur
    Par syl1405 dans le forum C++
    R�ponses: 8
    Dernier message: 16/06/2010, 17h22
  2. creation de "TYPE OBJECT" avec des methodes
    Par TheBlackReverand dans le forum Oracle
    R�ponses: 2
    Dernier message: 15/06/2009, 20h57
  3. Type de retour des WebMethod
    Par oclone dans le forum Services Web
    R�ponses: 2
    Dernier message: 11/06/2009, 15h57
  4. R�ponses: 6
    Dernier message: 18/04/2009, 11h37
  5. reflexion et type de retour des m�thodes
    Par money mark dans le forum Langage
    R�ponses: 2
    Dernier message: 09/04/2006, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo