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 :

C++ classe et attributs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut C++ classe et attributs
    Bonjour,

    J'ai une classe composée d' un point h et un point cpp.

    Ma question serait :

    - si je fais dans le .cpp
    maclasse::setvariableclasse(var v); est ce que c'est different si j'avais fais directement mavariableclasse = v;

    car j'ai remarqué que dans le .cpp j'ai quand meme acces aux variables privées !

    Exemple

    j'ai mon .h
    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
     
    #ifndef Traitement_H
    #define Traitement_H
    #include <iostream>
    #include <fstream>
    #include<stdio.h>
    #include <string>
    #include<set>
     
    using namespace std;
     
    class Traitement
    {
     
    //privees
    set<string > mots;
     
    public:
     
    void lireMots(const char *s);
     
    //MAJ des sets
    void setMots(string &s){mots.insert(s);}
     
    //Acces
    set<string> getMots(){return mots;}
    };
     
    #endif


    Et j'ai mon .cpp comme ceci :
    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
     
      void Traitement::lireMots(const char *s){
        string line;
        ifstream f ;
        f.open(s,ifstream::out);
     
       //tant qu'on n'a pas atteint la fin de fichier
        for(unsigned no_line = 0;std::getline(f,line);++no_line){
                unsigned beg = 0;
                unsigned end = 1;
                for(unsigned no_mot=0;end <line.size();++no_mot){
    		//On positionne a la fin du mot la variable "end"
                    for(;end < line.size();++end);
     
                    string mot(line,beg,end-beg);//recuperation du mot                            
     
                    Traitement::setMots(mot);//ajout du mot dans la liste
     
                    beg = end + 1;
                    end = beg + 1;
                }//fin ligne
     
            }//fin fichier 
     
    }
     
    set<string> s = Traitement::getMots();
    ...

    J'aimerai savoir si ca vaut la peine de faire la fonction setMots car en faisant directement(dans .cpp) mots.insert(mot);
    je n'ai pas de probleme quand je compile mais je ne suis pas sur que cela marche pareil.

    Conclusion : peut on se passer des fonctions set et get pour pouvoir travailler sur des variables privées (correctement)?

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    euh j'ai le regret de te dire que ce n'est pas une question de fichier .cpp ou non. En effet si tu définis une methode en la prefixant par le nom de la classe Traitement tu auras à chaque fois accès aux membres privés de cette classe (en supposant que la classe Traitement définit ces méthodes)

    De plus tu utilises des variables d'objet comme des variables de classes (ou statiques) fais attention

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 224
    Par défaut
    essaye d'accéder aux variables privées de la classe Traitement
    dans une autre classe ca devrait répondre à ta question.

    Ensuite l'utilisation d'un getter et un setter peut etre util si tu veux faire des verifications.
    Typiquement si tu veux inserer que des mots qui commencent par a (exemple à la con), ben tu fais ce test dans ton setter et tu l'appelles tout le temps.

    En gros le getter et le setter pour moi permet de présenter une interface (c'est un abus de language je sais) de ta classe au monde exterieur. Ca securise l'utilisation de ta classe.

    Je sais pas si j'ai été claire..

  4. #4
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    Merci les gars.
    maintenant c'est clair :

    Tant que l'on reste dans la classe on a acces a tous les variables(privées et publiques)
    et en general les set et get sont plus propre (comme utilisation ) et utile lorsque l'on veut avoir acces aux variables depuis une autre classe

    Ai je bon?

    Encore merci !

  5. #5
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    oui c'est bien ca

  6. #6
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    ca peut être utile aussi en interne si tu changes la structure de ta représentation. Exemple idiot tu prends une date. Au début tu veux que ca soit une "string" et après tu veux que ca soit une structure. Si tu as fait un setter et que tu l'utilises tout le temps, il suffit de le redéfinir pour qu'il extrait les informations de la chaine de caractère. Si tu avais mis les variables privés, tu vas devoir tout changer

  7. #7
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    Ok donc (tant qu'a faire) faisons les choses "formelles"

    lesson :
    Les variables privées ne doivent etre accessibles que par des methodes


    La classe quand meme les gars !!

  8. #8
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    Par contre si quelqu'1 pourrait m'aider sur les encodages

    http://www.developpez.net/forums/sho...d.php?t=535834

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

Discussions similaires

  1. class, instance, attribut, propriété et compagnie
    Par 3DKermit dans le forum Général Python
    Réponses: 18
    Dernier message: 12/10/2009, 15h09
  2. Instancier classes et attributs à partir de leur nom
    Par Vakhyw dans le forum Débuter
    Réponses: 1
    Dernier message: 10/08/2009, 18h55
  3. Deserialization avec type de classe dans attribut
    Par GroovyBaby dans le forum C#
    Réponses: 1
    Dernier message: 19/11/2008, 13h45
  4. Propriétés d'une classe selon attribut
    Par Papy214 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/03/2008, 17h02
  5. Réponses: 5
    Dernier message: 05/05/2006, 09h40

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