Zuhause Persönliche Finanzen Abstrakte Klassen und C ++ - Dummies

Abstrakte Klassen und C ++ - Dummies

Video: [C++ von { bis }] 14 - Abstrakte Klassen 2025

Video: [C++ von { bis }] 14 - Abstrakte Klassen 2025
Anonim

C ++ unterstützt late binding , das ist, wenn es einen Methodenaufruf basierend auf der Laufzeit auflöst Typ (oder dynamischer Typ) des Zielobjekts anstelle seines deklarierten Typs (oder statischen Typs). Dies wird im folgenden C ++ - Code-Snippet veranschaulicht:

#include using namespace std; Klasse Ofen {public: virtual void cook () {cout << "Kochen mit Ofen" << endl;}}; Klasse MicrowaveOven: public Oven {public: virtueller void cook () {cout << "Kochen mit einer Mikrowelle" << endl;}}; Leere vorbereitenMahlzeit (Ofen & Ofen) {Backofen. cook ();}

In der Funktion prepareMeal () den Aufruf von oven. cook () kann an Oven:: cook () oder MicrowaveOven:: cook () übergeben werden, abhängig von der Laufzeit (dem "tatsächlichen") Typ des Ofenobjekts, das übergeben wurde.

Das virtuelle Schlüsselwort ist hier kritisch. Ohne sie würde die cook () -Methode auf Grundlage des Kompilierzeittyps früh gebunden werden und Oven:: cook () jedes Mal aufrufen. Einmal in der Klasse Oven als virtuell deklariert, wird angenommen, dass die Methode in jeder Unterklasse virtuell ist, aber es schadet nicht, die Deklaration zu wiederholen, damit die Leser sie verstehen.

Das folgende einfache Programm demonstriert dieses Prinzip in der Praxis:

int main () {Backofen; prepareMeal (Ofen); MikrowelleOfen mo; zubereitenMahl (mo); return 0;}

In diesem Programm erzeugt der Aufruf von cook () je nach Ofentyp zwei verschiedene Ausgänge:

Kochen mit einem Ofen Kochen mit einem Mikrowellenherd

Das ist nicht immer der Fall, dass eine Methode in der Basisklasse definiert werden kann. Betrachten Sie den Ofenfall genauer. Es gibt eine Reihe von verschiedenen Arten von Öfen - herkömmliche Öfen, Konvektionsöfen und Mikrowellenöfen - aber man könnte argumentieren, dass es keinen tatsächlichen Ofen gibt, der nicht zu einer dieser Unterklassen gehört. Sie können vielleicht sagen, wie die verschiedenen Ofentypen die Kochoperation ausführen - das heißt, was ein ConventionalOven:: cook () und ein MicrowaveOven:: cook () tun sollten, kann definiert werden. Es ist wahrscheinlich nicht möglich zu definieren, welche Aktionen Oven:: cook () ausführen soll.

Sie können nicht einfach Ofen:: cook () in einer stark typisierten Sprache wie C ++ nicht deklariert lassen. Sie können jedoch als deklarieren, aber nicht implementiert lassen , wenn keine Implementierung vorhanden ist. Dazu benutzt man die folgende merkwürdige Syntax:

class Oven {public: virtual void cook () = 0;};

Dieser Code deklariert eine Methode Oven:: cook (), die spät gebunden wird, aber die Methode nicht implementiert. In der Tat geht es weiter, indem er sagt, dass die Methode nicht implementiert wird. In C ++ wird ein solches Verfahren als reines virtuelles bezeichnet. C ++ - Programmierer verwenden auch den in vielen anderen stark typisierten Computersprachen bevorzugten Begriff: abstract .Die Ofenklasse soll abstrakt sein.

Eine Zusammenfassung stellt eine Eigenschaft dar, von der Sie wissen, dass sie über eine Klasse verfügt, aber nicht weiß, wie sie in der aktuellen Klasse eindeutig implementiert werden soll.

Eine Klasse ist abstrakt, wenn sie eine oder mehrere reine virtuelle Methoden enthält. Die Bedeutung davon ist, dass Sie keine abstrakte Klasse instanziieren können. Somit ist Folgendes nicht mehr erlaubt:

int main () {Backofen; prepareMeal (Ofen); return 0;}

Der Grund dafür ist ganz einfach: Wenn Sie ein Objekt der Klasse Ofen erstellt haben und dann versucht haben, den Ofen aufzurufen. cook (), was sollte der Compiler machen?

Auf einer eher philosophischen Ebene ist es gut zu sagen, dass es einen gebräuchlichen Begriff namens Ofen gibt, der konventionelle Öfen und Mikrowellenherde und Konvektionsöfen beschreibt. Dieser Begriff Ofen ist ein übliches Konzept, weil er die Ähnlichkeiten in all diesen Unterklassen verbindet. Aber es gibt keinen Fall eines Ofens, der nicht eine der Unterklassen von Oven ist.

Eine Unterklasse einer abstrakten Klasse ist selbst abstrakt, bis alle reinen virtuellen Methoden durch nicht abstrakte (dh konkrete ) Versionen außer Kraft gesetzt wurden. Somit ist die Klasse MicrowaveOven im vorherigen Code-Snippet nicht abstrakt - selbst wenn Oven abstrakt wäre - weil sie cook () mit einer eigenen konkreten Version überschreibt.

Beachten Sie, dass nichts falsch mit der Funktion prepareMeal () ist, die wie folgt definiert ist:

void prepareMeal (Ofen & Ofen) {oven. cook ();}

Obwohl das Argument als Ofen deklariert ist, kann es nur mit einer Unterklasse des Ofens aufgerufen werden, z. B. MicrowaveOven oder ConventionalOven, für die cook () definiert ist.

