Règles d'accès des membres de la classe récapitulant en C ++

voix
0

Je suis en train de bien comprendre les règles d'accès aux membres de classe définies dans plusieurs paragraphes du [class.access] section de la norme C ++. Ils sont donc assez complexes je besoin d' un court mais résumé précis et exhaustif .

J'ai écrit ce programme pour tester l'accessibilité des membres protégés dans plusieurs situations (étant donné que les règles pour les membres protégés sont les plus difficiles à obtenir):

#include <iostream>

class B {
  protected:
    int i = 1;
    static int const I = 1;
};

class X: public B {
  protected:
    int j = 2;
    static int const J = 2;
  public:
    void f();
    friend void g();
};

class D: public X {
  protected:
    int k = 3;
    static int const K = 3;
};

void X::f() {
  B b;
  X x;
  D d;
  //std::cout << b.i;  // error: 'i' is a protected member of 'B'
  std::cout << b.I;
  std::cout << x.i;
  std::cout << x.I;
  std::cout << x.j;
  std::cout << x.J;
  std::cout << d.i;
  std::cout << d.I;
  std::cout << d.j;
  std::cout << d.J;
  //std::cout << d.k;  // error: 'k' is a protected member of 'D'
  //std::cout << d.K;  // error: 'K' is a protected member of 'D'
}

void g() {
  B b;
  X x;
  D d;
  //std::cout << b.i;  // error: 'i' is a protected member of 'B'
  //std::cout << b.I;  // error: 'I' is a protected member of 'B'
  std::cout << x.i;
  std::cout << x.I;
  std::cout << x.j;
  std::cout << x.J;
  std::cout << d.i;
  std::cout << d.I;
  std::cout << d.j;
  std::cout << d.J;
  //std::cout << d.k;  // error: 'k' is a protected member of 'D'
  //std::cout << d.K;  // error: 'K' is a protected member of 'D'
}

int main() {
  X x;
  x.f();
  g();
  return 0;
}

Je suis venu à cette conclusion:

  • les membres du public d'une classe sont accessibles à toutes les entités;
  • membres privés d'une classe sont accessibles qu'aux membres et amis de cette catégorie;
  • membres protégés d'une classe sont accessibles qu'aux membres et amis de cette classe, aux membres et amis de classes dérivées de cette classe si les membres protégés sont hérités des classes dérivées ou classes de base des classes dérivées, et aux membres des classes de base de cette classe si les membres protégés sont statiques .

Mon résumé précis et exhaustif?

Créé 14/02/2020 à 00:02
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Si votre question est basée sur l' accès, ce sont les règles dans c ++. Je ferai un résumé de base ci - dessous, mais pour l'explication exhaustive s'il vous plaît aller ici . Ce sera plus en détail sur la façon dont chacun travaille.

  • publiques - les fonctions et les variables peuvent accéder à la même classe, classe dérivée et en dehors des cours

  • protégées - les fonctions et les variables peuvent accéder à la même classe, et classe dérivée

  • privé - les fonctions et les variables peuvent accéder en même classe.

En ce qui concerne l'héritage que vous avez plusieurs types ainsi:

  • du public - public et les membres protégés sont hérités de leur type d'accès respectif
  • protégés - les membres du public sont hérités comme protégés et les membres protégés garderont leur type d'accès.
  • privé - membres publics et privés seront hérités

Note : Les classes dérivées hérite de toutes les méthodes de la classe de base à l'exception suivante.

  • Constructeurs, destructeurs et constructeurs de copie de la classe de base

  • opérateurs surchargés de la classe de base.

  • Les fonctions amies de la classe de base.

Maintenant , comme pour le prescripteur ami, c'est de la référence cpp ici Ici , vous aurez des exemples et des explications détaillées sur la façon de l' utiliser.

Vous trouverez également des exemples pour beaucoup d'informations là-bas quand il vient à la bibliothèque standard, aussi vous pourrez voir ce qui arrive à la norme à l'avenir et quelles sont les caractéristiques de vos supports de compilateur.

Créé 14/02/2020 à 05:22
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more