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 :

Utiliser une variable d'une autre fonction x dans une fonction y


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Mai 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Utiliser une variable d'une autre fonction x dans une fonction y
    Bonsoir tout le monde ;

    J'apprends le C++ et je suis un gros débutant pour l'instant,

    je m'exerce à découper les fonctions, mais j'ai remarqué que c'est presque impossible de faire appel à une variable local dans une autre fonction que la sienne, j'ai essayé de trouver des solutions sur les forums en vain.

    Je croyais qu'en écrivant " return variable x ;" à la fin j'allais récupérer la variable pour l'utiliser dans une autre mais ça pas marché, surtout que la fonction ne contient aucune instruction, seulement la déclaration de la variable.

    Je sais que c'est pas faisable mais existe-il des astuces pour avoir le même résultat ?

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    Une variable locale est comme son nom l'indique une variable locale à la fonction. Pour avoir une variable visible de toutes les fonctions, il faut créer une variable globale.

    Quand tu passes un paramètre à une fonction, celui-ci est copiée dans une variable interne à celle-ci. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void affiche(char *texte)
    {
     printf("%s\n",texte);
    }
     
    affiche("Bonjour");
    La fonction affiche attend un pointeur *char qu'il stocke dans texte. texte est ensuite utilisé avec printf.
    Pour récupérer une valeur interne à la fonction, il faut effectivement utiliser return, mais il faut que la fonction soit construite pour récupérer la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int affiche(char *texte)
    {
     printf("%s\n",texte);
     return 2;
    }
     
    int retour=affiche("Bonjour");
    Tu vois que la fonction est déclarée avec le préfixe int au lieu de void (void->vide), ce qui permet de pouvoir retourner un int à l'appelant dans l'exemple. retour contiendra 2 après l'appel de la fonction affiche.


    En C++, on va plutôt créer des objets contenant des méthodes (fonctions internes à l'objet) et des propriétés (variables internes à l’objet). Selon ta construction d'objet, ses méthodes et propriétés seront soit public, private, ou protected. public : accessible à n'importe qui de n'importe ou, private : accessible uniquement à l'objet, private accessible à l'objet et à ses héritiers. Un objet peut contenir des propriétés/méthodes à la foi public, private, protected.

    Il ne faut pas bruler les étapes, Un peu de lecture :
    https://cpp.developpez.com/cours/cpp-objet/
    https://cpp.developpez.com/cours/
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 110
    Points
    6 110
    Par défaut
    Bonjour,

    Citation Envoyé par jloic96 Voir le message
    je m'exerce à découper les fonctions, mais j'ai remarqué que c'est presque impossible de faire appel à une variable local dans une autre fonction que la sienne, j'ai essayé de trouver des solutions sur les forums en vain.

    Je croyais qu'en écrivant " return variable x ;" à la fin j'allais récupérer la variable pour l'utiliser dans une autre mais ça pas marché, surtout que la fonction ne contient aucune instruction, seulement la déclaration de la variable.
    Si je comprends bien ton messages, tu essaies d'écrire un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
     
    int cube(int x) {
    	const int result = x*x*x;
    	return result;
    }
     
    // CODE QUI N'A PAS DE SENS :
    int main() {
    	cube(5);
    	std::cout << cube.result << '\n';
    	return 0;
    }
    La solution qui marche est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
     
    int cube(int x) {
    	const int result = x*x*x;
    	return result;
    }
     
    int main() {
    	const int number = cube(5);
    	std::cout << number << '\n';
    	return 0;
    }
    On peut aussi écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <iostream>
     
    int cube(int x) {
    	return x*x*x;
    }
     
    int main() {
    	std::cout << cube(5) << '\n';
    	return 0;
    }
    Comme result est une variable locale non statique de cube, elle est détruite quand on sort de cube. Donc cube.result n'a pas de sens, puisqu'il s'agit d'une variable qui n'existe plus.
    D'ailleurs, même si result était une variable locale statique, donc qui survivrait même après l'exécution de la fonction, on n'aurait quand même pas le droit d'écrire cube.result, car on n'a pas automatiquement le droit d'accéder à une variable locale depuis l'extérieur. C'est fait exprès.

    Quand on débute et que l'on écrit de tout petits programmes, on peut avoir l'impression que ce serait pratique de pouvoir accéder directement à toute donnée du programme depuis n'importe quel endroit du programme. Les variables globales sont alors attrayantes.
    Par contre, dans un gros programme trop compliqué pour être compris entièrement par une seule personne, une architecture dans laquelle trop de données sont directement accessibles partout sans restriction est un cancer pour la maintenance.

    Citation Envoyé par chrtophe Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void affiche(char *texte)
    {
     printf("%s\n",texte);
    }
    char * et printf sont plus proches du C que du C++ idiomatique. En C++ idiomatique, ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
    #include <string_view>
     
    void afficher(std::string_view texte)
    {
    	std::cout << texte << '\n';
    }
     
    int main() {
    	afficher("Bonjour.");
    	return 0;
    }
    Ou alors, avant le C++17 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
    #include <string>
     
    void afficher(const std::string& texte)
    {
    	std::cout << texte << '\n';
    }
     
    int main() {
    	afficher("Bonjour.");
    	return 0;
    }

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    char * et printf sont plus proches du C que du C++ idiomatique. En C++ idiomatique, ce serait plutôt
    oui, tu as raison.
    je fais pas de C++ donc est le réflexe C.

    Et du coup je pense qu'en C++ on utilise pas le return non plus.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Mai 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    ...
    C'est à peu près ce que je veux , sauf que pour mon exercice la valeur en return doit être saisie par l'utilisateur avec un Cin, je vais jeter un œil aux liens pour me documenter sur le sujet, merci beaucoup

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

Discussions similaires

  1. Remplacer lettres contenues dans une variable par d'autres lettres
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 02/12/2009, 18h53
  2. [XL-2007] Mettre des fonctions excel dans une variable
    Par EmmanuelleC dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/08/2009, 14h24
  3. Réponses: 2
    Dernier message: 05/05/2008, 17h25
  4. Réponses: 3
    Dernier message: 28/09/2007, 16h58
  5. [Fonction]récuperer dans une variable le résultat d'une requete
    Par nejisama8 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/04/2007, 12h34

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