Resumiendo acceso miembro de la clase gobierna en C ++

votos
0

Estoy tratando de entender completamente las reglas de acceso de miembros de clases definidas en varios párrafos de la [class.access] sección de la norma C ++. Ellos son bastante complejos por lo tanto necesito una corta pero resumen preciso y exhaustivo .

Escribí este programa para probar la accesibilidad de los miembros protegidas en varias situaciones (ya que las reglas para los miembros protegidos son los más difíciles de conseguir):

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

Llegué a esta conclusión:

  • miembros públicos de una clase son accesibles a cualquier entidad;
  • los miembros privados de una clase son accesibles solamente a los miembros y amigos de esa clase;
  • miembros protegidos de una clase son accesibles sólo a miembros y amigos de esa clase, a los miembros y amigos de las clases derivadas de esa clase si los miembros protegidas se heredan de las clases derivadas o clases de base de las clases derivadas, ya los miembros de las clases base de esa clase si los miembros protegidos son estáticos .

Es mi resumen preciso y exhaustivo?

Publicado el 14/02/2020 a las 00:02
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Si su pregunta se basa en el acceso, estas son las reglas dentro de C ++. Voy a hacer un resumen básico de abajo, pero para la explicación exhaustiva por favor vaya aquí . Esto entrar en más detalles sobre el funcionamiento de cada uno.

  • públicos - funciones y variables son capaces de ser visitada en la misma clase, clase derivada y fuera de clase

  • protegidos clase funciones y variables son capaces de ser visitada en la misma clase, y derivan -

  • privadas - funciones y variables son capaces de acceder en una misma clase.

Cuando se trata de la herencia tiene varios tipos, así:

  • pública - pública y miembros protegidos se heredan con su respectivo tipo de acceso
  • protegidos - miembros públicos se heredan como protegidos y protegidas miembros mantendrán su tipo de acceso.
  • privada - miembros públicos y privados serán heredados

Nota : Las clases derivadas hereda todos los métodos de la clase base con la siguiente excepción.

  • Constructores, destructores y constructores de copia de la clase base

  • operadores sobrecargados de la clase base.

  • Las funciones amigas de la clase base.

Ahora en cuanto a la amiga especificador, se trata de la referencia CPP aquí Aquí tendrá ejemplos y explicaciones detalladas sobre cómo usarlo.

Usted también encontrará ejemplos de una gran cantidad de información sobre la que hay cuando se trata de la biblioteca estándar, también será capaz de ver lo que viene a la norma en el futuro y qué características admite el compilador.

Respondida el 14/02/2020 a las 05:22
fuente por usuario

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