Maison > développement back-end > Tutoriel C#.Net > Quelles sont les méthodes de surcharge d'opérateurs en C++ ?

Quelles sont les méthodes de surcharge d'opérateurs en C++ ?

hzc
Libérer: 2020-06-18 11:49:08
original
5075 Les gens l'ont consulté

Quelles sont les méthodes de surcharge d'opérateurs en C++ ?

Quels sont les moyens de surcharger les opérateurs en C++ ?

Il existe deux façons de surcharger les opérateurs :
1. symbol devient une fonction membre de cette classe. Cela permet aux fonctions d'opérateur d'accéder aux membres privés de la classe. Il permet également aux fonctions d'utiliser le paramètre implicite this pointer pour accéder à l'objet appelant.

2. Faites de la fonction membre surchargée une fonction indépendante. Lorsqu'elle est surchargée de cette manière, la fonction opérateur doit être déclarée amie de la classe afin d'accéder aux membres privés de la classe.
Certains opérateurs, tels que l'opérateur d'entrée de flux >> et l'opérateur de sortie de flux <<, doivent être surchargés en tant que fonctions indépendantes. D'autres opérateurs peuvent être surchargés soit en tant que fonctions membres, soit en tant que fonctions autonomes.
Supposons que le code de fonction surchargé indépendant suivant ait été écrit :

Length a(4, 2), b(1, 8), c (0);
c = a + b;
Copier après la connexion

Ce code sera interprété par le compilateur sous la forme suivante :

Length a(4, 2), b(1, 8), c(0);
c = operator+(a, b);
Copier après la connexion

Le compilateur permet au programmeur pour utiliser le curseur intermédiaire. Cependant, il traite l'opérateur comme une fonction ordinaire, dont le nom est Operator+, ce qui n'a pas une signification si évidente. Par exemple, considérons l'instruction suivante :

c = 2 + a;
Copier après la connexion

est équivalente à l'instruction suivante :

c = operator+(2, b);
Copier après la connexion

Les deux instructions se compilent et s'exécutent correctement grâce au constructeur de conversion de la classe Longueur. Un objet Longueur peut être créé à partir du paramètre entier 2.

Les opérateurs arithmétiques et relationnels peuvent être surchargés aussi facilement que les fonctions membres. Les méthodes de surcharge de l'opérateur d'addition sont les suivantes. Tout d'abord, modifiez la déclaration en classe pour que l'opérateur devienne une fonction membre :

class Length
{
    private:
        int len_inches;
    public:
        //修改operator+的声明
        Length operator+(Length b);
        //类的其余部分,省略
};
Copier après la connexion

Notez que l'opérateur est désormais déclaré comme un opérateur unique de type Longueur car en tant que fonction membre, l'opérateur est a automatiquement transmis un objet Longueur via le paramètre implicite this. Par exemple, si vous écrivez l'instruction suivante :

Length a(4, 2), b(1, 8), c(0);
c = a + b;
Copier après la connexion

alors le compilateur traitera cette instruction comme quelque chose de la forme :

Length a(4, 2), b(1, 8), c (0);
c = a.operator+ (b);
Copier après la connexion

Lors de l'écriture de a + b, l'opération + surchargée L'opérande gauche de l'opérateur devient l'objet permettant d'appeler la fonction membre et l'opérande droit devient un paramètre explicite. Parallèlement à ces changements, le corps de l'opérateur s'écrit sous la forme d'une instruction de la forme :

Length Length::operator+(Length b)
{
    return Length(this->len_inches + b.len_inches);
}
Copier après la connexion

En résumé, l'opérateur d'addition (ainsi que d'autres opérateurs arithmétiques et relationnels) peut être utilisé comme un fonction membre, peut également être surchargée en tant que fonction indépendante.
En général, il est préférable de surcharger les opérateurs binaires en tant que fonctions indépendantes qui prennent le même type de paramètres formels. En effet, contrairement à la surcharge des opérateurs autonomes, la surcharge des fonctions membres crée une distinction artificielle entre les deux paramètres en rendant le paramètre de gauche implicite, ce qui permettra au constructeur de conversion d'appliquer le paramètre de droite, mais le paramètre de gauche ne l'est pas. utilisé, ce qui entraîne une situation dans laquelle l'ordre des paramètres formels est modifié, entraînant une erreur du compilateur dans le programme correct s'il est modifié. Les exemples sont les suivants :

Length a(4, 2), c(0);
c = a + 2; //编译,当于 c = a.operator+ (2)
c = 2 + a; //不能编译:相当于 c = 2 .operator+ (a);
Copier après la connexion

Tutoriel recommandé : "c++"

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:
c++
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