Zusammenfassend Teilnehmer, Zugriffsregeln in C ++

stimmen
0

Ich versuche , voll in der Klasse Mitglied Zugriffsregeln in mehreren Absätzen des definierten verstehen [class.access] Abschnitts des C ++ Standard. Sie sind ziemlich komplex deshalb brauche ich eine kurze , aber präzise und erschöpfende Zusammenfassung .

Ich schrieb dieses Programm, um die Zugänglichkeit der geschützten Mitglieder in verschiedenen Situationen zu testen (da die Regeln für geschützte Mitglieder der schwerer zu bekommen sind):

#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;
}

Ich kam zu dem Schluß:

  • öffentliche Mitglieder einer Klasse sind auf alle Einheiten zugänglich;
  • private Mitglieder einer Klasse sind zugänglich nur für Mitglieder und Freunde der Klasse;
  • geschützte Mitglieder einer Klasse zugänglich sind nur für Mitglieder und Freunde der Klasse, an die Mitglieder und Freunde von abgeleiteten Klassen dieser Klasse , wenn die geschützten Elemente sind geerbt von den abgeleiteten Klassen oder Basisklassen der abgeleiteten Klassen, und die Mitglieder der Basisklassen dieser Klasse sind , wenn die geschützten Elemente statisch .

Ist meine Zusammenfassung genaue und erschöpfende?

Veröffentlicht am 13/02/2020 um 22:02
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Wenn Ihre Frage über den Zugang basiert, das sind die Regeln in C ++. Ich werde eine grundlegende Zusammenfassung unten, aber für die erschöpfende Erklärung tun Sie gehen hier . Dies geht mehr ins Detail auf , wie jeder arbeitet.

  • public - Funktionen und Variablen sind in der Lage in der gleichen Klasse zugegriffen werden, abgeleiteten Klasse und außerhalb Klasse

  • geschützte - Funktionen und Variablen der Lage sind , in der gleichen Klasse zugegriffen werden soll, und die abgeleitete Klasse

  • Private - Funktionen und Variablen sind in der Lage in derselben Klasse abgerufen.

Wenn es um die Vererbung kommt haben Sie mehrere Typen auch:

  • Öffentlichkeit - öffentliche und geschützte Mitglieder mit ihrem jeweiligen Zugriffstyp geerbt
  • geschützt - die öffentlichen geerbten Elemente werden als geschützt und geschützt Mitglieder ihren Zugriffstyp halten.
  • privat - öffentliche und private Mitglieder werden vererbt

Hinweis : Abgeleitete Klassen erben alle Methoden der Basisklasse mit folgenden Ausnahme.

  • Constructors, Destruktoren und Kopierkonstruktoren der Basisklasse

  • Überladene Operatoren der Basisklasse.

  • Die Freund-Funktion der Basisklasse.

Nun , wie für den Freund Spezifizierer ist dies von der CPP Referenz hier Hier finden Sie Beispiele und ausführliche Erläuterungen haben , wie es zu benutzen.

Sie werden auch Beispiele für eine Vielzahl von Informationen über die dort finden, wenn es um die Standard-Bibliothek kommt, auch Sie in der Lage sein zu sehen, was in der Zukunft zum Standard kommt und welche Funktionen Ihre Compiler unterstützt.

Beantwortet am 14/02/2020 um 03:22
quelle vom benutzer

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