Hola, encontramos la respuesta a tu búsqueda, desplázate y la obtendrás un poco más abajo.
Solución:
class A
public:
int x;
protected:
int y;
private:
int z;
;
class B : public A
// x is public
// y is protected
// z is not accessible from B
;
class C : protected A
// x is protected
// y is protected
// z is not accessible from C
;
class D : private A // 'private' is default for classes
// x is private
// y is private
// z is not accessible from D
;
NOTA IMPORTANTE: Las clases B, C y D contienen todas las variables x, y y z. Es solo una cuestión de acceso.
Sobre el uso de la herencia protegida y privada, puede leer aquí.
Para responder a esa pregunta, me gustaría describir los accesos de los miembros primero con mis propias palabras. Si ya sabe esto, salte al encabezado “siguiente:”.
Hay tres accesorios que conozco: public
, protected
y private
.
Dejar:
class Base
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
;
- Todo lo que es consciente de
Base
también es consciente de queBase
contienepublicMember
. - Sólo los niños (y sus hijos) son conscientes de que
Base
contieneprotectedMember
. - nadie mas
Base
es consciente deprivateMember
.
Por “es consciente de”, me refiero a “reconocer la existencia de, y por lo tanto ser capaz de acceder”.
Siguiente:
Lo mismo sucede con la herencia pública, privada y protegida. Consideremos una clase Base
y una clase Child
que hereda de Base
.
- Si la herencia es
public
todo lo que es consciente deBase
yChild
también es consciente de queChild
hereda deBase
. - Si la herencia es
protected
solamenteChild
y sus hijos, son conscientes de que heredan deBase
. - Si la herencia es
private
nadie más queChild
es consciente de la herencia.
Limitar la visibilidad de la herencia hará que el código no pueda ver que alguna clase hereda otra clase: las conversiones implícitas de la derivada a la base no funcionarán, y static_cast
de la base a la derivada tampoco funcionará.
Solo los miembros/amigos de una clase pueden ver la herencia privada y solo los miembros/amigos y las clases derivadas pueden ver la herencia protegida.
público herencia
-
ES-A herencia. Un botón es una ventana, y en cualquier lugar donde se necesite una ventana, también se puede pasar un botón.
class button : public window ;
protegido herencia
-
Protegido implementado-en-términos-de. Raramente útil. Utilizado en
boost::compressed_pair
para derivar de clases vacías y ahorrar memoria usando la optimización de clase base vacía (el ejemplo a continuación no usa una plantilla para seguir en el punto):struct empty_pair_impl : protected empty_class_1 non_empty_class_2 second; ; struct pair : private empty_pair_impl non_empty_class_2 &second() return this->second; empty_class_1 &first() return *this; // notice we return *this! ;
privado herencia
-
Implementado en términos de. El uso de la clase base es solo para implementar la clase derivada. Útil con rasgos y si el tamaño importa (los rasgos vacíos que solo contienen funciones harán uso de la optimización de la clase base vacía). A menudo contención es la mejor solución, sin embargo. El tamaño de las cadenas es crítico, por lo que es un uso frecuente aquí.
template
struct string : private StorageModel public: void realloc() // uses inherited function StorageModel::realloc(); ;
público miembro
-
Agregar
class pair public: First first; Second second; ;
-
Accesorios
class window public: int getWidth() const; ;
protegido miembro
-
Proporcionar acceso mejorado para clases derivadas
class stack protected: vector
c; ; class window protected: void registerClass(window_descriptor w); ;
privado miembro
-
Mantener detalles de implementación
class window private: int width; ;
Tenga en cuenta que las conversiones de estilo C permiten deliberadamente convertir una clase derivada en una clase base protegida o privada de una manera definida y segura y también en la otra dirección. Esto debe evitarse a toda costa, ya que puede hacer que el código dependa de los detalles de implementación, pero si es necesario, puede utilizar esta técnica.
Te mostramos las comentarios y valoraciones de los lectores
Eres capaz de añadir valor a nuestra información cooperando tu experiencia en las críticas.