Maison > développement back-end > C++ > le corps du texte

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

PHPz
Libérer: 2023-08-22 08:22:44
original
994 Les gens l'ont consulté

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

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

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

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal