Latest web development tutorials

Interfejs C ++ (klasa abstrakcyjna)

Opisuje zachowanie interfejsu i grupy funkcyjnej, bez konieczności wprowadzenia konkretnej klasy realizacji.

Interfejs C ++ jest realizowany przy użyciuklasy abstrakcyjnej, streszczenie klasę i nie należy mylić z abstrakcji danych, abstrakcja danych jest pojęciem o szczegółach realizacji związanych z danymi oddzielonymi.

Jeżeli przynajmniej jedna klasa funkcja jest zadeklarowana jako czystego funkcji wirtualnych, to ta klasa jest klasą abstrakcyjną. Czysta wirtualnych przy użyciu funkcji "= 0" w rachunku określonego w następujący sposób:

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

Zaprojektujklasę abstrakcyjną (potocznie zwany ABC) Celem jest umożliwienie druga klasa może dziedziczyć odpowiednią klasę bazową.Streszczenie klasy nie może być stosowany do wystąpienia obiektu, może być stosowanetylko jako interfejs.Jeśli spróbujesz instancję obiektu klasy abstrakcyjnej, spowoduje to błąd kompilacji.

Dlatego też, jeśli ABC podklasą jest tworzony, należy wdrożyć każdą funkcję wirtualną, oznacza to również, że C ++ obsługuje korzystanie z interfejsu rachunku ABC. Jeśli nie ma przeciążenia czystą funkcję wirtualną w klasie pochodnej, spróbuj instancji obiektu tej klasy spowoduje błąd kompilatora.

Klasy mogą być wykorzystywane do wystąpienia obiekt nazywa siębetonu klasy.

Instancja klasy abstrakcyjnej

Rozważmy następujące przykłady, kształt klasa bazowa zapewniagetArea interfejsu (),dwie klasy pochodzące Prostokątna i Triangle zostały zrealizowane wgetArea ():

#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;
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Total Rectangle area: 35
Total Triangle area: 17

Z powyższych przykładów widać, jak klasa abstrakcyjna jest zdefiniowanie getArea interfejsu (), dwóch klas pochodnych jest jak obliczyć powierzchnię innego algorytmu, aby osiągnąć tę samą funkcję.

Strategia projektowania

systemy obiektowe mogą wykorzystywać abstrakcyjna klasa bazowa zapewnia odpowiedniej, rodzajowe, standardowy interfejs dla wszystkich zastosowań zewnętrznych. Następnie klasa uzyskany przez dziedziczenie z abstrakcyjnej klasy bazowej, umieścić wszystkie takie operacje są dziedziczone.

Funkcja (tj public function) zewnętrzne aplikacje dostarczone w formie abstrakcyjnej klasy bazowej istnieje czyste funkcje wirtualne. Te czyste funkcje wirtualne są realizowane w odpowiedniej klasie pochodnej.

Ta architektura umożliwia również nowe zastosowania można łatwo dodać do systemu, nawet, gdy system jest nadal może być łatwo określona.