Heim > Backend-Entwicklung > C++ > Erben Standardparameter in virtuellen Funktionen an abgeleitete Klassen?

Erben Standardparameter in virtuellen Funktionen an abgeleitete Klassen?

Barbara Streisand
Freigeben: 2024-11-26 14:15:11
Original
166 Leute haben es durchsucht

Do Default Parameters in Virtual Functions Inherit to Derived Classes?

Können virtuelle Funktionen Standardparameter haben?

Problem:

Bei der Deklaration einer virtuellen Funktion Erben abgeleitete Klassen mit Standardparametern in einer Basisklasse diese? Standardwerte?

Antwort:

Nein, Standardwerte in virtuellen Funktionen werden nicht von abgeleiteten Klassen geerbt. Der verwendete Standard wird durch den statischen Typ des Objekts beim Aufruf der Funktion bestimmt.

Erklärung:

Die C-Standards (C 03 und C 11) legen dies fest Virtuelle Funktionsaufrufe verwenden die in der Funktionsdefinition deklarierten Standardargumente, die durch den statischen Typ des Zeigers oder der Referenz bestimmt werden, die zum Aufrufen verwendet wird Funktion.

Beispiel:

Betrachten Sie den folgenden Code:

struct Base {
  virtual void f(int a = 7);
};
struct Der : public Base {
  void f(int a);
};
Nach dem Login kopieren

Wenn Sie f() über einen Zeiger auf ein Basisobjekt aufrufen, wird die Standard 7 wird verwendet:

Base* pb = new Base;
pb->f(); // uses the default 7
Nach dem Login kopieren

Wenn jedoch f() über einen Zeiger auf ein Der-Objekt aufgerufen wird, wird das abgeleitete Der Standardwert der Klasse wird nicht verwendet:

Der* pd = new Der;
pd->f(); // error: no default argument for this function
Nach dem Login kopieren

Überlegungen zur Praxis und zum Compiler:

Während die C-Standards das Verhalten vorschreiben, implementieren einige Compiler möglicherweise die Standardparameter virtueller Funktionen anders . Es wird jedoch empfohlen, die Richtlinien des Standards zu befolgen, um ein konsistentes Verhalten über alle Compiler hinweg sicherzustellen.

Code-Demonstration:

Der folgende Code demonstriert das Standardparameterverhalten:

struct Base { virtual string Speak(int n = 42); };
struct Der : public Base { string Speak(int n = 84); };

int main()
{
    Base b1;
    Der d1;

    Base *pb1 = &b1, *pb2 = &d1;
    Der *pd1 = &d1;
    cout << pb1->Speak() << "\n" // Base 42
         << pb2->Speak() << "\n" // Der 42
         << pd1->Speak() << "\n" // Der 84
         << endl;
}
Nach dem Login kopieren

Ausgabe:

Base 42
Der 42
Der 84
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonErben Standardparameter in virtuellen Funktionen an abgeleitete Klassen?. 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