Maison  >  Article  >  développement back-end  >  Pourquoi une variable membre ne peut-elle pas être utilisée comme argument par défaut dans une fonction membre C ?

Pourquoi une variable membre ne peut-elle pas être utilisée comme argument par défaut dans une fonction membre C ?

DDD
DDDoriginal
2024-11-14 17:00:02950parcourir

Why Can't a Member Variable Be Used as a Default Argument in a C   Member Function?

Utilisation d'une variable membre comme argument par défaut en C

En C, il est possible de spécifier un argument par défaut pour une fonction membre en utilisant un membre variable. Cependant, tenter d'utiliser une fonction membre comme argument par défaut peut entraîner une erreur de compilation, comme le montre l'exemple ci-dessous.

class Object {
protected:
   Point initPos;
   Point currPos;

   void MoveTo(double speed, Point position = initPos);
};

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

Ce code rencontrera l'erreur de compilation suivante :

error: invalid use of non-static data member 'Object::initPos'

Raison de l'erreur

Les expressions d'argument par défaut dans les fonctions membres sont limitées à l'utilisation d'éléments au sein de la classe ou à la portée globale. Ici, le compilateur ne peut pas déterminer la valeur de la variable membre initPos lorsque la fonction est appelée, ce qui entraîne l'erreur.

Solution

Pour résoudre ce problème, utilisez la fonction surcharge avec l'approche suivante :

// Single-argument overload that defaults to initPos
void Object::MoveTo(double speed) {
   MoveTo(speed, initPos);
}

// Two-argument overload that takes the explicit position
void Object::MoveTo(double speed, Point position) {
   // Implementation here
}

Avantages

Ceci La technique permet une gestion facultative des arguments dans les fonctions membres tout en conservant l’implémentation dans une seule méthode. Il suit le principe DRY (Don't Repeat Yourself) en évitant la duplication de code tout en offrant un moyen pratique de spécifier les valeurs par défaut.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn