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 :

Paramètre formel & effectif


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Février 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 23
    Par défaut Paramètre formel & effectif
    Salut à tous,
    J'aimerais bien savoir pourquoi on change les noms des paramètres effectifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int somme(int x, int y)
    {
      return x+y;
    }
    et lors de l'appel de la fonction j'ai constaté qu'on change les noms des variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    main()
    {
      int a,b;
      cin>>a>>b;
      cout<<somme(a,b);
    }
    Donc pourquoi ne pas garder les mêmes noms de paramètres (garder x et y, les déclarer ensuite faire l'appel de somme(x,y)) !!!!

  2. #2
    Membre éprouvé Avatar de KsassPeuk
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Juillet 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 138
    Par défaut
    Lu'!

    Justement parce que l'on se moque des noms . Imagine que tu ne veuilles plus seulement additionner a et b mais également b et c, et c et d.

    Il te suffit de faire quelque chose comme ça :

    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
    int somme(int x, int y)
    {
      return x+y;
    }
     
    int main(){
      int a,b,c,d;
     
      //les saisies
      //[...]
     
      std::cout<<somme(a,b)<<std::endl;
      std::cout<<somme(b,c)<<std::endl;
      std::cout<<somme(c,d)<<std::endl;
    }
    Si l'on devait recréer une fonction pour chaque paire de variable qu'on a, ce serait l'horreur .

    Il faut voir les paramètres d'une fonction comme des variables locales qu'on nous aurait transmis à l'appel. Nous ce qui nous importe, ce n'est pas leur nom à l'extérieur de la fonction, c'est leurs valeurs. A partir de là, on peut bien les appeler toto, tutu, schtroumpf ou banane_flambee, on s'en moque. Après on essaiera quand même malgré tout de leur donner un nom qui ait un sens histoire de faciliter la relecture .

    Petite note, tu débutes sûrement le C++, mais ce point de la FaQ te sera certainement rapidement utile pour ne pas avoir de surprises bizarres en tapant une lettre à la place d'un entier :

    http://cpp.developpez.com/faq/cpp/?p...isies-avec-cin

    Ciao.

  3. #3
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Rien ne t'empêche de le faire, et pour un exemple simple, c'est même assez logique de procéder ainsi.
    Maintenant, ce qu'il faut comprendre, c'est que le nom d'un argument lui donne un sens, et que ce sens n'est valable qu'à l'intérieur de la fonction.
    Par exemple, imagine une fonction de dessin de cercle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void dessine_cercle (int radius, int x, int y);
    Cette fonction prend en paramètre le rayon du cercle, et les coordonnées du centre.
    A l'intérieur de dessine_cercle, x, y et radius ont un sens qui est très clair.

    Maintenant, imagine que tu veuilles dessiner un cercle autour du curseur de la souris.
    Tu préfères lire ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dessine_cercle (radius, x, y);
    ou celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dessine_cercle (preference_radius, mouse_x, mouse_y);
    Dans la deuxième version, une personne qui relit le code comprend ce que tu essayes de faire: tu veux dessiner un cercle autour de la position de la souris, en prenant pour rayon une valeur qui provient (peut-être) des préférences de l'utilisateur.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    ATTENTION: main() doit avoir un type de retour, et c'est int.


    Les paramètres d'une fonctions (paramètres formels) sont des variables locales à celle-ci.
    Les arguments (paramètres effectifs) sont des valeurs utilisées pour initialiser les paramètres.


    En pratique, ton code revient à :
    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
    int main() {
        int a,b;
        cin>>a>>b;
        
        {//appel de int somme(int x, int y) par l'expression somme(a,b)
            int _somme_result;
            int x = a;
            int y = b
            {
                _somme_result = x+y;
            }
            cout<<_somme_result;
        }
    
        return 0;
    }

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    J'aime à donner des noms différents quand je poste des codes "pédagogiques", pour bien montrer que ce n'est pas la même variable mais seulement une copie.

    De plus, voir ce que dit phi1981.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/04/2009, 17h30
  2. Le type du paramètre formel 1 est incomplet
    Par KaNDeL dans le forum Débuter
    Réponses: 6
    Dernier message: 19/11/2008, 11h32
  3. Les paramètres formels
    Par Adorien dans le forum Développement
    Réponses: 0
    Dernier message: 24/04/2008, 10h49
  4. paramétres formels de main incompris
    Par sanatou dans le forum C++
    Réponses: 4
    Dernier message: 01/12/2006, 18h02
  5. paramètre formel et paramètre courant !
    Par Aioros dans le forum C
    Réponses: 6
    Dernier message: 03/09/2005, 02h35

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