Shrneme-li přístup členem skupiny vládne v jazyce C ++

hlasů
0

Snažím se plně pochopit pravidla pro přístup členů tříd definovaných v několika odstavcích [class.access] části C ++ standardu. Jsou poměrně složité a proto potřebuji krátký, ale přesný a vyčerpávající přehled .

Napsal jsem tento program pro testování dostupnosti chráněných členů v několika situacích (jelikož pravidla pro chráněné členy jsou těžší získat):

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

Přišel jsem k tomuto závěru:

  • veřejné členy třídy, jsou přístupné všem subjektům;
  • členy soukromé třídy, jsou přístupná pouze pro členy a příznivce této třídy;
  • chráněné členy třídy, jsou přístupná pouze pro členy a příznivce této třídy, pro členy a přátele odvozených tříd této třídy, jestliže chráněné členy jsou zděděné z odvozených tříd nebo základních tříd odvozených tříd, a na členy základní třídy této třídy, jestliže chráněné členy jsou statické .

Je můj souhrn přesné a vyčerpávající?

Položena 14/02/2020 v 00:02
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Je-li vaše otázka vychází z přístupu, to jsou pravidla v rámci C ++. Udělám základní přehled níže, avšak za vyčerpávající vysvětlení naleznete zde . To bude trvat do větších podrobností o tom, jak každý funguje.

  • veřejné - funkce a proměnné jsou schopni získat přístup do stejné třídy, odvozené třídy i mimo třídu

  • chráněná - funkce a proměnné jsou schopni získat přístup do stejné třídy, a odvozené třídy

  • Soukromé - funkce a proměnné jsou schopni přistupovat stejné třídě.

Pokud jde o dědičnost máte více typů stejně:

  • veřejná - veřejné a chráněné členy se dědí s jejich příslušným typem přístupového
  • chráněná - veřejné členy se dědí jako chráněné a chráněné členy udrží svůj typ přístupu.
  • soukromé - veřejné a soukromé členové budou zdědil

Poznámka : Odvozené třídy dědí všechny metody základní třídy s následující výjimkou.

  • Konstruktory, destruktory a kopírování konstruktérů základní třídě

  • Přetížené operátory základní třídě.

  • Přítel funkce základní třídy.

Nyní i pro přítele specifikátor, to je z odkazu cpp zde Zde budete mít příklady a podrobné vysvětlení o tom, jak ji používat.

Najdete zde také příklady pro spoustu informací o tam, pokud jde o standardní knihovny, také budete mít možnost vidět, co se blíží ke standardu v budoucnu a jaké funkce kompilátoru podpory.

Odpovězeno 14/02/2020 v 05:22
zdroj uživatelem

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