Abstrakte Klassen und C ++ - Dummies

Die Wahl des Herausgebers

ÜBen Mathe-Fragen für die Praxis: Sequenzen - Dummies

ÜBen Mathe-Fragen für die Praxis: Sequenzen - Dummies

Wenn Sie eine Frage zur Praxis Core-Prüfung beantworten Wenn Sie eine arithmetische oder geometrische Sequenz lösen müssen, denken Sie daran: Es geht darum, regelmäßige Muster zu finden - und manchmal rückwärts zu arbeiten. In den folgenden Übungsfragen fängst du damit an, einen bestimmten Begriff in einer Folge zu finden (einfach: suche einfach nach dem Unterschied zwischen jedem ...

ÜBen Mathematische Fragen für die Praxis: Ähnliche und kongruente Formen - Dummies

ÜBen Mathematische Fragen für die Praxis: Ähnliche und kongruente Formen - Dummies

Auch wenn zwei Formen aussehen identisch, können sie nicht sein. Zum Beispiel können Sie bei der Praxis Core-Prüfung auf eine Frage stoßen, bei der zwei Formen gleich aussehen, aber es wird Ihnen gesagt, sie seien "ähnlich". " Was bedeutet das? Was ist, wenn sie als "kongruent" gekennzeichnet sind? Wenn Sie sich nicht sicher sind, sollten die folgenden Übungsfragen (und ihre Erklärungen) ...

ÜBen Mathematische Fragen für die Praxis: Vereinfachen eines algebraischen Ausdrucks - Dummys

ÜBen Mathematische Fragen für die Praxis: Vereinfachen eines algebraischen Ausdrucks - Dummys

Einige algebraische Ausdrücke auf der Praxis Core Prüfung kann einschüchternd aussehen, und Sie können sogar auf sie aufgeben und weitermachen. Wie Sie in den folgenden Übungsfragen sehen werden, können Sie jedoch einige einfache Techniken verwenden, wie das Faktorisieren und Kombinieren von ähnlichen Begriffen, um sie zu lösen. Übungsfragen Welche der folgenden ist die vereinfachte ...

Die Wahl des Herausgebers

Fotografieren im Sportmodus mit einer Canon EOS Rebel T3-Kamera - Dummies

Fotografieren im Sportmodus mit einer Canon EOS Rebel T3-Kamera - Dummies

Der Sportmodus der Canon Rebel T3 und T3i führt zu einer Reihe von Einstellungen, mit denen Sie sich bewegende Motive fotografieren können. Zunächst wählt die Kamera eine kurze Verschlusszeit aus, die zum Stoppen der Bewegung benötigt wird. "Farben, Schärfe und Kontrast sind alle im Sportmodus Standard, wobei keine der Anpassungen im Portrait ...

Aufnahme von Bildern im Nahaufnahmemodus mit einer Canon EOS Rebel T3-Kamera

Aufnahme von Bildern im Nahaufnahmemodus mit einer Canon EOS Rebel T3-Kamera

Der Nahaufnahme-Modus der Canon Rebel T3 und T3i ermöglicht es Ihnen nicht, näher am Motiv zu fokussieren als bei einigen Nicht-Spiegelreflexkameras. Die Nahfokussierungsfähigkeiten Ihrer Kamera hängen ganz von der Linse ab, die Sie verwenden. (In der Bedienungsanleitung Ihres Objektivs sollte die minimale Fokussierentfernung angegeben werden.) Auswahl des Nahaufnahmemodus ...

Fotografieren im Querformat mit einer Canon EOS Rebel T3-Kamera - Dummies

Fotografieren im Querformat mit einer Canon EOS Rebel T3-Kamera - Dummies

Der Landschaftsmodus der Canon Rebel T3 und T3i, der für die Aufnahme von Aussichtspunkten, Stadtskylinen und anderen großformatigen Motiven konzipiert wurde, erzeugt eine große Schärfentiefe. Infolgedessen erscheinen Objekte, die sich sowohl in der Nähe der Kamera als auch in einiger Entfernung befinden, scharf fokussiert. Wie im Hochformat-Modus erreicht der Querformat-Modus die größere Schärfentiefe durch Manipulieren von ...

Die Wahl des Herausgebers

Erstellen und Verwenden von Verknüpfungen im dynamischen GP-Navigationsbereich - Dummies

Erstellen und Verwenden von Verknüpfungen im dynamischen GP-Navigationsbereich - Dummies

Microsoft Dynamics GP-Verknüpfungen werden angezeigt. Der obere Teil des Navigationsfensters, wenn Sie Ihre Dynamics GP Homepage anzeigen. Verwenden Sie Verknüpfungen, um häufig verwendete Fenster und Ressourcen in Dynamics GP schnell zu öffnen. Zum Beispiel können Sie einen Satz von Verknüpfungen zu den Fenstern erstellen, die Sie regelmäßig verwenden, und einen anderen Satz für die ...

MYOB Software für Dummies-Spickzettel (Neuseeland-Ausgabe) - Dummies

MYOB Software für Dummies-Spickzettel (Neuseeland-Ausgabe) - Dummies

Sie können MYOB verwenden für Ihre Geschäftsanforderungen schnell und einfach durch diese einfachen Verknüpfungen. Wenn Sie zusätzliche Hilfe benötigen, bieten viele Websites MYOB-Unterstützung an.

MYOB Software für Dummies Cheat Sheet (Australische Ausgabe) - Dummies

MYOB Software für Dummies Cheat Sheet (Australische Ausgabe) - Dummies

Mit MYOB für Ihre Unternehmensanforderungen kann durch diese einfachen Abkürzungen noch schneller und einfacher gemacht werden. Und wenn Sie Hilfe benötigen, gibt es viele Websites, die Unterstützung anbieten.