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 ?

Pourquoi ne puis-je pas utiliser les variables membres comme arguments par défaut dans les fonctions membres C ?

Linda Hamilton
Libérer: 2024-11-10 10:23:02
original
676 Les gens l'ont consulté

Why Can't I Use Member Variables as Default Arguments in C   Member Functions?

Utilisation des variables membres comme arguments par défaut en 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;
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal