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 :

Je ne comprends pas un chapitre : les "class" et "membres"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 67
    Par défaut Je ne comprends pas un chapitre : les "class" et "membres"
    Bonsoir,
    je suis en train d'apprendre le C++ et bloque sur une partie. En effet, je ne comprends pas l'interêt "des class", ni leur fonctionnement.
    De même pour "les membres".

    Je ne sais pas si j'ai posté dans la bonne catégorie, je m'en excuse.

    Si vous pouviez m'aider... merci.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Les classes sont utilisé pour faciliter ce que l'on appelle "la programmation orientée objet".

    On peut dire, entre autre, que cela permet de disposer de l'encapsulation des données, d'une sécurisation de celles-ci, et d'un phénomène que l'on appelle "l'héritage".

    Ce sont ces trois grandes caractéristiques qui font tout l'intéret des classes

    Pour te donner une idée de ce qu'est l'héritage, on peut comparer les choses à une voiture:

    Une voiture est un véhicule automoteur, et dispose, à ce titre de toutes les caractéristiques des autres véhicules automoteur, mais avec certaines "spécifications".

    Une classe est, finalement, une structure de données, telle que l'on en rencontre en C avec les déclarations du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct mastruct
    {
    //les différents champs de la structure
    };
    en y rajoutant les routines (fonctions et procédures) qui permettent de travailler sur les "champs" de la structure.

    Les champs prennent alors le nom générique de "membre", et les routines prennent le nom générique de "méthode".

    Chaque classe créée représente un type utilisateur qui peut etre utilisable comme membre dans une classe plus spécialisée, tout comme toute structure peut servir de champs pour une structure plus précise.

    Voici, sans entrer dans des détails trop indigestes, ce que l'on peut dire sur les classes et les membres, et qui devrait te permettre d'en comprendre un peu mieux l'utilisation.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Citation Envoyé par ok07
    Bonsoir,
    je suis en train d'apprendre le C++ et bloque sur une partie. En effet, je ne comprends pas l'interêt "des class", ni leur fonctionnement.
    De même pour "les membres".

    Je ne sais pas si j'ai posté dans la bonne catégorie, je m'en excuse.

    Si vous pouviez m'aider... merci.
    Un exemple que j'ai vu dans mes bouquins de C++. Par exemple tu peux créer une classe Animal. Un animal, quelque soit son type (que ce soit un éléphant, un chat, un chien, un perroquet), a par exemple un âge, un prénom, une couleur, une couleur des yeux... Ainsi tu pourras déclarer une instance de cette classe, par exemple Animal animal1 (16, "titi")... Cet animal à 16 ans et s'appelle titi... De cette classe de base tu pourras en faire hériter d'autres classes dérivés, par exemple une classe Chien, et une classe Chat,... qui auront chacun des caractéristiques spéciales en plus. Chaque Chat ou Chien EST UN animal, a donc un prénom, un age, une couleur, mais on en plus d'autres caractéristiques. Un chien a par exemple une race spécifique,...

    Ca permet de simplifier un peu tout ^^.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 17
    Par défaut
    Si je ne m'abuse, en plus des capacités techniques décrite plus haut, l'un des buts d'un programme orienté objet est de faire interagire entre eux des objets, afin de réaliser un programme d'une façon plus "proche " du monde réel. Les classes permettent de créer ces objets.

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Une classe, c'est le type d'un objet -- en C++ et divers autres langages.
    Et en résumant un peu violemment, un objet c'est des propriétés et des comportements réunis ensembles -- je sais, c'est mal dit -- plus un état encapsulé (comme on dit) dont l'implémentation relève du détail d'implémentation.

    En C++, "membre" est le terme générique qui désigne les fonctions (qui définissent comportements, rôles, messages, ...) et les variables (attributs dans ce cas) qui composent les objets.

    Pour garder les exemples sur les animaux, une fourmi peut se deplacer (comme les autres animaux), se nourrir, poser des phéromones... Elle a des propriétés qui peuvent être consultées : son âge, son nombre de pattes. Et elle a un état interne (elle doit bien avoir un réseau neuronal simpliste), une date de naissance inaltérable, ...
    Et bien les objets fourmi seront des instances de la classe Fourmi.
    Les verbes seront des fonctions membre.
    Les propriétés en lecture seule des accesseurs (fonction membre particulière), éventuellement associées à des données membres
    L'état interne étant défini à partir de données membres (privées) qui relèvent du détail d'implémentation.

    Typiquement (Il aurait probablement fallu séparer Animal en IAnimal et AminalImpl)
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    struct Animal {
        // constructeur par défaut 
       Animal(std::auto_ptr<DecisionCenter> dc) : birthdate_(now()), dc_(dc) {}
       // destructeur
       virtual ~Animal() {}
     
       // comportements, ...
       virtual void moveTo( Position const& ) = 0;
       virtual void feed( Eatable & ) = 0;
     
       Action decideNext() const {
           return dc_ -> decideNext();
       }
     
       // propriété associée à une donnée membre
       Delay getAge() const { return now() - birthDate_; };
       // propriété NON associée à une donnée membre, mais au type d'animal
       virtual unsigned short getLegs() const = 0;
     
     
    protected:
       // propriété à usage interne, associée à une donnée membre
       Position const& getPosition() const { return pos_; }
       void setPosition( Position const& pos ) {
            if (WORLD::instance() . CanGoTo( *this, pos ))
               pos_ = pos;
       }
     
    private:
       // détail d'implémentation utilisé pour déterminer l'âge ; c'est une donnée membre
       Date birthdate_;
       // Autre détail : un animal est quelque part dans le monde
       Position pos_;
     
       // L'intelligence (IA ou déportée) : un détail d'implémentation propre 
       // à chaque espèce, à un éventuel joueur, à des sortilèges dans le 
       // cas de RPGs
       boost::scoped_ptr<DecisionCenter> dc_;
    };
     
    struct Insect  : Animal {
       Insect(std::auto_ptr<DecisionCenter> dc) : Animal(dc) {}
     
       // spécialisation d'un accesseur dans le cas des insectes
       virtual unsigned short getLegs() const { return 6; }
    };
     
    struct Ant : Insect {
       // Le constructeur
       Ant( Params ... ) : Insect(new DC_AntAI(this)), leftAntenna(..), ... {} 
     
       // spécialisations :
       // les implémentations qui vont bien pour feed, moveTo, ... 
       // sachant que c'est une fourmi qui se déplace ou qui mange
       virtual void moveTo( Position const& ) { ... détails } 
       virtual void feed( etable & )  { ... détails } 
     
       // nouveaux comportements propres aux fourmis
       void leaveMessage(Pheronom const& ) { ... détails }
    private:
       // Les capteurs propres aux fourmis ; et probablement à d'autres insectes en fait
       Antenna leftAntenna_;
       Antenna rightAntenna_;
    };
    Je suis encore parti sur un truc compliqué (les animaux sont un exemple récurrent pourtant difficile à modéliser proprement -- je préfère vraiment les petites chaînes automatisées), qui ne compile évidemment pas. Ceci dit, si tu décortiques, tu verras plusieurs des élements propres à la modélisation OO.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 67
    Par défaut
    Merci pour vos réponses. Je souhaiterez, si vous le voulez bien, avoir quelques précisions sur les constructreurs & les destructeurs : leur intérêt, etc

    Je vous remercie.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par ok07
    Merci pour vos réponses. Je souhaiterez, si vous le voulez bien, avoir quelques précisions sur les constructreurs & les destructeurs : leur intérêt, etc

    Je vous remercie.
    Un constructeur est une routine utilisée pour initialiser un objet. Son intérêt est que, comme un objet ne peut pas exister sans qu'un des constructeurs de sa classe ait été appelé, il peut s'assurer que les valeurs des différents membres sont cohérentes.

    Un destructeur (il n'y en a qu'un par classe, au contraire des constructeurs) est une routine qui est appelée juste avant que l'objet cesse d'exister. Son intérêt est que quelle que soit la manière dont l'objet cesse d'exister, son constructeur sera appelé. On s'en sert pour faire des choses comme libérer de la mémoire et des ressources (une technique courante en C++ est même de faire des objets rien que pour leur destructeur, comme ça on est sûr que quelle que soit la manière dont on quitte un bloc, quelque chose sera fait).

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le constructeur te permet de définir comment on initialise un objet.
    Le destructeur te permet de libérer les ressources utilisées par ton objet, ou aussi pour faire n'importe quoi qui doit être fait au moment de sa destruction.

    Par exemple std::list<T> doit appeler les destructeurs de tous les objets qu'il contient lors de sa destruction puis rendre la mémoire au système (ou plus précisemment à l'allocateur qui va pouvoir éventuellement la réutiliser)

Discussions similaires

  1. [SQL 2000]Where in qui ne comprend pas les listes
    Par zooffy dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 02/05/2007, 16h36
  2. Encore msvcr80.dll je ne comprend pas les FAQ
    Par bigbernie dans le forum Visual C++
    Réponses: 22
    Dernier message: 28/03/2007, 05h59
  3. je comprend pas les reference
    Par killer_instinct dans le forum C++
    Réponses: 13
    Dernier message: 08/12/2006, 18h49
  4. je ne comprends pas les message d'erreur g++
    Par emmesse dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 22/09/2006, 16h52
  5. Je ne comprend pas très bien les templates...
    Par Paulinho dans le forum C++
    Réponses: 5
    Dernier message: 07/11/2005, 10h24

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