- Encapsulation et Extension des Types
- Héritage
- Polymorphisme
- Surcharge
- Fonctions virtuelles
- Membres Statiques de Classe
- Templates de fonctions
- Templates de classes
- Abstract Classes
Classes Abstraites et Fonctions Virtuelles Pures
Les classes abstraites sont utilisées pour créer des entités génériques que vous souhaitez utiliser pour créer des classes dérivées plus spécifiques. Une classe abstraite ne peut être utilisée que comme classe de base pour d'autres classes, c'est pourquoi il est impossible de créer un objet du type d'une classe abstraite.
Une classe qui contient au moins une fonction virtuelle pure est abstraite. Les classes dérivées d'une classe abstraite doivent donc implémenter toutes ses fonctions virtuelles pures, sinon elles seront également des classes abstraites.
Une fonction virtuelle est déclarée "pure" en utilisant le mot-clé pure. Considérons l'exemple de la classe CAnimal, qiu n'est créée que pour fournir des fonctions communes les objets du type CAnimal sont trop généraux pour un usage pratique. CAnimal est donc un bon exemple pour une classe abstraite :
class CAnimal |
Ici Sound() est une fonction virtuelle pure, car elle est déclarée avec le spécificateur de fonction virtuelle PURE (=0).
Les fonctions virtuelles pures ne sont que les fonctions virtuelles déclarées avec le spécificateur PURE : (=NULL) ou (=0). Exemple de déclaration et d'utilisation d'une classe abstraite :
class CAnimal
|
Restrictions sur les classes abstraites
Si le constructeur d'une classe abstraite appelle une fonction virtuelle pure (directement ou indirectement), le résultat est indéfini.
//+------------------------------------------------------------------+
|
Cependant, les constructeurs et les destructeurs des classes abstraites peuvent appeler d'autres fonctions membres.