Virtuelle Funktionen und Standardparameterverwendung
In C ermöglichen virtuelle Funktionen abgeleiteten Klassen, ihre Basisklassenimplementierungen mit ihrem eigenen speziellen Verhalten zu überschreiben. Wenn es jedoch um Standardparameterwerte geht, unterscheiden sich die Vererbungsregeln von regulären Parametern.
Standardparameterwerte in Basisklassen
Virtuelle Funktionen können Standardparameterwerte haben in ihrer Basisklassendeklaration angegeben. Diese Standardwerte werden nicht von abgeleiteten Klassen geerbt. Stattdessen müssen abgeleitete Klassen ihre eigenen Standardwerte angeben oder diese ganz weglassen.
Standardparameterauswahl
Beim Aufrufen einer virtuellen Funktion über ein abgeleitetes Klassenobjekt der Standardparameter Die verwendeten Werte werden durch den statischen Typ des Zeigers oder der Referenz bestimmt, der zum Aufrufen der Funktion verwendet wird. Wenn der Aufruf über ein Basisklassenobjekt oder einen Zeiger erfolgt, werden die Standardwerte der Basisklasse verwendet. Wenn der Aufruf hingegen über ein abgeleitetes Klassenobjekt oder einen Zeiger erfolgt, werden die Standardwerte der abgeleiteten Klasse verwendet.
Beispiel
Betrachten Sie das folgende Beispiel:
struct Base { virtual void f(int a = 7); }; struct Derived : public Base { void f(int a = 9); };
Wenn wir f() über einen Base-Zeiger aufrufen, verwendet es den in Base definierten Standardwert, der 7 ist. Wenn wir jedoch aufrufen f() über einen Derived-Zeiger verwendet, wird der in Derived definierte Standardwert verwendet, der 9 ist.
Plattformübergreifende Überlegungen
Während C 03 und C 11 Standards legen das oben beschriebene Verhalten fest, verschiedene Compiler können die Vererbung von Standardparametern unterschiedlich handhaben. Es wird empfohlen, Standardparameterwerte immer explizit in abgeleiteten Klassen anzugeben, um mögliche Diskrepanzen zu vermeiden.
Fazit
Virtuelle Funktionen können Standardparameter haben, diese Standardwerte sind jedoch nicht vorhanden von abgeleiteten Klassen geerbt. Die in einem virtuellen Funktionsaufruf verwendeten Standardwerte werden durch den statischen Typ des Objekts bestimmt, über das die Funktion aufgerufen wurde, wodurch sichergestellt wird, dass abgeleitete Klassen ihr eigenes Standardverhalten nach Bedarf anpassen können.
Das obige ist der detaillierte Inhalt vonWie verhalten sich Standardparameterwerte in virtuellen C-Funktionen und Vererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!