Abstrakte Klassen in C ++

Abstrakte Klassen in C ++ - Dummies

So intellektuell befriedigend das Factoring in C ++ ist, führt es doch zu einem eigenen Problem. In einem Beispiel über Bankkontoklassen, insbesondere die gemeinsame Basisklasse Account. Denken Sie eine Minute darüber nach, wie Sie die verschiedenen Mitgliedsfunktionen definieren können, die in Account definiert sind.

Die meisten Konto -Mitgliedfunktionen sind kein Problem, da beide Kontotypen sie auf die gleiche Weise implementieren. Die Implementierung dieser allgemeinen Funktionen mit Account :: Rückzug () ist jedoch unterschiedlich.

Die Regeln für die Abhebung von einem Sparkonto unterscheiden sich von denen für die Abhebung von einem Girokonto. Sie müssen Sparungen:: Rückzug () anders implementieren als Sie selbst. Prüfung:: Rückzug () . Aber wie solltest du Account implementieren:: Rückzug ()?

Fragen wir den Bankmanager um Hilfe. Die Konversation könnte ungefähr so ​​lauten:

"Wie lauten die Regeln für eine Auszahlung von einem Konto? " du fragst.

"Welcher Konto-Typ? Einsparungen oder Kontrolle? "Kommt die Antwort.

"Von einem Konto", sagst du. "Nur ein Konto. "

Blanker Blick.

Das Problem ist, dass die Frage keinen Sinn ergibt. Es gibt keine "nur ein Konto". "Alle Konten (in diesem Beispiel) sind entweder Girokonten oder Sparkonten. Das Konzept eines Kontos ist ein abstrakter Begriff, der die Eigenschaften der beiden konkreten Klassen berücksichtigt.

Es ist unvollständig, weil ihm die kritische Eigenschaft Entzug () fehlt. (Nachdem Sie sich näher mit den Details befasst haben, finden Sie möglicherweise andere Eigenschaften, die einem einfachen Konto fehlen.)

Eine abstrakte Klasse ist eine, die nur in Unterklassen existiert. Eine konkrete Klasse ist eine Klasse, die nicht abstrakt ist.