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 :

[Débutant] Comment fonctionne les structures?


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut [Débutant] Comment fonctionne les structures?
    Bonjour,

    Suis débutant dans le C++ (comme indiqué dans le titre ), et j'ai ne comprend pas comment fonctionne les structures et à quoi peuvent t'elles bien servirent.
    Et j'annonce que je suis allez voir les tutoriaux d'ici et d'autre et sur d'autres site web le résultat est le même : Rein compris :'(

    Merci de pouvoir aider un pauvre noob en détresse

  2. #2
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    salut uNd3r²,

    Les structures servent essentiellement à regrouper des variables.
    On peu par exemple imaginer la structure Coordonee :
    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
     
    typedef struct Coordonee
    {
       int x;
       int y;
       int z;
    }Coordonee;
     
    void main()
    {
       Coordonee p;
       p.x = 2;
       p.y = 3;
       p.z = -5;
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Okai merci bien, mais... j'ai pas toujours bien compris comment on s'en sert

    Sur un totorial que j'ai trouvé sur Internet il me met ceci en tant que syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct Client
    {
        unsigned char Age;
        unsigned char Taille;
    } Jean;
    Il n'y as pas devant struct "typedef" et puis pour terminer, comment faire pour se servir des variables que l'on a créé. Juste, par exemple, l'afficher avec la commande printf.

    Merci

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    L'utilisation normale en C++ se fait avec la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Mastructure
    {
    // contenu de la structure
    };
     
    // Plus loin dans le code, on crée une instance de la structure
    Mastructure instance;
    instance.x = 32; // etc
    Les typedef, c'est en C que l'on doit s'en servir.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct Client
    {
        unsigned char Age;
        unsigned char Taille;
    } Jean;
    Dans ce cas particulier, tu déclares une variable Jean de type struct Client.

    Typedef permet de rédéfinir un type, raccourcir le nom d'un type par exemple.
    Tu pourras l'utiliser pour renommer un type structure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct Coordone_s
    {
       int x;
       int y;
       int z;
    };
    typedef struct Coordone_s Coordone;
    Ce que tu peux raccourcir en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct
    {
       int x;
       int y;
       int z;
    }Coordone;
    Par contre, dans ces deux derniers exemples, tu ne déclares pas encore de variable Jean.

    Une fois que tu as crée une variable, tu fais référence aux différents éléments de la stucture avec l'opérateur .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Jean.Age
    Jean.Taille
    Donc pour un exemple avec printf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf ("Jean a %d ans et mesure %d cm.\n", Jean.Age, Jean.Taille);
    Tu ne peux pas directement afficher le contenu d'une structure.

    Après tout ceci se fait plutôt en C mais l'exemple que tu as trouvé provient d'un cours de C/C++ qui mélange les deux langages.

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Ce qui est une très mauvaise chose

    C'est comme utiliser void* en C++, c'est inapproprié, car le C++ propose de nouvelles choses, que ne propose pas le C, afin de remplacer void* par exemple (la généricité, en C++).

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Et bien merci déjà, avec vos conseil et d'autres petit truc que je connaissais d'avant ; j'ai créé un petit programme bidon et je voudrais savoir ce que vous en pensiez et savoir comment l'optimisé car là il est simple mais je ne sais pas si je le fait devenir plus compexe sa marcheras encore.

    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
    #include <stdio.h>
    #include <iostream>
     
    struct Test
    {
           int x;
           int y;
    };
     
    int main(void)
    {
         Test a;
         a.x = 32;
         a.y = 10;
         Test b;
         b.x = 2;
         b.y = 3;
         printf ("Valeur de X = %d , valeur de Y = %d \n", a.x, a.y);
         printf ("Valeur de X = %d , valeur de Y = %d \n", b.x, b.y);
         system("pause");
         return 0;
    }
    Et si j'ai bien compris l'utilité de cette fonction s'est de pouvoir créé des données toujours sur une même base?

    En même temps s'est problématique si je compile du C et du C++ en même temps?

  8. #8
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    Citation Envoyé par uNd3r²
    Et si j'ai bien compris l'utilité de cette fonction s'est de pouvoir créé des données toujours sur une même base?
    oui voila c'est ca =)

    Citation Envoyé par uNd3r²
    En même temps s'est problématique si je compile du C et du C++ en même temps?
    Le C++ ajoute des chose en plus par raport au langage C, donc ce qui existe dans le C existe dans le C++.
    Les structure existe et dans C et donc egalement dans le C++.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Et bien merci à vous pour cette aide.

    Bon il y a des chance pour que j'ai d'autres questions (supérieur à 99,99%).

    Donc je dit [résolut] et encore une fois merci!

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Par contre, autant commencer à prendre des bonnes habitudes et distinguer ce qui vient du C et ce qui vient du C++...

    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
     
    #include <stdio.h>     // C
    #include <iostream>  // C++, en l'occurence, ne sert à rien ici
     
    struct Test {  // C
     int x;
     int y;
    };
     
    int main(void) {
     Test a;               // Declaration C++
     a.x = 32;
     a.y = 10;
     Test b;             // Declaration C++
     b.x = 2;
     b.y = 3;
     printf ("Valeur de X = %d , valeur de Y = %d \n", a.x, a.y);    // C
     printf ("Valeur de X = %d , valeur de Y = %d \n", b.x, b.y);    // C
     system("pause");
     return 0;
    }

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Désolé de contre dire mais cette ligne sert :

    Citation Envoyé par aoyou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <iostream>  // C++, en l'occurence, ne sert à rien ici
    Car si je la retire la compilation ne marche pas, le compilateur met en erreur la fonction : system("pause");

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Ok, si ça marche...

    En fait, stdio.h en C est le pendant de iostream en C++. C'est pour ça que je ne voyais pas l'intérêt d'un doublon.

    Normalement, pour la fonction system, on inclut stdlib.h en C et cstdlib en C++.

    Si tu veux faire du vrai C++, je réécrirais ton code ainsi mais tu auras bien le temps de voir tout ça.

    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
     
    #include <iostream>
     
    struct Test {
     int x;
     int y;
    };
    // La définition en C++ d'une structure est interdite par certaines règles de codage
    // qui préfèrent une classe avec des attributs publics.
     
    int main(void) {
     Test a;
     a.x = 32;
     a.y = 10;
     Test b;
     b.x = 2;
     b.y = 3;
     std::cout << "Valeur de X = " << a.x << " , valeur de Y = " << a.y << std::endl;
     std::cout << "Valeur de X = " << b.x << " , valeur de Y = " << b.y << std::endl;
     system("pause");
     return 0;
    }

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    La définition de structures n'est pas du tout interdite en C++, certaines règles, boost et le standard l'encouragent même.

    Elles sont utilisés pour des functors qui ne gardent pas d'état, pour des "classes" simples comme std::pair etc..

    Après, ça reste juste esthétique ou pratique. La seule différence entre les deux étant que la structure a ses données membres publiques par défaut contrairement à la classe qui les a privées.

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    J'ai dit certaines règles de codage.
    Personnellement, je suis pour mais j'ai déjà eu à faire à des oppositions sur l'utilisation des structures en C++ et quand le client il ne veut pas et ben il ne veut pas .

  15. #15
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Il faut arrêter les coner^W^W.
    Les deux seules différences entre structures et classes sont l'héritage par défaut (public pour les structures, privé pour les classes) et la visibilité des membres par défaut (publique pour les structures, privée pour les classes).

    De plus, si quelqu'un ne veut ni des structures, ni des classes, qu'il reste en C, à grands coups de malloc, free, void*, et j'en passe.

  16. #16
    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,

    En fait, une structure permet d'"agréger", ou, si tu préfères, de regrouper, des données qui n'ont, de prime abord, rien de commun.

    L'astuce, c'est que, non seulement cela regroupe les données, mais cela les rend indissociables.

    Ainsi, un nom, un prénom et un âge (et, si on avait voulu, on aurait pu rajouter un tas de choses ) sont des données qui n'ont pas grand chose à voir:
    • Le nom fait référence à ton ascendance (c'est le nom de ton père, et de son père avant lui et de son père avant...)
    • Le prénom est la manière dont on s'adresse à toi dans l'intimité (car, je présume qu'on ne t'appelle pas "Hé toi" à la maison ),
    • l'age n'est même pas une chaîne de caractères

    Par contre, ces trois informations font référence à une seule personne: toi...

    Si tu changes ne serait-ce qu'une seule information, ou pire, qu'une seule lettre dans le nom ou dans le prénom, ce n'est plus toi...

    C'est ton frère, ton père, ta soeur, ton cousin, voir un parfait inconnu, mais ce n'est plus toi

    Et, bien sûr, les raisons d'agréger plusieurs données sont légions: il est finalement bien plus rare de rencontrer une donnée (surtout dans un type de base) qui se suffit à elle même pour représenter un "tout" qu'un agrégat de différentes informations

    L'avantage des structures, en plus, c'est qu'il suffit de transmettre la structure à une fonction pour être sur que la fonction pourra disposer de l'ensemble des informations (ou, du moins, de celles qui sont accessibles)

    Il faut savoir qu'en C, une structure ne peut pas avoir de fonction membres.

    De plus, le mot cle typedef n'est pas plus obligatoire en C qu'en C++... mais son absence rend l'utilisation plus difficile en C

    Ainsi, rien ne t'empecherait, en C, de déclarer une structure sous une forme proche de
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct personne
    {
        char nom[50];
        char prenom[20];
        int age;
    };
    L'astuce, c'est que tu devrais alors préciser, chaque fois que tu veux utiliser cette structure... qu'il s'agit d'une structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    struct personne CreePersonne(char* nom, char* prenom, int age);
     
    int main()
    {
        struct personne moi;
        strcpy(moi.nom,"koko");
        strcpy(moi.prenom,"le koala");
        moi.age=35;
        /*...*/
        return 0;
    }
    Par contre, si tu utilises le mot cle typedef, tu signalera au compilateur qu'il existe un type (comme si c'était un int, un char ou un float) du nom indiqué
    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
     
    typedef struct personne
    {
        char nom[50];
        char prenom[20];
        int age;
    }pers;
    /* tu peux toujours utiliser la structure personne si tu veux */
    struct personne MaFonction();
    /* mais il devient plus facile d'utiliser le type "pers" :D */
    pers LautreFonction();
    int main()
    {
        /* cela fera exactement la meme chose que dans l'exemple précédent */
        pers moi;
        /*...*/
    }
    Voila ce que l'on pouvait dire pour reprendre certaines erreurs énoncées au niveau du C...

    En ce qui concerne le C++, il y a quelques différences:

    Les deux principales viennent du fait qu'une structure peut contenir des fonctions qui lui sont propres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    struct personne
    {
        /* on "transforme" les données en types plus facile à utiliser ;) */
        std::string nom;
        std::string prenom;
        int age;
        int CalculeAnneeDeNaissance(){/*...*/}
    };
    et le fait que la notion de visibilité apparaît:

    On peut en effet décider qu'une information est à usage "interne" uniquement.

    De plus, en C++, il existe également la notion de classe.

    De fait, tu faire avec une classe tout ce que tu fais avec une structure... Seule la visibilité par défaut est différente, ainsi qu'il a déjà été dit:

    Si tu ne précise pas la visibilité (avec les mots clé private: protected: ou public: ) elle sera par défaut public pour les structure et private pour les classes.

    Cependant, il y a une autre différence encore, même si, à ton niveau, uNd3r², cela risque encore de te passer quelque peu au-dessus de la tête (mais principalement pour signaler l'erreur aux autres ):

    une structure ne peut pas être utilisée comme paramètre d'une classe ou d'une fonction template C'est souvent oublié, mais cela valait d'etre dit
    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

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    une structure ne peut pas être utilisée comme paramètre d'une classe ou d'une fonction template C'est souvent oublié, mais cela valait d'etre dit
    t'halucines non? ou alors je n'ai pas compris ce que tu veux dire.

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut
    Okay okay,

    alors moi qui pensais avoir compris et bien enfaite j'ai vu que la partie immergée de l'iceberg (elle était bien trouvé c'elle là non? ^^ ).

    Bon alors pour commencer.
    Cette histoire de privée public j'y est rien compris sa change quoi? J'ai vite fait aperçu pendant un tutorial mais j'ai compris uniquement que sa existaient.
    De plus s'est quoi l'héritage des classes?

    (enfaite j'aurais pas dut mettre le tag [résolut] )

  19. #19
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    En fait, tu en es encore à tes balbutiements d'apprentissage. Ta question, certes très bonne, a entraîné une profonde discussion sur la différence entre le C et le C++ sur les structures mais elle a dû t'emmêlée les pinceaux.

    Tu devrais continuer de suivre tes tutoriaux et uniquement sur le C++, si bien sûr tu veux apprendre le C++ et non le C. Si tu suivais uniquement des tutoriaux de C++, tu aurais déjà du voir la notion de classe, d'attributs publics et privés et non la notion de structure (qui n'est pas essentiel à ce niveau). L'héritage des classes vient un peu plus loin et ça c'est essentiel.

    Désolé de t'avoir montré la partie immergée de l'iceberg mais on n'aurait pas du te la montrer, enfin pour le moment.

    Bon courage pour la suite de ton apprentissage.

    Par contre, si tu ne comprends pas un point précis ou un bout de code de ton tutorial, on est toujours là.

    Bon, et puis si tu veux vraiment savoir, voici des pointeurs qui pourront t'aider
    http://c.developpez.com/faq/cpp/?pag...ASS_definition
    http://c.developpez.com/faq/cpp/?pag...private_public
    http://c.developpez.com/faq/cpp/?pag...e_class_struct
    http://c.developpez.com/faq/cpp/?pag...ITION_heritage

  20. #20
    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
    Nous allons donc essayer de te faire voir un peu de ce qui se passe sous l'eau, histoire de te donner directement les bonnes bases

    Les mots clé private, protected et public (ou, si tu préfères en français - mais est-ce réellement utile- privé, protégé et public) participent à ce que l'on appelle entre nous l'encapsulation des données.

    Tu remarqueras au fur et à mesure qu'il existe le plus souvent plusieurs possibilités pour représenter une seule et même chose...

    L'astuce, c'est que ces différentes possibilités sont - souvent - incompatibles entre elles

    Du coup, si on laisse, comme en C, les données accessibles à tous, chaque fois que l'on décide de changer la manière de représenter quelque chose, il faut rechercher parmi toutes les fonctions chaque utilisation de la donnée que l'on a changé, ce qui fait très vite énormément de boulot.

    L'idée de base est donc simple: cachons le plus possible la manière dont les données sont représentées afin d'éviter que n'importe qui n'aille mettre ses "grosses pattes pleines de doigts" dessus, mais fournissons les fonctions qui permettent d'obtenir - et de modifier s'il échoit - les valeurs.

    De cette manière, nous serons sûrs, si nous décidons de modifier la manière dont une donnée est représentée, qu'il n'y a que très peu d'endroits où la représentation elle-même est utilisée: en gros, il n'y aura que les fonctions qui permettent d'obtenir ou de modifier les dites valeurs.

    Le mot clé private permet donc de dire
    Attention, cette information n'est accessible qu'au travers de la structure elle-même
    Si une fonction qui n'appartient pas à la structure essaye d'accéder ou de modifier une donnée privée, le compilateur se plaindra en te disant que "telle donnée est privée dans ce contexte".

    A contrario, le mot clé public permet de dire
    cette donnée ou - car généralement on veille à ce qu'il n'y ai que des fonctions - cette fonction est accessible de n'importe où
    Comme la fonction fait partie de la structure, elle peut très bien accéder aux informations (ou aux fonctions) qui sont déclarées privées, et on peut faire appel à la fonction au départ de n'importe quel endroit du code...

    Le mot clé protected enfin nécessite que l'on s'intéresse peut être un peu à ta dernière question (qu'est ce que l'héritage)...

    Quand, dans la vie de tous les jours, tu hérites de quelqu'un, cela signifie simplement que tu reçois l'ensemble de ce que la personne pocédait.

    L'idée est ici exactement la même, simplement, un type qui hérite d'un autre en reçoit non seulement toutes les données mais aussi toutes les fonctions..

    La notion d'héritage implique une filiation entre deux types.

    C'est à dire que si tu as un type particulier qui dispose de toutes les caractéristiques d'un type un peu plus "généraliste", c'est vraisemblablement parce que le type particulier hérite du type généraliste

    Le plus souvent, on parlera de relation est un (en anglais: an is a relation) pour indiquer qu'il s'agit du fait que le premier hérite du deuxième...

    Ainsi, vu que l'on peut dire
    un chien est un mammifère
    ou
    une voiture est un véhicule
    Nous pourrions très bien traduire ces deux relations sous les formes
    la classe chien hérite de la classe mammifère
    ou que
    [QUOTE]la classe voiture hérite de la classe véhicule/QUOTE]

    Dans ces deux phrases, les classes mammifère et véhicule seront appelées classes (ou strutures) de base ou classes (ou structures) mères alors que les classes chien et voiture seront appelées classes (ou structures) dérivées, ou classes (ou structures) enfants

    Si l'on voulait être complet, on pourrait conclure le chapitre de l'héritage en indiquant qu'il peut y avoir de l'héritage public, de l'héritage protégé et de l'héritage privé... Mais j'attendrai peut être que tu aies digéré l'ensemble de ce post avant d'en parler

    Il est temps, maintenant de s'inquiéter du dernier mot clé: protected

    Il est fort proche du mot clé private, parce que la donnée ou la fonction qui est déclarée protégée n'est pas accessible au dehors de la structure dans laquelle elle est déclarée, mais avec la nuance rajoutée que
    Mais si une structure vient à hériter de celle dans laquelle sont déclarées les données protégées, la structure dérivée pourrait accéder aux données protégées de la structure de base exactement comme si c'étaient les siennes
    Cela devient, en quelque sorte, des données privées... mais pas trop
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment fonctionnent les "keywords"
    Par shikakus dans le forum Référencement
    Réponses: 3
    Dernier message: 29/01/2007, 00h13
  2. Comment fonctionne les versions d'un logiciel?
    Par Antigonos Ier Gonatas dans le forum Windows
    Réponses: 12
    Dernier message: 14/07/2006, 18h48
  3. [VB6] Comment fonctionne les Tableaux ?
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 27/04/2006, 14h59
  4. [FLASH 8] Comment fonctionne les clips
    Par steeves5 dans le forum Flash
    Réponses: 3
    Dernier message: 27/01/2006, 10h23
  5. Comment fonctionnent les index des options d'un select ?
    Par pekka77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/10/2005, 18h05

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