Heim  >  Artikel  >  Backend-Entwicklung  >  Erben abgeleitete Klassen Standardparameter in virtuellen Funktionen?

Erben abgeleitete Klassen Standardparameter in virtuellen Funktionen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-23 09:58:09283Durchsuche

Do Derived Classes Inherit Default Parameters in Virtual Functions?

Virtuelle Funktionen mit Standardparametern

Virtuelle Funktionen werden häufig in der objektorientierten Programmierung für Polymorphismus verwendet. Sie können Standardparameterwerte haben, und es stellt sich die Frage, ob abgeleitete Klassen diese Standardwerte erben oder ihre eigenen angeben.

Erben abgeleitete Klassen Standardwerte?

Gemäß der Abgeleitete C-Standardklassen erben nicht die Standardwerte virtueller Funktionen von der Basisklasse.

Welche Standardwert wird verwendet?

Der in einem virtuellen Funktionsaufruf verwendete Standardwert hängt vom statischen Typ des aufgerufenen Objekts ab. Wenn Sie eine virtuelle Funktion über ein Basisklassenobjekt oder eine Referenz aufrufen, wird der Standardwert der Basisklasse verwendet. Wenn Sie jedoch über ein abgeleitetes Klassenobjekt oder eine Referenz aufrufen, wird der Standardwert der abgeleiteten Klasse verwendet.

Compilerverhalten und empfohlene Vorgehensweisen

Unterschiedliche Compiler können Behandeln Sie die Standardeinstellungen virtueller Funktionen anders. Der C-Standard schreibt jedoch vor, dass die Standardwerte nicht vererbt werden und explizit in abgeleiteten Klassen angegeben werden sollten.

Beispiel

Betrachten Sie das folgende Beispiel:

struct Base {
  virtual void f(int a = 7);
};
struct Derived : public Base {
  void f(int a);
};

In diesem Beispiel erbt die f-Funktion in der abgeleiteten Klasse nicht den Standardwert 7 von der Basisklasse. Wenn f über ein abgeleitetes Klassenobjekt aufgerufen wird, sollte der Aufruf das Argument explizit angeben, wie unten gezeigt:

Derived d;
d.f(10); // Call `Derived::f(int a)` with a = 10

Schlussfolgerung

Während virtuelle Funktionen Standardparameter haben können , werden diese Standardwerte nicht von abgeleiteten Klassen geerbt. Der verwendete Standardwert hängt vom statischen Typ des aufgerufenen Objekts ab. Das Befolgen der Empfehlungen des C-Standards und die explizite Angabe von Standardwerten in abgeleiteten Klassen gilt als bewährte Vorgehensweise.

Das obige ist der detaillierte Inhalt vonErben abgeleitete Klassen Standardparameter in virtuellen Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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