Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann eine Mitgliedsvariable nicht als Standardargument in einer C-Mitgliedsfunktion verwendet werden?

Warum kann eine Mitgliedsvariable nicht als Standardargument in einer C-Mitgliedsfunktion verwendet werden?

DDD
DDDOriginal
2024-11-14 17:00:02950Durchsuche

Why Can't a Member Variable Be Used as a Default Argument in a C   Member Function?

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!

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