Heim >Backend-Entwicklung >C++ >Warum kann ich Membervariablen nicht als Standardargumente in C-Memberfunktionen verwenden?

Warum kann ich Membervariablen nicht als Standardargumente in C-Memberfunktionen verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-11-10 10:23:02678Durchsuche

Why Can't I Use Member Variables as Default Arguments in C   Member Functions?

Verwenden von Mitgliedsvariablen als Standardargumente in C

In der objektorientierten Programmierung dienen Mitgliedsvariablen häufig als Standardwerte für Methodenargumente. Wenn Sie jedoch versuchen, eine Mitgliedsvariable als Standardargument festzulegen, können Fehler wie „ungültige Verwendung eines nicht-statischen Datenmitglieds“ auftreten.

Problembeschreibung

Sie möchten ein Argument einer Mitgliedsfunktion optional machen und eine Mitgliedsvariable als Standardwert verwenden, wenn kein Argument angegeben wird. Ihr Code erzeugt jedoch die Fehlermeldung „ungültige Verwendung eines nicht statischen Datenelements“. Sie vermuten ein Problem mit Ihrem Code, sind sich aber über die Lösung nicht sicher.

Codeausschnitt

Unten finden Sie den bereitgestellten Code zur Veranschaulichung des Problems:

class Object {
public:
    void MoveTo(double speed, Point position);
protected:
    Point initPos; 
    Point currPos;
};

void Object::MoveTo(double speed, Point position = initPos) {
    currPos = postion;
}

Lösung

Standardargumentausdrücke für Mitgliedsfunktionen können sich nur auf Elemente innerhalb der Klasse oder des globalen Bereichs stützen. Darüber hinaus muss das Standardargument in der Deklaration der Methode (Header-Datei) definiert werden.

Um dieses Problem zu beheben, verwenden Sie zwei Überladungen der MoveTo-Methode: eine mit einem einzelnen Argument und eine mit zwei Argumenten. Die Methode mit dem einzelnen Argument ruft die Methode mit den beiden Argumenten auf und übergibt den beabsichtigten Standardwert.

void Object::MoveTo(double speed) {
    MoveTo(speed, initPos);
}

void Object::MoveTo(double speed, Point position) {
    // Implementation
}

Durch den Aufruf von MoveTo(double) und den anschließenden Aufruf von MoveTo(double, Point) ermöglicht Ihnen diese Technik Folgendes Implementieren Sie MoveTo nur einmal und folgen Sie dabei dem DRY-Prinzip (Don't Repeat Yourself).

Das obige ist der detaillierte Inhalt vonWarum kann ich Membervariablen nicht als Standardargumente in C-Memberfunktionen verwenden?. 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