Összegezve tanulót hozzáférési szabályokat C ++

szavazat
0

Igyekszem, hogy teljesen megértsük tanulót hozzáférési szabályok meghatározása több bekezdést a [class.access] részben a C ++ szabvány. Ezek nagyon bonyolult, ezért kell egy rövid, de pontos és kimerítő felsorolását .

Írtam ezt a programot, hogy teszteljék a hozzáférhetőség védett tagok különböző helyzetekben (mivel ezek a szabályok a védett tagjai a nehezebb):

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

Azért jöttem, hogy ezt a következtetést:

  • nyilvánosság tagjai egy osztály számára hozzáférhető olyan jogalanyok;
  • privát tagjai egy osztály pedig csak a tagjai és barátai az osztályban;
  • védett tagjai egy osztály pedig csak a tagjai és barátai, hogy az osztály, hogy tagjai és barátai származtatott osztályait osztályt, ha a védett tagok örökölte a származtatott osztályok vagy alaposztályok a származtatott osztályok, valamint a tagok alaposztályok az adott osztály, ha a védett tagjai statikus .

Az én összefoglaló pontos és teljes?

A kérdést 14/02/2020 00:02
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Ha kérdése van, hozzáférés alapú, ezek a szabályok belül a C ++. Megteszem az alap alábbi összefoglaló, hanem a teljes magyarázatot lépjen ide . Ez megy be részletesebben, hogyan működik minden.

  • Nyilvános - függvények és változók képesek elérhető az azonos osztályba tartozó, származtatott osztály és az órákon kívül

  • védett - függvények és változók képesek elérhető az azonos osztályú, és származtatott osztály

  • magán - függvények és változók képesek hozzáférni ugyanabban az osztályban.

Mikor jön az öröklési több típusú is:

  • Nyilvános - nyilvános és védett tagok öröklődik saját hozzáférési típus
  • védett - nyilvános tagok öröklődnek védett és védett tagok megtartják hozzáférési típus.
  • magán - állami és magán tagok öröklődik

Megjegyzés : A származtatott osztályok örökli az összes módszer az alap osztály a következő kivétellel.

  • Constructors, destruktor és konstruktorok másolata a szülő osztály

  • Túlterhelt üzemeltetői az alap osztály.

  • A barátja funkciói az alap osztály.

Most, hogy a barátja specifikátor, ez a cpp referencia itt Itt van példa és részletes magyarázatot, hogy hogyan kell használni.

Akkor is példát találni egy csomó információt ott, amikor a standard könyvtár is lesz képes, hogy mi jön, hogy a szabvány a jövőben, és milyen funkciók a fordító támogatja.

Válaszolt 14/02/2020 05:22
a forrás felhasználó

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