Utilisation de variables membres comme arguments par défaut en C
En C, vous pouvez rencontrer le besoin de rendre facultatifs les arguments des fonctions membres. Lorsqu'aucun argument n'est fourni, il serait préférable d'utiliser une variable membre par défaut.
Considérons l'exemple suivant :
class Object { ... void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; };
Le code tente d'attribuer la variable membre initPos comme valeur par défaut du paramètre position dans la fonction MoveTo :
void Object::MoveTo(double speed, Point position = initPos) { currPos = postion; }
Cependant, cette approche aboutit à une compilation error :
error: invalid use of non-static data member 'Object::initPos'
Le problème est que les expressions d'argument par défaut pour les fonctions membres doivent s'appuyer uniquement sur des éléments de classe ou de portée globale. De plus, l'argument par défaut doit être défini dans la déclaration de la méthode dans le fichier d'en-tête.
Pour résoudre ce problème, deux surcharges de la méthode MoveTo peuvent être créées :
void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Implementation here. }
La méthode MoveTo qui prend un seul argument appelle la méthode MoveTo avec deux arguments, en passant la valeur initPos par défaut.
Object object; object.MoveTo(10.0); // Calls MoveTo(10.0, initPos)
Cette approche adhère au principe DRY en permettant de définir l'implémentation de MoveTo une seule fois.
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!