Maison > développement back-end > C++ > La relation entre les fonctions amies C++ et la surcharge

La relation entre les fonctions amies C++ et la surcharge

WBOY
Libérer: 2024-04-16 11:06:02
original
508 Les gens l'ont consulté

Oui, les fonctions amies peuvent être surchargées. Comme d'autres fonctions, les fonctions amies surchargées doivent avoir des listes de paramètres différentes, comme la classe Vector3D dans l'exemple, qui a des fonctions amies surchargées opérateur+() et opérateur -(), permettant l'addition et la soustraction. opérateurs à appliquer aux objets Vector3D.

C++ 友元函数与重载的关系

La relation entre les fonctions amies et la surcharge en C++

Fonctions amies

Une fonction amie est un type spécial de fonction qui peut accéder aux membres privés d'autres classes. En d’autres termes, ce n’est pas une fonction membre de la classe, mais dispose des mêmes droits d’accès qu’une fonction membre.

Définir des fonctions amies :

class ClassName {
  // ...

  friend function_name();
};
Copier après la connexion

Surcharge

La surcharge est la possibilité de créer plusieurs fonctions avec le même nom mais des listes de paramètres différentes dans la même portée. Cela signifie que lorsqu'une fonction surchargée est appelée, le compilateur déterminera quelle fonction appeler en fonction des arguments.

Interaction entre les fonctions amies et surcharge

Les fonctions amies peuvent être surchargées. Comme les autres fonctions, les fonctions amies surchargées doivent avoir des listes de paramètres différentes.

Cas pratique

Exemple de classe :

class Vector3D {
  double x, y, z;

public:
  Vector3D(double x, double y, double z) : x(x), y(y), z(z) {}

  friend Vector3D operator+(const Vector3D& lhs, const Vector3D& rhs);
  friend Vector3D operator-(const Vector3D& lhs, const Vector3D& rhs);
};
Copier après la connexion

Fonction ami surchargée :

Vector3D operator+(const Vector3D& lhs, const Vector3D& rhs) {
  return Vector3D(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z);
}

Vector3D operator-(const Vector3D& lhs, const Vector3D& rhs) {
  return Vector3D(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z);
}
Copier après la connexion

Utilisation :

Vector3D v1(1, 2, 3), v2(4, 5, 6);

Vector3D v3 = v1 + v2;  // 调用重载的友元函数 operator+()
Vector3D v4 = v1 - v2;  // 调用重载的友元函数 operator-()
Copier après la connexion

Dans cet exemple, nous définissons un Vector3D 类及其重载的友元函数 operator+()operator-()。这些友元函数允许我们对 Vector3D objet en utilisant addition et sub opérateur de traction.

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