Video: Data Structures: Abstract Data Type (ADT) 2024
Eine abstrakte Klasse in C ++ ist eine Klasse mit einer oder mehreren reinen virtuellen Funktionen. Eine reine virtuelle -Funktion ist eine virtuelle Mitgliedsfunktion, die so markiert ist, dass sie keine Implementierung hat. Höchstwahrscheinlich hat es keine Implementierung, da keine Implementierung mit den in der Klasse bereitgestellten Informationen möglich ist, einschließlich aller Basisklassen.
Eine konventionelle, reine virtuelle Funktion ist als konkrete Funktion bekannt (man beachte, dass eine konkrete Funktion virtuell sein kann - leider bedeutet C ++, dass dieser Begriff polymorph ist).
Die Syntax zum Deklarieren einer Funktion pure virtual wird in der folgenden Klasse gezeigt Account:
// Account - diese Klasse ist eine abstrakte Klassenklasse Account {public: Konto (unsigned accNo, double initialBalance = 0. 0); // Zugriffsfunktionen unsigned int accountNo (); double acntBalance (); static int noAccounts (); // Transaktionsfunktionen void deposit (double amount); // die folgenden ist eine reine virtuelle Funktion virtuelle Entzugserlaubnis (doppelter Betrag) = 0; geschützt: // Konten in einer verknüpften Liste behalten, damit es keine Begrenzung gibt // zur Anzahl der Konten statisch int count; // Anzahl der Konten unsigned accountNumber; doppelter Kontostand;};
Die = 0 nach der Entzugserklärung () zeigt an, dass der Programmierer diese Funktion nicht definieren will. on ist ein Platzhalter für die Unterklassen. Es wird erwartet, dass die Unterklassen von Account diese Funktion mit einer konkreten Funktion überschreiben. Der Programmierer muss eine Implementierung für jede Mitgliedsfunktion bereitstellen, die nicht als rein virtuell deklariert ist.
Manche Programmierer halten diese Schreibweise für albern. Aber es ist hier, um zu bleiben, also musst du lernen, damit zu leben. Es gibt einen Grund, wenn nicht gerade eine Rechtfertigung für diese Notation. Jede virtuelle Funktion muss einen Eintrag in einer speziellen Tabelle haben.
Dieser Eintrag enthält die Adresse der Funktion. Vermutlich war mindestens einmal der Eintrag für eine reine virtuelle Funktion 0. In jedem Fall ist es die Syntax, mit der Sie jetzt arbeiten.
Eine abstrakte Klasse kann nicht mit einem Objekt instanziert werden; das heißt, Sie können kein Objekt aus einer abstrakten Klasse machen. Zum Beispiel ist die folgende Deklaration nicht legal:
void fn () {// Konto mit 100 Dollar deklarieren Account acnt (1234, 100. 00); // das ist nicht legal acnt. Rücknahme (50); // was würdest du erwarten} // dieser aufruf?
Wenn die Deklaration erlaubt wäre, wäre das resultierende Objekt unvollständig und hätte keine Fähigkeiten. Was sollte der vorherige Aufruf zum Beispiel tun? Denken Sie daran, es gibt kein Konto:: Rückzug () .
Abstrakte Klassen dienen als Basisklassen für andere Klassen. Ein -Konto enthält alle Eigenschaften, die einem generischen Bankkonto zugeordnet sind. Sie können andere Arten von Bankkonten erstellen, indem Sie von Konto erben.
Der Fachausdruck lautet , zu instanziieren. Sie sagen, dass die Account -Klasse nicht mit einem Objekt instanziiert werden kann oder ein bestimmtes Objekt die Savings -Klasse instanziiert.