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 :

Savoir utiliser les fonctions membres de class


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut Savoir utiliser les fonctions membres de class
    bj,

    je voudrais savoir comment utiliser des variables cree dans une fonction et l'utiliser dans une autre. Exemple:
    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
     
    class PPM {
      public:
        Read(const string &);
        Write(const string &,const string &,const string &);
      private:
        int nrows, ncols;
    }
     
    void PPM::Read(const string &fname) {
    PPM ppm;
    char r,g,b;
    ...
    //... lecture de ppm.nrows et ppm.nrows depuis un fichier
     
    // et quelques procedure pour acquerir r,g,b
    }
     
    void PPM::Write(const string &r,const string &g,const string &b){
     
    // je voudrais utiliser les valeurs de de ppm.nrows et ppm.nrows ICI 
    //dans cette fonction. Comment je fais, sachant que je ne peux modifier 
    //les arguments de Write() ?
    }
    Merci

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    mettre PPM ppm comme variable membre ?

  3. #3
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    mettre PPM ppm comme variable membre ?
    Cela ne va pas regler le probleme car mettre PPM ppm comme variable membre va declarer une nouvelle variable ppm.nrows...

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    A mon avis, déclarer un PPM comme variable membre d'un PPM ça va plutôt provoquer un plantage façon fonction récursive (quand on va instancier un PPM, il va vouloir créer son PPM membre, qui va à son tour vouloir créer son PPM membre etc.) ... si tant est que ça dépasse le stade de la compilation : le compilateur va tenter de créer une variable membre d'une classe qu'il est en train de définir et dont il n'a pas la taille ; à moins de faire une variable membre static.

    virtuadrack peux-tu préciser ce que tu souhaites faire ? J'avoue que j'ai un peu de mal à te suivre.

  5. #5
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Noxen Voir le message
    A mon avis, déclarer un PPM comme variable membre d'un PPM ça va plutôt provoquer un plantage façon fonction récursive (quand on va instancier un PPM, il va vouloir créer son PPM membre, qui va à son tour vouloir créer son PPM membre etc.) ... si tant est que ça dépasse le stade de la compilation : le compilateur va tenter de créer une variable membre d'une classe qu'il est en train de définir et dont il n'a pas la taille ; à moins de faire une variable membre static.

    virtuadrack peux-tu préciser ce que tu souhaites faire ? J'avoue que j'ai un peu de mal à te suivre.
    Mon programme crée un object de la class PPM (PPM ppm) dans la fonction Read(), puis j'assigne aux variables relies a la class PPM des ints, ces variables sont "ppm.nrows" et "ppm.ncols".

    a la fin de la fonction Read(), ppm.nrows = 300 et ppm.ncols = 654 (exemple).

    Maintenant je veux passer a la fonction Write() ces valeurs pour les utiliser pour faire une écriture sur un fichier, comment faire ?

  6. #6
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Serieusement je suis desolé mais je ne comprends pas bien le probleme ?
    Tu veux partagé des variables ?

    Je sais pas si cela repondra a ta question mais je te propose cela :

    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
    class PPM {
      public:
        Read(const string &);
        Write(const string &,const string &,const string &);
      private:
        int nrows, ncols;
    }
     
    void PPM::Read(const string &fname) {
    char r,g,b;
    // ici tu affectes des valeur a nrows et ncols a partir de ton traitement
    //Ex ci-dessous:
    this->nrows = une_valeur1;
    this->ncols = une_valeur2;
    }
     
    void PPM::Write(const string &r,const string &g,const string &b){
    {
    //ici tu peux utiliser maintenant nrows et ncols qui auront donc les valeurs
    //affectées apres l'execution de la methode Read(); c'est a dire une_valeur1 et une_valeur2
     
    }

    Je sais pas si j'ai repondu a ta question ?
    Peut etre que je suis completement a coté, si c'est le cas desolé et essaye de preciser le probleme.

  7. #7
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    C'est ce qui m'a l'air d'être le plus simple et le plus logique. Mais peut-être virtuadrack peut-il apporter plus d'information sur sa conception ?

  8. #8
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Merci, ca marche, c'est ce que je voulais.

    Mais si c'est une structure au lieu d'une classe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct {
        uchar pixel[3];
        } ppmimg_t;
    et que j'ai déclaré dans ma fonction Read():

    et que je lui ai assigne une valeur elle aussi

    que faire pour utiliser cette valeur dans une autre fonction write ?

    y a t il un équivalent de this-> pour les structures ?

    Merci

  9. #9
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    En C++ les structures les classes sont la même chose, à ceci près que les membre d'une classe par défaut sont private, alors que ceux d'une structure sont public. A l'usage, on préfère utiliser les classes, on utilise les structures que de façon marginale, par exemple à l'intérieur d'une autre classe.
    Par contre, évite les typedef struct à la C, définie et utilise tes structures comme les classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Déclaration
    struct MaStructure{
    int value;
    };
     
    int main(){
        MaStructure s; // Instanciation
        s.value = 7; // Accès au membre public
     
        return 0;
    }

  10. #10
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    tu n'as pas bien compris la question...

    je voulais utiliser la valeur de pix.pixel = val

    dans une autre fonction.

    c'est a dire que pix.pixel pourrait être n'importe quelle valeur val a la fin de l'exécution de la fonction Read() et je voudrais la passer a une autre fonction Write() pour l'utiliser.

    je voudrais que dans la fonction Write(), pix.pixel soit égal a val des le départ.

  11. #11
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Dans ce cas il te faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PPM PPM_Read(const string &fname) {
       PPM ppm;
       char r,g,b;
    ...
    //... lecture de ppm.nrows et ppm.nrows depuis un fichier
     
    // et quelques procedure pour acquerir r,g,b
       return ppm;
    }

  12. #12
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tu peux aussi essayé ca c'est le meme principe que ta question précédente ?



    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
    31
    32
    class PPM {
      public:
        Read(const string &);
        Write(const string &,const string &,const string &);
      private:
        int nrows, ncols;
    //Ajout de ta structure en variable membre
    ppmimg_t pix;
     
    }
     
    void PPM::Read(const string &fname) {
    PPM ppm;
    char r,g,b;
    ...
    //Ici tu utilise ta structure
    pix.pixel=val;
     
     
    }
     
    void PPM::Write(const string &r,const string &g,const string &b){
     
    // je voudrais utiliser les valeurs de de ppm.nrows et ppm.nrows ICI 
    //dans cette fonction. Comment je fais, sachant que je ne peux modifier 
    //les arguments de Write() ?
     
    //ici pix.pixel aura la valeur val si tu a bien sur executé la fonction read avant
     
     
     
    }

  13. #13
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Citation Envoyé par virtuadrack Voir le message
    je voudrais savoir comment utiliser des variables cree dans une fonction et l'utiliser dans une autre.
    Par principe, une fonction est un block unitaire et autonome, elle sert à faire l'une de 2 choses (ou éventuellement les 2) :
    - effectuer un traitement (éventuellement pour modifier des variabes venues de l'extérieur et passées par référence) ; on parle alors plutôt de procédure ; ex : afficher un tableau, ou initialiser le contenu d'un tableau ;
    - obtenir une valeur de retour ; ex : obtenir la racine carré d'une nombre.

    Si tu veux que des variables soient affectées par 2 fonctions il te faut les créer à l'extérieur et appeler tes fonctions sur les 2. Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    const int size = 20;
    int tab[size];
     
    remplirTableau(tab, size);
    afficherTableau(tab, size);
    Les classes te permettent de regrouper des données et des traitements dans un ensemble logique, c'est pourquoi superjaja te proposait son code.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/12/2005, 23h09
  2. utilisation de fonction membre dans une autre
    Par tcharles dans le forum C++
    Réponses: 4
    Dernier message: 14/12/2005, 17h19
  3. Problèmes de fonctions membres de classe templates, gcc3.3.6
    Par yves.dessertine dans le forum Autres éditeurs
    Réponses: 12
    Dernier message: 17/10/2005, 21h36
  4. Réponses: 4
    Dernier message: 10/02/2005, 16h10
  5. Réponses: 11
    Dernier message: 22/12/2003, 21h06

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