English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Control de acceso de herencia (public, protected, private)

En este artículo, aprenderá a usar en C ++Se puede usar la herencia pública, la herencia protegida y la herencia privada en el uso. Aprenderá a través de ejemplos dónde y cómo usarlo.

Puede declarar una clase derivada a partir de una clase base con diferentes especificaciones de acceso.clase,es decir, públicaHerencia,herencia protegida o herencia privada.

#include <iostream>
using namespace std;
class base
{
.... ... ....
};
class derived : access_specifier base
{
.... ... ....
};

Nota:Se puede usar las palabras clave public, protected o private en lugar del access_specifier utilizado en el código anterior.Anotación de acceso)término.

Control de acceso y herencia

La clase derivada puede acceder a todos los miembros no privados de la clase base. Por lo tanto, si los miembros de la clase base no quieren ser accedidos por los miembros de la clase derivada, deben declararse como private en la clase base.

Podemos resumir diferentes tipos de acceso según los permisos de acceso, como se muestra a continuación:

访问la herencia, generalmente se usararamente se usaprivate
accesoclases externasclases externasclases externas
clase derivadaclases externasclases externas
la misma claseclases externas

no

  • Una subclase hereda todos los métodos de la clase base, excepto en los siguientes casos:

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

  • operadores sobrecargados de la clase base.

funciones amigas de la clase base.

el tipo de herencia public, protected o private cuando una clase deriva de una clase base, la clase base puede ser heredada como-varios tipos. El tipo de herencia se determina por el modificador de acceso access

specifier para especificar. raramente se usa o private protected la herencia, generalmente se usa public

  • la herencia. Al usar diferentes tipos de herencia, se deben seguir las siguientes reglas:cuando una clase deriva depúblicocuando una clase heredapúblicoherencia pública (public):públicolos miembros de la clase base también sonprotegidoherencia pública (public):protegidolos miembros de la clase base también sonprivadolos miembros no pueden ser accedidos directamente por la clase derivada, pero pueden acceder a ellos llamando a los métodos de la clase base.públicoyprotegidolos miembros pueden ser accedidos por la clase derivada llamando a los métodos de la clase base.

  • herencia protegida (protected): cuando una clase deriva deprotegidocuando una clase heredapúblicoyprotegidolos miembros se convertirán enprotegidomiembros.

  • herencia privada (private):cuando una clase deriva deprivadocuando una clase heredapúblicoyprotegidolos miembros se convertirán enprivadomiembros.

Herencia múltiple

La herencia múltiple es cuando una subclase puede tener múltiples clases padre, heredando las características de múltiples clases padre.

C++ Una clase puede heredar miembros de múltiples clases, la sintaxis es la siguiente:

class <nombre de la clase derivada>:<forma de heredar1><nombre de la clase base1>,<forma de heredar2><nombre de la clase base2>,…
{
<cuerpo de la clase derivada>
};

donde, la forma de heredar los modificadores de acceso es public, protected o private uno de ellos, se utiliza para modificar cada clase base, las clases base entre sí se separan por comas, como se muestra anteriormente. Ahora veamos el siguiente ejemplo:

#include <iostream>
 
using namespace std;
 
// clase base Shape
class Shape 
{
   public:
      void setAnchura(int w)
      {
         anchura = w;
      }
      void setAltura(int h)
      {
         altura = h;
      }
   protected:
      int anchura;
      int altura;
};
 
// clase base PaintCost
class PaintCost 
{
   public:
      int getCost(int área)
      {
         return área * 70;
      }
};
 
// clase derivada
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};
 
int main(void)
{
   Rectangle Rect;
   int área;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
 
   area = Rect.getArea();
   
   // Imprimir el área del objeto
   cout << "Área total: " << Rect.getArea() << endl;
 
   // Imprimir el costo total
   cout << "Costo total: $" << Rect.getCost(area) << endl;
 
   return 0;
}

Cuando el código anterior se compila y ejecuta, producirá los siguientes resultados:

Área total: 35
Costo total: $2450