Oppsummering klassemedlem tilgangsregler i C ++

stemmer
0

Jeg prøver å forstå klassemedlem tilgangsregler som er definert i flere avsnitt av [class.access] delen av C ++ standard. De er ganske komplisert derfor jeg trenger en kort men presis og uttømmende oversikt .

Jeg skrev dette programmet til å teste tilgjengeligheten til beskyttede medlemmer i flere situasjoner (siden reglene for vernede medlemmer er det vanskeligere å få):

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

Jeg kom til denne konklusjonen:

  • offentlige medlemmer av en klasse er tilgjengelig for alle enheter;
  • private medlemmer av en klasse er tilgjengelig bare for medlemmer og venner av den klassen;
  • beskyttede medlemmer av en klasse er tilgjengelige bare for medlemmer og venner av den klasse, til medlemmer og venner av avledede klasser av den klasse dersom de beskyttede medlemmene er arvet fra de utledede klasser eller grunnklasser av de utledede klasser, og til medlemmer av grunnklasser av klassen hvis de beskyttede medlemmer er statisk .

Er min oppsummering nøyaktig og utfyllende?

Publisert på 14/02/2020 klokken 00:02
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Hvis spørsmålet ditt er basert på tilgang, disse er reglene i c ++. Jeg vil gjøre en grunnleggende oppsummeringen nedenfor, men for uttømmende forklaring kan du gå hit . Dette vil gå mer i detalj på hvordan hver fungerer.

  • offentlige - funksjoner og variabler er i stand til å åpnes i den samme klassen, avledet klasse og utenfor klasse

  • er beskyttet av - funksjoner og variabler er i stand til å åpnes i den samme klassen, og avledet klasse

  • private - funksjoner og variabler kan nås i samme klasse.

Når det gjelder arv du har flere typer også:

  • offentlig - offentlig og beskyttede medlemmer arvet med sine respektive tilgangstype
  • beskyttet - offentlige medlemmer er arvet som beskyttet og beskyttet medlemmer vil beholde sin tilgang type.
  • Privat - offentlige og private medlemmer vil bli arvet

Merk : Avledet klasser arver alle metoder for base klassen med følgende unntak.

  • Konstruktører, destructors og kopi konstruktører av base klassen

  • Belastet operatører av base klassen.

  • De venn funksjonene base klassen.

Nå som for venn Specifier, er dette fra CPP referansen her Her vil du ha eksempler og detaljerte forklaringer på hvordan du bruker den.

Du vil også finne eksempler på mye informasjon om det når det kommer til standard bibliotek, også du vil være i stand til å se hva som kommer til standarden i fremtiden og hvilke funksjoner kompilatoren støtter.

Svarte 14/02/2020 kl. 05:22
kilden bruker

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