Maison >développement back-end >C++ >Pourquoi ne puis-je pas utiliser les variables membres comme arguments par défaut dans les fonctions membres C ?
Dans la programmation orientée objet, les variables membres servent souvent de valeurs par défaut pour les arguments de méthode. Cependant, lorsque vous essayez de définir une variable membre comme argument par défaut, vous pouvez rencontrer des erreurs telles que « Utilisation non valide d'un membre de données non statique ».
Description du problème
Votre objectif est de rendre facultatif un argument d’une fonction membre, en utilisant une variable membre comme valeur par défaut lorsqu’aucun argument n’est fourni. Cependant, votre code génère le message d’erreur « utilisation non valide de données membres non statiques ». Vous soupçonnez un problème avec votre code mais vous n'êtes pas sûr de la solution.
Extrait de code
Vous trouverez ci-dessous le code fourni pour illustrer le problème :
class Object { public: void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; }; void Object::MoveTo(double speed, Point position = initPos) { currPos = postion; }
Solution
Les expressions d'argument par défaut pour les fonctions membres ne peuvent s'appuyer que sur des éléments de la classe ou de la portée globale. De plus, l'argument par défaut doit être défini dans la déclaration de la méthode (fichier d'en-tête).
Pour résoudre ce problème, utilisez deux surcharges de la méthode MoveTo : une avec un seul argument et une avec deux arguments. La méthode avec un seul argument appelle la méthode avec les deux arguments, en passant la valeur par défaut prévue.
void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Implementation }
En appelant MoveTo(double) puis en appelant MoveTo(double, Point), cette technique vous permet de implémentez MoveTo une seule fois, en suivant le principe DRY (Don't Repeat Yourself).
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!