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 :

Structure: Retour de méthode


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 3
    Par défaut Structure: Retour de méthode
    Bonjour,

    Ce code est-il correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    struct titi
    {
    	int a;
    	int b;
    };
     
    class toto
    {
    public:
     
    	titi func()
    	{	
    		titi s;
     
    		s.a = 2;
    		s.b = 3;
    		return (s);
    	}
    };
     
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	toto t;
     
    	titi a = t.func();
     
    	return 0;
    }
    Ou alors je dois donné l'adresse de ma structure en parametre?
    Si je dis pas de betise, dans mon cas, je fais une copie de ma structure donc pas de soucis, non?

    Merci d'avance

  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
    Oui ça marche. Un simple test aurait pu t'en convaincre (et pas besoin de parenthèses dans le return s)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 3
    Par défaut
    Oui mon test marche mais j'ai deux autres questions:

    1/ C'est dans quel cas qu'il faut évité de retourner une adresse local?

    2/ Et est-ce plus optimé de retourné une structure ou de la passé en parametre?

    C'est à dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    titi func()
    {
       titi t;
       t.a = 2;
       t.b = 3;
       return (t);
    }
     
    //Appel:
    titi a = func();
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void func(titi *t)
    {
       t.a = 2;
       t.b = 3;
    }
     
    //Appel:
    titi a;
    func(&a);
    De plus je comprend pas pourquoi quand je fais:

    dans le premier cas, je rentre qu'une fois dans le contructure de titi

    Merci

  4. #4
    Membre expérimenté Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Par défaut
    Citation Envoyé par abcdefghijk Voir le message
    En theorie pure, passer la structure en parametre est plus optimisé ( permet d'eviter une construction / copie).

    De plus je comprend pas pourquoi quand je fais:
    dans le premier cas, je rentre qu'une fois dans le contructure de titi
    Le compilateur optimise automatiquement dans ce cas la :
    Donc un appel constructeur, puis un appel constructeur par copie, plutot que 2 appels constructeurs plus une copie.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 3
    Par défaut
    Merci

    Donc par logique/optimisation il vaut mieux passé la structure en parametre (pointeur) ?

    Et dans ce cas, pointeur ou ref?

  6. #6
    Membre expérimenté Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Par défaut
    Citation Envoyé par abcdefghijk Voir le message
    Merci

    Donc par logique/optimisation il vaut mieux passé la structure en parametre (pointeur) ?

    Et dans ce cas, pointeur ou ref?
    Le pointeur te permet de passer NULL, mais ça te coute un test de plus, justement dans le cas où tu lui passe null ....

    A toi de voir

Discussions similaires

  1. Tableau de généric en retour de méthodes
    Par lvr dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 07/12/2009, 21h27
  2. Problème de retour de méthode (Java/Flex)
    Par Boubec dans le forum Flex
    Réponses: 2
    Dernier message: 13/11/2009, 09h52
  3. [JNI] Tableaux en paramètres et retour de méthode
    Par elamarti dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 10/10/2008, 16h10
  4. [Objet] Conseil retour de méthode
    Par charlene44 dans le forum Delphi
    Réponses: 10
    Dernier message: 06/03/2007, 09h57
  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