Latest web development tutorials

herencia C ++

La programación orientada a objetos es el concepto más importante es heredado. La herencia nos permite definir una clase a otra base de clase, que hace que la creación y el mantenimiento de una aplicación más fácil. Para ello, también llegó a la reutilización de la funcionalidad de código y mejorar los resultados de tiempo de ejecución.

Cuando se crea una clase, no es necesario volver a escribir nuevos datos miembro y funciones miembro, sólo tiene que especificar la nueva clase hereda un miembro existente de la clase puede ser. La clase existente se llamala clase base, la nueva clase se llama la clase derivada.

La herencia es unrepresentante de la relación. Por ejemplo, el mamífero es un animal, un perro es un mamífero, por lo tanto, un perro es un animal, y así sucesivamente.

Y Derivado clase base de clase

Una clase se puede derivar de más de una clase, lo que significa que puede heredar los datos y funciones de varios clases base. Define una clase derivada, se utiliza una lista de clase derivada para especificar una clase base. Lista de derivación clase a base de uno o más nombrado el siguiente formulario:

class derived-class: access-specifier base-class

En el que el modificador de acceso Acceso especificador espúblico, protegido o una privada,la base de la clase se define antes de que el nombre de una clase. Si no hay ningún modificador de acceso Acceso especificador, el valor predeterminado es privada.

Suponga que tiene una clase baseShape, rectángulosus clases derivadas, de la siguiente manera:

#include <iostream>
 
using namespace std;

// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Total area: 35

Control de acceso y herencia

clase derivada puede tener acceso a la clase base para todos los miembros no privados. Así que si quieres ser un miembro de una clase base funciones miembro de la clase derivada de acceso debe ser declarada en la clase base es privado.

Podemos resumir los diferentes derechos de acceso de acuerdo con el tipo de acceso, como sigue:

访问publicprotectedprivate
同一个类yesyesyes
派生类yesyesno
外部的类yesnono

Una clase derivada hereda todo el método de la clase base, excepto en las siguientes circunstancias:

  • constructor de la clase base y destructor y constructor de copia.
  • operadores sobrecargados de la clase base.
  • Amigo de la función de la clase base.

Tipo de herencia

Cuando una clase se deriva de la clase base, la clase de base puede ser heredada comopúblico, protegido o tipos particulares.A través de la explicación anterior se hereda tipo de modificador de acceso Acceso especificador especificar.

Casi no utilizarProtected o herencia privadase utiliza generalmente patrimoniopúblico.Cuando diferentes tipos de herencia, sigue las siguientes reglas:

  • clase miembrosprotegidos cuando una clase se deriva de una clase base pública,los miembrospúblicosde la clase base se deriva miembrospúblicosde una clase,losmiembrosprotectedde la clase base es la clase derivada,losmiembrosprivadosde una clase base no se pueden derivardirectamente: la herencia Pública (público)el acceso, pero se puede acceder llamando alosmiembrospúblicosyprotegidosde la clase base.
  • herencia protegido (protegido): Cuando una clase derivada de la protecciónde la clasebase,los miembrospúblicosyprotegidosde la clase base se convertirá en miembrosprotected dela clase derivada.
  • herencia privada (privada): Cuando una clase se deriva de una clase base demiembrosprivados,públicos yprotegidosde la clase base serán miembrosprivadosde la clase derivada.

La herencia múltiple

La herencia múltiple, es decir, una subclase puede tener más de una clase padre que hereda las características de más de una clase padre.

C ++ clase puede heredar de más de un miembro de la clase la siguiente sintaxis:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

En el que la herencia modificador de acceso espúblico, protegido o una privada,que se utiliza para decorar cada clase base, la clase de base entre cada uno separado por una coma, como se muestra arriba. Ahora veamos los siguientes ejemplos:

#include <iostream>
 
using namespace std;

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};

// 派生类
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Total area: 35
Total paint cost: $2450