Concept de classe abstraite de C

Une classe abstraite en C ++ est une classe avec un ou plusieurs des fonctions virtuelles pures. UN virtuelle pure fonction est une fonction de membre virtuel qui est marqué comme ayant pas mise en œuvre. Très probablement, il n'a pas d'implémentation car aucune mise en œuvre est possible avec l'information fournie dans la classe, y compris les classes de base.

Une fonction virtuelle conventionnelle, run-of-the-mill non-pur est connu comme un fonction de béton (à noter que la fonction de béton peut être virtuelle - malheureusement, C ++ utilise ce terme pour désigner polymorphe.

La syntaxe pour déclarer une fonction virtuelle pure est démontré dans la classe suivante Compte:

// Compte - cette classe est un compte de classclass abstraite {public: compte (accNo non signé, double initialBalance = 0.0) - dépôt de functionsvoid // de la transaction - // accès functionsunsigned int AccountNo () -double acntBalance () -static int noAccounts () (montant double) - // ce qui suit est un retrait pur functionvirtual virtual void (montant Double) = 0-protégé: // tenir une comptabilité dans une liste chaînée donc il n'y a pas de limite // au nombre de accountsstatic int comptage // nombre de accountsunsigned accountNumber-doublebalance -} -

La = 0 après la déclaration de retrait () indique que le programmeur n'a pas l'intention de définir cette fonction. La déclaration est un espace réservé pour les sous-classes. Les sous-classes de Considération sont censés remplacer cette fonction avec une fonction concrète. Le programmeur doit fournir une implémentation pour chaque fonction de membre non déclaré virtuelle pure.

Certains programmeurs pensent cette notation est stupide. Mais il est là pour rester, donc vous avez juste à apprendre à vivre avec elle. Il ya une raison, si pas exactement une justification pour cette notation. Chaque fonction virtuelle doit avoir une entrée dans une table spéciale.

Cette entrée contient l'adresse de la fonction. Vraisemblablement, au moins à un moment donné, l'entrée pour une fonction virtuelle pure était 0. Dans tous les cas, il est la syntaxe que vous êtes coincé avec maintenant.

Une classe abstraite ne peut pas être instancié avec un object- qui est, vous ne pouvez pas faire un objet hors d'une classe abstraite. Par exemple, la déclaration suivante est pas légal:

fn void () {// déclarer un compte avec 100 dollarsAccount acnt (1234, 100.00) - // cela ne soit pas legalacnt.withdrawal (50) - // ce que vous attendez-vous} // cet appel à faire?

Si la déclaration était admise, l'objet résultant serait incomplet, manque une certaine capacité. Par exemple, ce qui devrait l'appel précédent faire? Rappelez-vous, il n'y a pas Compte :: retrait ().

Les classes abstraites servent de classes de base pour les autres classes. Un Considération contient toutes les propriétés associées à un compte bancaire générique. Vous pouvez créer d'autres types de comptes bancaires en héritant de Compte.

Le terme technique est de instancier. Vous dites que le Considération classe ne peut pas être instancié avec un objet ou un objet donné instancie le Épargne classe.


» » » » Concept de classe abstraite de C