Lors de la création d'une classe avec des méthodes qui prennent plusieurs arguments, il peut être avantageux de faire certains arguments sont facultatifs. En utilisant la fonctionnalité d'argument par défaut, vous pouvez définir une valeur par défaut pour un argument qui peut être utilisée lorsqu'aucune valeur n'est fournie par le code client.
Dans votre cas, vous avez tenté d'utiliser une variable membre (initPos) comme argument par défaut pour votre fonction membre MoveTo. Cependant, le compilateur a émis une erreur indiquant une utilisation non valide d'une donnée membre non statique.
Les variables membres ne sont pas accessibles par défaut dans la portée de la méthode, car elles sont considérées comme faisant partie de l'état de l'objet et non du contexte de la méthode. Par conséquent, par défaut, les arguments dans les fonctions membres ne peuvent dépendre que d'éléments de portée globale ou en classe.
Pour résoudre ce problème, vous devez recourir à la surcharge de méthode. . La surcharge de méthode vous permet de créer plusieurs versions de la même méthode avec des signatures différentes. Voici comment l'implémenter dans votre 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. }
En définissant deux versions de la méthode MoveTo, vous pouvez effectivement fournir un argument par défaut sans vous appuyer directement sur la variable membre. La méthode MoveTo(double) appelle la méthode MoveTo(double, Point) avec la valeur initPos comme deuxième argument, vous permettant de conserver la fonctionnalité souhaitée et d'éviter les erreurs du compilateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!