Latest web development tutorials

C ++ de interface (classe abstrata)

Ele descreve o comportamento da interface e classe funcional, sem a necessidade de realizar uma classe implementação particular.

interface do C ++ é implementado usando umaclasse abstrata, classe abstrata e não ser confundida com a abstração de dados, abstração de dados é um conceito dos detalhes de implementação associados com os dados separados.

Se pelo menos uma classe função é declarada como uma função virtual pura, então essa classe é uma classe abstrata. função virtual pura usando os "= 0" na demonstração especificado, como segue:

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

Projetaruma classe abstrata (comumente referido como ABC) O propósito é dar ao outro uma classe pode herdar a classe base apropriada.Uma classe abstracta não pode ser usada para instanciar um objecto, que só pode ser usado comouma interface.Se você tentar instanciar um objeto de uma classe abstrata, ele irá resultar em um erro de compilação.

Portanto, se o ABC uma subclasse é instanciado, você deve implementar cada função virtual, isso também significa que C ++ suporta o uso da interface declaração ABC. Se não houver uma sobrecarga função virtual pura em uma classe derivada, tenta instanciar um objeto desta classe fará com que um erro do compilador.

Classe pode ser usada para instanciar um objeto é chamado de umaclasse concreta.

Instância de uma classe abstrata

Considere os seguintes exemplos, a forma classe base fornece uma interface degetArea (), duas classes derivadas do retângulo e triângulo foram realizados no 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;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Total Rectangle area: 35
Total Triangle area: 17

A partir dos exemplos acima, podemos ver como uma classe abstracta é para definir uma interface de getArea (), duas classes derivadas é como calcular a área de um algoritmo diferente para alcançar a mesma função.

Estratégia de design

sistemas orientados a objetos podem usar uma classe base abstrata fornece uma adequada interface padronizada, genérico, para todas as aplicações externas. Em seguida, a classe derivada por herança de uma classe base abstrata, colocar todas essas operações são herdadas.

Função (ou seja, a função pública) aplicações externas fornecidas sob a forma de uma classe base abstrata existem funções virtuais puros. Estas funções virtuais puras são implementados na classe derivada correspondente.

Esta arquitectura permite também novas aplicações podem ser facilmente adicionadas ao sistema, mesmo após o sistema ser ainda pode ser assim definido.