Latest web development tutorials

C ++ interfaccia (classe astratta)

Esso descrive il comportamento dell'interfaccia e classe funzionale, senza la necessità di completare una particolare classe di implementazione.

Interfaccia C ++ è implementato utilizzando unaclasse astratta, classe astratta e non essere confuso con l'astrazione dei dati, l'astrazione dei dati è un concetto dei dettagli di implementazione associati ai dati separati.

Se almeno una classe funzione è dichiarata come una funzione virtuale pura, allora questa classe è una classe astratta. Pure funzione virtuale in base alle "= 0" nello stato specificato, come segue:

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

Progettareuna classe astratta (comunemente indicato come ABC) Lo scopo è quello di dare l'altra una classe può ereditare la classe base appropriata.Una classe astratta non può essere utilizzato per istanziare un oggetto, può essere utilizzato solocome interfaccia.Se si tenta di creare un'istanza di un oggetto di una classe astratta, che si tradurrà in un errore di compilazione.

Pertanto, se la ABC una sottoclasse viene istanziato, è necessario implementare ogni funzione virtuale, ma significa anche che C ++ supporta l'utilizzo dell'interfaccia dichiarazione ABC. Se non c'è sovraccarico funzione virtuale pura in una classe derivata, cercare di istanziare un oggetto di questa classe causerà un errore di compilazione.

Classe può essere utilizzata per creare un'istanza di un oggetto che viene chiamato unaclasse concreta.

Istanza di una classe astratta

Considerate i seguenti esempi, la forma classe di base fornisce ungetArea un'interfaccia (),due classi derivate Rettangolo e Triangolo sono stati realizzati nelgetArea ():

#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 il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Total Rectangle area: 35
Total Triangle area: 17

Dagli esempi precedenti, possiamo vedere come una classe astratta è quello di definire un getArea interfaccia (), due classi derivate è come calcolare l'area di un algoritmo diverso per ottenere la stessa funzione.

design Strategy

sistemi orientati agli oggetti possono utilizzare una classe base astratta fornisce un adeguato, generico, un'interfaccia standardizzata per tutte le applicazioni esterne. Poi, la classe derivata ereditando da una classe base astratta, mettere tutte queste operazioni sono ereditate.

Funzione (per esempio una funzione pubblica) le applicazioni esterne fornite sotto forma di una classe base astratta esistono funzioni virtuali puri. Queste funzioni virtuali puri sono implementati nella classe derivata corrispondente.

Questa architettura consente inoltre nuove applicazioni possono essere facilmente aggiunti al sistema, anche dopo che il sistema è ancora può essere così definita.