Heim >Backend-Entwicklung >C++ >Wie rufe ich die virtuelle Funktion einer Basisklasse in C auf, nachdem ich sie überschrieben habe?
Aufrufen der virtuellen Funktion einer Basisklasse in C nach dem Überschreiben
In der Softwareentwicklung kommt es häufig vor, dass Sie auf Szenarien stoßen, in denen Sie eine Basis aufrufen müssen Die Funktion einer Klasse kann von einer abgeleiteten Klasse abgeleitet werden, auch wenn Sie diese Funktion überschrieben haben. In C können Sie im Gegensatz zu Java keine einfache super.funcname()-Syntax verwenden, um dies zu erreichen.
Bedenken Sie den folgenden Codeausschnitt:
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; } };
In diesem Beispiel erbt Bar von Foo und überschreibt die Funktion printStuff(). In bestimmten Kontexten möchten Sie jedoch möglicherweise die ursprüngliche Funktionalität von Foo::printStuff() beibehalten.
Um die printStuff()-Funktion der Basisklasse in C aufzurufen, müssen Sie die Basisklasse explizit mit dem :: benennen Operator. So geht's:
class Bar : public Foo { // ... void printStuff() override { // help the compiler to check Foo::printStuff(); // calls base class' function } };
In diesem modifizierten Code wird die Basisklassenfunktion Foo::printStuff() innerhalb der überschriebenen Funktion Bar::printStuff() aufgerufen. Das Schlüsselwort override hilft dem Compiler zu überprüfen, ob die Funktion tatsächlich eine Basisklassenfunktion überschreibt.
Durch den expliziten Aufruf der Basisklassenfunktion erhalten Sie die Flexibilität, sowohl die Basis- als auch die abgeleitete Klassenimplementierung von printStuff() zu verwenden. Dies kann in verschiedenen Szenarien nützlich sein, z. B. beim Aufrufen der ursprünglichen Funktion, um allgemeine Aufgaben vor oder nach der überschriebenen Implementierung auszuführen.
Das obige ist der detaillierte Inhalt vonWie rufe ich die virtuelle Funktion einer Basisklasse in C auf, nachdem ich sie überschrieben habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!