Latest web development tutorials

C de l'interface (classe abstraite)

Il décrit le comportement de l'interface et la classe fonctionnelle, sans la nécessité d'achever une classe de mise en œuvre particulière.

L'interface C de mise en œuvre en utilisant uneclasse abstraite, classe abstraite et ne pas être confondu avec l' abstraction de données, abstraction de données est un concept des détails de mise en œuvre associés aux données séparées.

Si au moins une classe de fonction est déclarée comme une fonction virtuelle pure, alors cette classe est une classe abstraite. fonction virtuelle pure en utilisant les "= 0" dans l'état spécifié, comme suit:

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

Concevoirune classe abstraite (communément appelé ABC) Le but est de donner à l'autre une classe peut hériter de la classe de base appropriée.Une classe abstraite ne peut pas être utilisé pour instancier un objet, il ne peut être utilisé commeune interface.Si vous essayez d'instancier un objet d'une classe abstraite, elle se traduira par une erreur de compilation.

Par conséquent, si l'ABC une sous-classe est instancié, vous devez implémenter chaque fonction virtuelle, cela signifie aussi que C ++ prend en charge l'utilisation de l'interface de présentation ABC. S'il n'y a pas de fonction virtuelle pure surcharge dans une classe dérivée, essayez d'instancier un objet de cette classe provoquera une erreur du compilateur.

Classe peut être utilisé pour instancier un objet est appelé uneclasse concrète.

Instance d'une classe abstraite

Considérons les exemples suivants, la forme de la classe de base fournit unegetArea d'interface (),deux classes dérivées Rectangle et Triangle ont été réalisées dans legetArea ():

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

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Total Rectangle area: 35
Total Triangle area: 17

A partir des exemples ci-dessus, nous pouvons voir comment une classe abstraite est de définir une getArea d'interface (), deux classes dérivées est de savoir comment calculer l'aire d'un algorithme différent pour obtenir la même fonction.

Stratégie de conception

systèmes orientés objet peuvent utiliser une classe de base abstraite fournit une, interface standardisée générique appropriée pour toutes les applications externes. Ensuite, la classe dérivée en héritant d'une classe de base abstraite, mettre toutes ces opérations sont héritées.

Fonction (ie public function) des applications externes fournis sous la forme d'une classe de base abstraite fonctions virtuelles pures existent. Ces fonctions virtuelles pures sont mises en œuvre dans la classe dérivée correspondant.

Cette architecture permet également de nouvelles applications peuvent être facilement ajoutés au système, même après que le système est encore peut être ainsi définie.