Heim >Backend-Entwicklung >C++ >Kann ich Mitgliedsvariablen als Standardargumente in C-Methoden verwenden?
Beim Erstellen einer Klasse mit Methoden, die mehrere Argumente akzeptieren, kann es von Vorteil sein, diese zu erstellen einige Argumente optional. Mithilfe der Standardargumentfunktion können Sie einen Standardwert für ein Argument festlegen, das verwendet werden kann, wenn vom Clientcode kein Wert bereitgestellt wird.
In Ihrem Fall haben Sie versucht, eine Mitgliedsvariable (initPos) als Standardargument für Ihre MoveTo-Mitgliedsfunktion zu verwenden. Der Compiler gab jedoch einen Fehler aus, der auf eine ungültige Verwendung eines nicht statischen Datenelements hinweist.
Auf Elementvariablen kann im Gültigkeitsbereich der Methode standardmäßig nicht zugegriffen werden, da sie als Teil betrachtet werden vom Zustand des Objekts und nicht vom Kontext der Methode. Daher können Argumente in Mitgliedsfunktionen standardmäßig nur von klasseninternen oder globalen Bereichselementen abhängen.
Um dieses Problem zu beheben, müssen Sie auf Methodenüberladung zurückgreifen . Durch das Überladen von Methoden können Sie mehrere Versionen derselben Methode mit unterschiedlichen Signaturen erstellen. So implementieren Sie es in Ihrem Code:
// Object.h class Object { public: ... void MoveTo(double speed); void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; };
// Object.c void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Everything is done here. }
Durch die Definition zweier Versionen der MoveTo-Methode können Sie effektiv ein Standardargument bereitstellen, ohne sich direkt auf die Mitgliedsvariable zu verlassen. Die MoveTo(double)-Methode ruft die MoveTo(double, Point)-Methode mit dem initPos-Wert als zweitem Argument auf, sodass Sie die gewünschte Funktionalität beibehalten und Compilerfehler vermeiden können.
Das obige ist der detaillierte Inhalt vonKann ich Mitgliedsvariablen als Standardargumente in C-Methoden verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!