Partage
  • Partager sur Facebook
  • Partager sur Twitter

opérateur " : " dans un exemple

C++

Sujet résolu
7 juillet 2019 à 12:43:06

Bonjour 

sur cppreference, j'ai vu l'opérateur   " : " ici :

class Y {};
class A {
    int data; // private data member
    class B { }; // private nested type
    enum { a = 100 }; // private enumerator
    friend class X; // friend class forward declaration (elaborated class specifier)
    friend Y; // friend class declaration (simple type specifier) (since c++11)
};
 
class X : A::B { // OK: A::B accessible to friend
    A::B mx; // OK: A::B accessible to member of friend
    class Y {
        A::B my; // OK: A::B accessible to nested member of friend
    };
    int v[A::a]; // OK: A::a accessible to member of friend
};

https://en.cppreference.com/w/cpp/language/friend )

 dans 

class X : A::B { // OK: A::B accessible to friend

ce n'est pas la première fois que je le vois ainsi. Or d'habitude, il y a le mot-clé public , ou private, ou après le ":" d'où le fait que j'ai besoin de comprendre.

Cela veut-il dire que la classe de gauche donne son amitié à cette à droite du " : " et donc que celle à droite du ":" a accès à tous les membres de celle de gauche ?

Merci par avance pour vos explications

-
Edité par pseudo-simple 7 juillet 2019 à 12:49:05

  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2019 à 13:57:02 - Message modéré pour le motif suivant : Aucune formule de politesse de base


7 juillet 2019 à 14:11:51 - Message modéré pour le motif suivant : Message complètement hors sujet


7 juillet 2019 à 14:38:30

Bonjour,

le : indique ici un héritage. Habituellement on précise le type d'héritage :
- public : la conversion de Derivee& vers Base& est implicite et tous les champs public de la Base sont public de la dérivée, et ceux protected de la Base sont protected de la dérivée.
- privé : la conversion de Derivee& vers Base& n'est plus possible, et tous les champs public et protected de la Base sont private dans la Derivee (dans ce cas ça n'est plus vraiment un héritage.)
- protected : jamais vu une quelconque utilisation!

Si le type d'accès n'est pas indiqué, alors pour une class c'est équivalent à avoir écrit private (donc un 'faux' héritage.) et pour nue struct c'est équivalent à avoir écrit public.

Maintenant pour en revenir à la page sur friend que tu cherches à comprendre. Quand ils écrivent :

class X : A::B { // OK: A::B accessible to friend

Ils veulent indiquer que X a le droit d'hériter de A::B bien que B soit privé dans A parce que X est ami de A. S'il ne l'était pas il n'aurait aucun accès possible à A::B et ne pourrait pas en hériter. Leur commentaire ne décrit qu'une simple évidence! (les autres par contre sont intéressant à comprendre.)

YES, man a écrit:

Cela veut-il dire que la classe de gauche donne son amitié à cette à droite du " : " et donc que celle à droite du ":" a accès à tous les membres de celle de gauche ?

Pour écrire ça, il faut ne pas du tout avoir compris ce qu'est l'amitié. Voilà un lien à lire : https://en.cppreference.com/w/cpp/language/friend
A mince, tu sembles l'avoir déjà lu.
  • Partager sur Facebook
  • Partager sur Twitter

En recherche d'emploi.

7 juillet 2019 à 15:07:05

Merci beaucoup @Daflab pour tes explications limpides.

Tu as réglé les deux problèmes dans un seul message.

C'est parfait pour moi maintenant.

Passage en résolu et encore merci

  • Partager sur Facebook
  • Partager sur Twitter
11 juillet 2019 à 18:36:03

Hors sujet mais ... Compétent = YES MAN ????????
  • Partager sur Facebook
  • Partager sur Twitter