Maison >développement back-end >C++ >Erreur de syntaxe C++ : les opérateurs surchargés doivent être des fonctions membres. Comment la corriger ?

Erreur de syntaxe C++ : les opérateurs surchargés doivent être des fonctions membres. Comment la corriger ?

PHPz
PHPzoriginal
2023-08-22 08:22:441028parcourir

C++ est un langage de programmation populaire doté de puissantes capacités de programmation orientée objet. Lors de la programmation en C++, vous pouvez parfois rencontrer des erreurs de syntaxe. Cet article traite d'une erreur courante : « L'opérateur surchargé doit être une fonction membre » et fournit une solution pour résoudre le problème.

En C++, les opérateurs peuvent être surchargés pour effectuer diverses opérations à l'aide d'objets de classes personnalisées. Par exemple, l'opérateur « + » peut être surchargé pour implémenter l'addition entre deux objets de classe personnalisés. La surcharge des opérateurs peut être implémentée via des fonctions membres ou des fonctions globales.

Lorsque nous déclarons une fonction surchargée d'opérateur, nous devons préciser s'il s'agit d'une fonction membre ou d'une fonction globale. Si vous utilisez des fonctions membres, la fonction surchargée d’opérateur doit devenir une fonction membre de la classe. Cependant, nous pouvons parfois utiliser une fonction non membre pour la surcharge d'opérateur, et nous recevrons alors le message d'erreur « L'opérateur surchargé doit être une fonction membre ».

Pour résoudre cette erreur, nous pouvons convertir la fonction surchargée d'opérateur en fonction membre de la classe.

Supposons que nous souhaitions surcharger l'opérateur "+" pour implémenter l'opération d'addition entre deux objets de classe personnalisés. Notre classe s'appelle "Number" et possède deux variables membres privées num1 et num2. Nous pouvons déclarer une fonction d'opérateur surchargée en utilisant le code suivant :

Number operator+(const Number& num1, const Number& num2) {
  Number sum;
  sum.num1 = num1.num1 + num2.num1;
  sum.num2 = num1.num2 + num2.num2;
  return sum;
}

Dans ce code, nous utilisons une fonction globale pour surcharger l'opérateur "+". C'est faux car nous devons le convertir en fonction membre. Pour ce faire, nous devons le déclarer comme fonction membre de la classe Number et utiliser l'opérateur "+" comme nom de fonction. Le code modifié ressemble à ceci :

class Number {
public:
  Number operator+(const Number& num) {
    Number sum;
    sum.num1 = num1 + num.num1;
    sum.num2 = num2 + num.num2;
    return sum;
  }
  
private:
  int num1;
  int num2;
};

Dans ce code modifié, nous déclarons la fonction surchargée d'opérateur comme fonction membre de la classe Number et utilisons l'opérateur "+" comme nom de fonction. Maintenant, nous pouvons utiliser le code suivant pour effectuer une addition entre deux objets Number :

Number num1;
num1.num1 = 1;
num1.num2 = 2;

Number num2;
num2.num1 = 3;
num2.num2 = 4;

Number sum = num1 + num2;

De cette façon, nous pouvons réussir à surcharger l'opérateur "+" et effectuer une addition entre deux objets Number.

En bref, en C++, les opérateurs surchargés doivent être implémentés à l'aide de fonctions membres. Si une fonction non membre est utilisée pour implémenter la surcharge d'opérateur dans le code actuel, pour corriger ce problème, nous pouvons la convertir en fonction membre, déclarer la fonction comme fonction membre de la classe et utiliser l'opérateur comme nom de fonction. .

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