C ++ abstrakte Klasse Konzept

Eine abstrakte Klasse in C ++ ist eine Klasse mit einem oder mehreren reinen virtuellen Funktionen. EIN rein virtuelle Funktion ist eine virtuelle Member-Funktion, die als nicht Implementierung markiert ist. Wahrscheinlich hat es keine Implementierung, da keine Implementierung mit der Information möglich ist, in der Klasse zur Verfügung gestellt, einschließlich aller Basisklassen.

Eine herkömmliche, run-of-the-mill nicht rein virtuelle Funktion ist als ein bekannter konkrete Funktion (Beachten Sie, dass eine konkrete Funktion virtuell sein kann - leider, C ++ verwendet diesen Begriff polymorph bedeuten.

Die Syntax für die Deklaration einer Funktion ist rein virtuell ist in der folgenden Klasse demonstriert Konto:

// Konto - diese Klasse ist eine abstrakte classclass Konto {public: Konto (unsigned KONTNR, Doppel initialBalance = 0.0) - // Zugang functionsunsigned int AccountNo () -double acntBalance () -static int noAccounts () - // Transaktion functionsvoid Einzahlung (doppelte Menge) - // das folgende ist eine rein virtuelle functionvirtual Leere Rückzug (doppelte Menge) = 0 geschützt: // Konten in einer verknüpften Liste zu halten, so gibt es keine Begrenzung // auf die Anzahl der accountsstatic int Count- // Nummer von accountsunsigned konto-doublebalance -} -

Das = 0 nach der Erklärung der Rückzug() zeigt an, dass sich der Programmierer nicht um diese Funktion zu definieren will. Die Erklärung ist ein Platzhalter für die Unterklassen. Die Unterklassen von Konto wird erwartet, dass diese Funktion mit einer konkreten Funktion außer Kraft zu setzen. Der Programmierer muss eine Implementierung für jede Mitgliedsfunktion bieten nicht rein virtuell deklariert.

Einige Programmierer denken diese Schreibweise ist albern. Aber es ist, hier zu bleiben, so dass Sie nur mit ihr leben zu lernen. 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 zumindest zu einem Zeitpunkt, der Eintrag für eine rein virtuelle Funktion war 0. In jedem Fall ist es die Syntax, die Sie mit jetzt stecken.

Eine abstrakte Klasse kann nicht mit einem objekt- instanziert werden, das ist, können Sie nicht ein Objekt aus einer abstrakten Klasse machen. Zum Beispiel ist die folgende Erklärung nicht zulässig:

Leere fn () {// ein Konto mit 100 dollarsAccount acnt erklären (1234, 100.00) - // diese legalacnt.withdrawal nicht (50) - // was würden Sie erwarten} // Dieser Aufruf zu tun?

Wird die Erklärung erlaubt würde, würde das resultierende Objekt unvollständig sein, in irgendeiner Fähigkeit fehlt. Zum Beispiel, was tun sollte die vorhergehenden Anruf? Denken Sie daran, es gibt keine Konto :: Rückzug ().

Abstrakte Klassen dienen als Basisklassen für andere Klassen. Ein Konto enthält alle Eigenschaften mit einem generischen Bankkonto verbunden. Sie können von anderen Arten von Bankkonten erstellen, indem Sie vererben Konto.

Der Fachbegriff ist zu instanziiert. Sie sagen, dass die Konto Klasse kann nicht mit einem Objekt oder ein bestimmtes Objekt instanziiert die instanziiert werden Ersparnisse Klasse.

Menü