Heim > Backend-Entwicklung > C++ > Wie kann ich die virtuelle Funktion einer Basisklasse aus einer abgeleiteten Klasse in C aufrufen?

Wie kann ich die virtuelle Funktion einer Basisklasse aus einer abgeleiteten Klasse in C aufrufen?

Barbara Streisand
Freigeben: 2024-12-13 02:28:09
Original
910 Leute haben es durchsucht

How Can I Call a Base Class's Virtual Function from a Derived Class in C  ?

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;
    }
};
Nach dem Login kopieren

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
  }
};
Nach dem Login kopieren

In dieser Syntax:

  • Override ist optional, wird aber empfohlen, um dem Compiler dabei zu helfen, das ordnungsgemäße Überschreiben sicherzustellen.
  • Foo::printStuff() ruft explizit die Funktion der Basisklasse auf.

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage