Vidéo: Buckys C++ Programming Tutorials - 57 - Abstract Classes and Pure virtual Functions 2024
Aussi satisfaisant intellectuellement que l'affacturage est en C ++, il introduit un problème qui lui est propre. Dans un exemple sur les classes de compte bancaire, en particulier la classe de base commune Compte. Pensez un instant à la façon dont vous pourriez définir les différentes fonctions membres définies dans le compte .
La plupart des fonctions membres du compte ne posent aucun problème car les deux types de compte les implémentent de la même manière. L'implémentation de ces fonctions communes avec Compte :: retrait () est cependant différente.
Les règles pour se retirer d'un compte d'épargne sont différentes de celles pour se retirer d'un compte courant. Vous devrez implémenter Savings:: withdraw () différemment que vous faites Check:: withdraw () . Mais comment allez-vous implémenter Account:: withdraw ()?
Demandons l'aide du directeur de banque. La conversation pourrait ressembler à ceci:
"Quelles sont les règles pour effectuer un retrait d'un compte? " tu demandes.
"Quel type de compte? Économies ou vérification? "Vient la réponse.
"D'un compte", dites-vous. "Juste un compte. "
Regard vide.
Le problème est que la question n'a pas de sens. Il n'y a pas de «juste un compte». "Tous les comptes (dans cet exemple) sont des comptes chèques ou des comptes d'épargne. Le concept d'un compte est un concept abstrait qui factorise les propriétés communes aux deux classes concrètes.
Il est incomplet car il manque le retrait de propriété critique () . (Après avoir approfondi les détails, vous pouvez trouver d'autres propriétés qui manquent à un simple compte.)
Une classe abstraite est celle qui n'existe que dans les sous-classes. Une classe concrète est une classe qui n'est pas abstraite.