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!