Heim >Backend-Entwicklung >C++ >Wie kann ich die virtuelle Funktion einer Basisklasse aus einer abgeleiteten Klasse in C aufrufen?
Aufrufen virtueller Funktionen der Basisklasse trotz Überschreibung in C
In der objektorientierten Programmierung kommt es häufig vor, dass abgeleitete Klassen virtuelle Funktionen überschreiben ihre Basisklassen. Es können jedoch Situationen auftreten, in denen die abgeleitete Klasse Zugriff auf die überschriebene Funktion benötigt.
Betrachten Sie den folgenden C-Code:
class Foo { public: int x; virtual void printStuff() { std::cout << x << std::endl; } }; class Bar : public Foo { public: int y; void printStuff() { // I would like to call Foo.printStuff() here... std::cout << y << std::endl; } };
Im obigen Beispiel überschreibt die Bar-Klasse die printStuff-Funktion. Möglicherweise muss jedoch auch auf die Basisklassenversion zugegriffen werden.
Java's Super vs. C Syntax
In Java ermöglicht die super.funcname()-Syntax abgeleiteten Klassen, Basisklassenmethoden aufzurufen. C erfordert jedoch einen anderen Ansatz. Um die überschriebene Basisklassenfunktion aufzurufen, verwenden Sie die folgende Syntax:
class Bar : public Foo { // ... void printStuff() override { // help the compiler to check Foo::printStuff(); // calls base class' function } };
In dieser Syntax:
Dies explizit Die Benennung ist notwendig, da C im Gegensatz zu Java Mehrfachvererbung zulässt. Daher muss der Compiler wissen, welche Basisklassenmethode beim Überschreiben aufgerufen werden soll.
Beispielverwendung
Um zum ursprünglichen Code zurückzukehren, ermöglicht die folgende Änderung Bar: :printStuff(), um sowohl auf das eigene Datenelement y als auch auf das Basisklassen-Datenelement x zuzugreifen:
void printStuff() override { Foo::printStuff(); std::cout << y << std::endl; }
Diese verbesserte Version von printStuff gibt den x-Wert der Basisklasse aus, gefolgt vom y-Wert der abgeleiteten Klasse, und stellt so die gewünschte Funktionalität bereit.
Das obige ist der detaillierte Inhalt vonWie kann ich die virtuelle Funktion einer Basisklasse aus einer abgeleiteten Klasse in C aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!