Podsumowując dostęp członek klasa rządzi w C ++

głosy
0

Staram się w pełni zrozumieć zasady dostępu do członków klasy zdefiniowane w wielu punktach [class.access] odcinku C ++ standardzie. Są one dość skomplikowane dlatego muszę krótki, ale dokładny i wyczerpujący podsumowanie .

Napisałem ten program, aby sprawdzić dostępność członków chronionych w kilku sytuacjach (ponieważ przepisy dotyczące członków chronione są trudniej dostać):

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

Doszedłem do tego wniosku:

  • Członkowie publiczne z klasy są dostępne dla jakichkolwiek podmiotów;
  • prywatne członków danej klasy są dostępne wyłącznie dla członków i przyjaciół tej klasy;
  • chronione członków danej klasy są dostępne wyłącznie dla członków i przyjaciół tej klasy, do członków i przyjaciół klas pochodnych tej klasy, jeśli chronione członków odziedziczonych z klas pochodnych lub bazowych klas klas pochodnych, oraz do członków klas bazowych tej klasy, jeśli chronione członkami są statyczne .

Czy moje podsumowanie dokładne i wyczerpujące?

Utwórz 13/02/2020 o 22:02
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Jeśli pytanie jest oparte na dostępie, takie są zasady w C ++. Zrobię podstawową podsumowanie poniżej, ale dla wyczerpującego wyjaśnienia przejdź tutaj . Będzie to duży krok do bardziej szczegółowo, w jaki sposób każdy działa.

  • publiczne - funkcje i zmienne są w stanie uzyskać dostęp do tej samej klasy, klasy pochodnej i poza klasą

  • chronione - funkcje i zmienne są w stanie uzyskać dostępu do tej samej klasy i pochodzących klasa

  • prywatne - funkcje i zmienne są w stanie uzyskać w tej samej klasie.

Jeśli chodzi o dziedziczenie masz wiele rodzajów, a także:

  • publiczna - publiczna oraz członkowie chronione są dziedziczone z ich odpowiedniego typu dostępu
  • chronione - członkowie publiczne są dziedziczone jako chronione i członkowie chronione zachowa swój typ dostępu.
  • prywatna - członkowie publiczne i prywatne będą dziedziczone

Uwaga : Klasy pochodne dziedziczy wszystkie metody klasy bazowej z następującym wyjątkiem.

  • Konstruktory, destruktory i konstruktory kopia klasy bazowej

  • Przeciążone operatorzy klasy bazowej.

  • Funkcje przyjaciel klasy bazowej.

Teraz jak dla znajomego specyfikacją, to z odniesieniem cpp tutaj Tutaj masz przykłady i szczegółowe wyjaśnienia, w jaki sposób z niego korzystać.

Znajdziesz tu również przykłady wielu informacji na temat istnieje, jeśli chodzi o standardowej biblioteki, także będzie można zobaczyć, co zbliża się do standardu w przyszłości i jakie funkcje obsługiwana kompilatora.

Odpowiedział 14/02/2020 o 03:22
źródło użytkownik

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