Latest web development tutorials

interfaz de C ++ (clase abstracta)

En él se describe el comportamiento de la interfaz y la clase funcional, sin la necesidad de completar una clase de implementación en particular.

interfaz de C ++ se implementa mediante unaclase abstracta, la clase abstracta y no se confunde con la abstracción de datos, la abstracción de datos es un concepto de los detalles de implementación asociados con los datos separados.

Si al menos una clase función se declara como una función virtual pura, a continuación, esta clase es una clase abstracta. función virtual pura mediante el uso del signo "= 0" de la cuenta especificada, de la siguiente manera:

class Box
{
   public:
      // 纯虚函数
      virtual double getVolume() = 0;
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};

Diseñaruna clase abstracta (comúnmente conocido como el ABC) El propósito es dar al otro una clase puede heredar la clase base apropiada.Una clase abstracta no puede ser usado para crear instancias de un objeto, que sólo se puede utilizar comouna interfaz.Si intenta crear una instancia de un objeto de una clase abstracta, que dará lugar a un error de compilación.

Por lo tanto, si se crea una instancia del ABC una subclase, debe implementar cada función virtual, sino que también significa que C ++ es compatible con el uso de la interfaz de sentencia ABC. Si no hay una sobrecarga de función virtual pura en una clase derivada, tratar de crear una instancia de un objeto de esta clase va a causar un error de compilación.

Clase se puede utilizar para crear instancias de un objeto que se llama unaclase concreta.

Instancia de una clase abstracta

Considere los siguientes ejemplos, la forma de la clase base proporciona una interfaz degetArea (), dos clases derivadas del rectángulo y el triángulo se realizaron en el getArea ():

#include <iostream>
 
using namespace std;
 
// 基类
class Shape 
{
public:
   // 提供接口框架的纯虚函数
   virtual int getArea() = 0;
   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); 
   }
};
class Triangle: public Shape
{
public:
   int getArea()
   { 
      return (width * height)/2; 
   }
};
 
int main(void)
{
   Rectangle Rect;
   Triangle  Tri;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
   // 输出对象的面积
   cout << "Total Rectangle area: " << Rect.getArea() << endl;

   Tri.setWidth(5);
   Tri.setHeight(7);
   // 输出对象的面积
   cout << "Total Triangle area: " << Tri.getArea() << endl; 

   return 0;
}

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

Total Rectangle area: 35
Total Triangle area: 17

De los ejemplos anteriores, podemos ver cómo una clase abstracta es definir una interfaz getArea (), dos clases derivadas es cómo calcular el área de un algoritmo diferente para lograr la misma función.

Estrategia de diseño

sistemas orientados a objetos pueden utilizar una clase base abstracta proporciona una interfaz adecuada, genérico, estandarizada para todas las aplicaciones externas. Entonces, la clase derivada heredando de una clase base abstracta, puso todas estas operaciones se heredan.

Función (es decir, la función pública) aplicaciones externas proporcionadas en forma de una clase base abstracta existen funciones virtuales puras. Estas funciones virtuales puras se implementan en la clase derivada correspondiente.

Esta arquitectura también permite nuevas aplicaciones pueden ser fácilmente añadidos al sistema, incluso después de que el sistema aún puede ser así definida.