Heim > Artikel > Backend-Entwicklung > Warum kann eine Mitgliedsvariable nicht als Standardargument in einer C-Mitgliedsfunktion verwendet werden?
Verwenden einer Mitgliedsvariablen als Standardargument in C
In C ist es möglich, mithilfe eines Mitglieds ein Standardargument für eine Mitgliedsfunktion anzugeben Variable. Der Versuch, eine Mitgliedsfunktion als Standardargument zu verwenden, kann jedoch zu einem Compilerfehler führen, wie im folgenden Beispiel zu sehen ist.
class Object { protected: Point initPos; Point currPos; void MoveTo(double speed, Point position = initPos); }; void Object::MoveTo(double speed, Point position) { currPos = postion; }
Bei diesem Code tritt der folgende Kompilierungsfehler auf:
error: invalid use of non-static data member 'Object::initPos'
Grund für den Fehler
Standardargumentausdrücke in Mitgliedsfunktionen sind auf die Verwendung von Elementen innerhalb der Klasse oder im globalen Bereich beschränkt. Hier kann der Compiler den Wert der Mitgliedsvariablen initPos beim Aufruf der Funktion nicht ermitteln, was zu dem Fehler führt.
Lösung
Um dieses Problem zu beheben, verwenden Sie die Funktion Überladen mit dem folgenden Ansatz:
// Single-argument overload that defaults to initPos void Object::MoveTo(double speed) { MoveTo(speed, initPos); } // Two-argument overload that takes the explicit position void Object::MoveTo(double speed, Point position) { // Implementation here }
Vorteile
Diese Technik ermöglicht die optionale Argumentbehandlung in Mitgliedsfunktionen und behält gleichzeitig die Implementierung in einer einzigen Methode bei. Es folgt dem DRY-Prinzip (Don't Repeat Yourself), indem es Codeduplizierungen vermeidet und gleichzeitig eine bequeme Möglichkeit bietet, Standardwerte anzugeben.
Das obige ist der detaillierte Inhalt vonWarum kann eine Mitgliedsvariable nicht als Standardargument in einer C-Mitgliedsfunktion verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!