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 :

accès au données private d'une classe


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut accès au données private d'une classe
    Bonjour,
    j'ai un problème tout bête, tout d'abord, voici le code
    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
    33
    34
     
    class NodeD2Q9
    {
    //================================================================
    //Class for a node with a 2 dimensions and 9 directions
    //name convention:
    //    f22 f12 f21             
    //       \ | /                
    // f13 -- f00 -- f11
    //       / | \
    //    f23 f14 f24             
    //================================================================
    #ifndef Node2DQ9_h
    #define Node2DQ9_h
     
    class NodeD2Q9
    {
      private:
        double density;
      public:
        //the distribution functions are public, so they can be modified easily
        double f00, f11, f12, f13, f14, f21, f22, f23, f24;
        //compute and save the density of the node
        double Density()
        {
          density = f00 + f11+f12+f13+f14 + f21+f22+f23+f24;
          return density;
        }
        double print() {return density;}
        //Be careful to compute the density before using this function
        inline double SpeedX() { return (f11-f13 + f21+f24-f22-f23)/density;}
        inline double SpeedY() { return (f12-f14 + f21+f22-f23-f24)/density;}
    };
    #endif
    Il s'agit d'une petite classe pour gérer un noeud d'une future grille.
    Le problème se situe au niveau de la fonction Density(), elle retourne bien la bonne densité, mais density n'est pas modifié durablement. Si bien que lorsque j'appelle ensuite SpeedX(), je n'obtient pas le bon résultat.
    D'où cela vient t'il et comment y remédier?
    Remarques:
    J'utilise ubuntu et je compile avec g++
    Une solution que j'ai trouvé est de faire deux fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        void ComputeDensity()
        {
          density = f00 + f11+f12+f13+f14 + f21+f22+f23+f24;
        }
        double GetDensity()
        {
          return density;
        }
    j'ai le warning suivant du compilateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    In file included from main.cpp:5:
    NodeD2Q9.h:7:1: warning: multi-line comment
    pourtant la ligne 7 est un commentaire:

  2. #2
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    \ est le symbole de continuation de ligne, le message est clair, t'as un commentaire qui continue sur une deuxieme ...

    Par contre quant je lis:
    "//Be careful to compute the density before using this function"
    pourquoi ne pas appeller density() de manière automatique dans tes fonctions ?

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci, pour l'histoire des commentaires, j'ai remplacé les // par des /* et */ et je n'ai plus de message d'erreur.
    Pour revenir au problème principal, je ne veux pas que les fonctions SpeedX() et SpeedY() appelle le calcul de la fonction de la fonction density() simplement pour ne pas calculer deux fois la même chose.

  4. #4
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    donne un exemple complet compilable stp

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Voici un exemple de main.cpp utilisant la classe présentée
    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>
    using std::cout;
    using std::endl;
    #include "NodeD2Q9.h"
     
    int main(void)
    {
      NodeD2Q9 toto;
      toto.f00 = 3; toto.f11 = 9.6; toto.f12 = 3; toto.f13 = 3; toto.f14 = 3; toto.f21 = 3; toto.f22 = 3; toto.f23 = 3; toto.f24 = 3;
      cout << toto.f00 << " " << toto.Density() <<  " "  << toto.SpeedX() << endl;
      return 0;
    }
    et voici le résultat obtenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    3 33.6 9.56592e+305

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Je viens de voir que si je sors le toto.Density() de la ligne cout << ..., le programme marche.
    Cela siginfie que l'on ne peut pas modifier les données membres par une fonction publique si elle est dans un flux, c'est ça?

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/08/2012, 21h05
  2. Modification de données private d'une classe
    Par shaftJackson dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 18/06/2008, 14h31
  3. attribut private d'une classe
    Par poukill dans le forum C++
    Réponses: 7
    Dernier message: 24/07/2006, 11h50
  4. acces a uneressource bitmap depuis une classe
    Par firejocker dans le forum MFC
    Réponses: 9
    Dernier message: 03/02/2006, 21h48
  5. Probleme d'acces aux données lors d'une de jointure
    Par FlyByck dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/12/2005, 13h59

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