Classes abstraites

De RAD Studio (Français)

Remonter à Classes abstraites - Index

Une classe abstraite est une classe ayant au moins une fonction virtual pure. Une fonction virtual est spécifiée comme étant pure en lui attribuant la valeur zéro.

Une classe abstraite n'est utilisable que comme classe de base pour d'autres classes. Aucun objet de classe abstraite ne peut être créé. Une classe abstraite ne s'utilise pas comme type d'argument ni comme type de renvoi de fonction. Cependant, vous pouvez déclarer des pointeurs sur une classe abstraite. Des références à une classe abstraite sont également permises, à condition qu'un objet temporaire ne soit pas requis lors de l'initialisation. Par exemple,



 class shape {       // classe abstraite
    point center;
 .
 .
 .
 public:
    where() { return center; }
    move(point p) { center = p; draw(); }
    virtual void rotate(int) = 0; // fonction virtuelle pure
    virtual void draw() = 0;      // fonction virtuelle pure
    virtual void hilite() = 0;    // fonction virtuelle pure
 .
 .
 .
 }
 shape x;// ERREUR : essai de création d'un objet d'une classe abstraite
    shape* sptr;// pointeur sur classe abstraite : OK
    shape f();// ERREUR : une classe abstraite ne peut pas être renvoyée comme type
 int g(shape s);// ERREUR : une classe abstraite ne peut être le type d'un argument d'une fonction
 shape& h(shape&);// référence à une classe abstraite comme valeur
  // de renvoi ou argument de fonction : OK



Supposons que D soit une classe dérivée avec la classe abstraite B comme classe de base immédiate. Pour chaque fonction virtuelle pure pvf dans B, D doit soit contenir une définition pour pvf, soit déclarer pvf comme étant pure.

Par exemple, l'utilisation de la classe shape déjà citée :



 class circle : public shape {// circle dérivé de la classe abstraite
    int radius;// private
 public:
    void rotate(int) { }// fonction virtuelle définie : pas d'action
             // pour faire pivoter le cercle
    void draw();      // circle::draw doit être définie quelque part
 }



Les fonctions membres peuvent être appelées depuis un constructeur de classe abstraite, mais l'appel d'une fonction virtuelle pure, directement ou indirectement, depuis ce constructeur entraîne une erreur au moment de l'exécution

Voir aussi

Autres langues