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

Langage C++ Discussion :

Définitions enum et struct propres à une classe


Sujet :

Langage C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut Définitions enum et struct propres à une classe
    Bonjour.

    Je me posais une petite question : est-il possible de définir des enum et des struct propres à une classe (juste pour organiser les données) et si oui comment ?

    En effet, j'ai vu l'autre jour dans un fichier quelque chose du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    classe MaClasse 
    {
        public:
            enum ETest {
                defaut=0,
                valeur1=1,
                valeur2=2
            };
    };
    2 questions :
    - si je définis un enum ETest au sein d'une MaClasse2, cela ne posera-t-il aucun problème ? (je suppose que sous cette forme ETest est spécifique à la classe dans laquelle elle est définie : mais alors est-elle accessible de l'extérieur et si oui comment ?)
    - est-il possible de faire pareil mais avec des struct spécifiques à une classe ?

    Merci beaucoup

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    1/ Oui. Pour y accéder depuis l'extérieur (si elle est public) : MaClasse::ETest test = MaClasse::defaut;
    2/ Oui

    Contrairement à d'autres langages, le fait d'être défini dans une classe ne donne aucun droit d'accès privilégié à la classe.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Tu pourras trouver des infos sur ce sujet avec les mots clé : "nested class" ou "classe imbriquée"

    J'avais lancé un post là dessus il y a quelques temps : ici
    C'est, par exemple, utilisé pour les itérators des containers ( list<int>::iterator )

    Il y a aussi des infos dans les tutos du site : Classes imbriquées et locales

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Si ton enum n'est pas supposé être utilisé en dehors de la classe, tu peux également rendre sa définition privée.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,

    Citation Envoyé par JolyLoic Voir le message
    Contrairement à d'autres langages, le fait d'être défini dans une classe ne donne aucun droit d'accès privilégié à la classe.
    Il me semble que certains compilateurs donnent accès à la structure/classe imbriquée sur les membres de la classe englobante. Et en C++0x, cela est inscrit dans la norme, non ?
    Code c++0x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class E {
    int x;
    class B { };
    class I {
    B b; // OK: E::I can access E::B
    int y;
    void f(E* p, int i) {
    p->x = i; // OK: E::I can access E::x
    }
    };
    int g(I* p) {
    return p->y; // error: I::y is private
    }
    };

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    En effet, j'avais oublié cette modification. L'exemple correspondant dans le norme pré C++11 est :
    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
    class E {
      int x;
      class B { };
      class I {
        B b; // error: E::B is private
        int y;
        void f(E* p, int i)
        {
          p->x = i; // error: E::x is private
        }
      };
      int g(I* p)
      {
        return p->y; // error: I::y is private
      }
    };
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2012, 17h55
  2. Struct propre à une classe
    Par Kaluza dans le forum Langage
    Réponses: 20
    Dernier message: 22/10/2011, 14h32
  3. Accès aux attributs propres à une classe fille
    Par jamilya dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 24/12/2008, 15h06
  4. Réponses: 4
    Dernier message: 09/06/2008, 16h32
  5. Séparer la définition et la déclaration d'une classe
    Par prgasp77 dans le forum Langage
    Réponses: 5
    Dernier message: 24/08/2005, 21h37

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