C++ フレンド関数とオーバーロードの関係

WBOY
リリース: 2024-04-16 11:06:02
オリジナル
489 人が閲覧しました

はい、他の関数と同様に、フレンド関数はオーバーロードできます。オーバーロードされたフレンド関数には別のパラメーター リストが必要です。例の Vector3D クラスには、オーバーロードされたフレンド関数 Operator () と Operator-() があります。これにより、加算演算子と減算演算子を Vector3D オブジェクトに適用できるようになります。

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

#C フレンド関数とオーバーロードの関係

#フレンド関数Friend function は、他のクラスのプライベート メンバーにアクセスできる特別なタイプの関数です。つまり、クラスのメンバー関数ではありませんが、メンバー関数と同じアクセス権を持ちます。

フレンド関数の定義:

class ClassName {
  // ...

  friend function_name();
};
ログイン後にコピー

オーバーロード

オーバーロードを使用すると、同じ名前で同じ名前の関数を作成できます。同じスコープ 異なるパラメータリストを持つ複数の関数。これは、オーバーロードされた関数が呼び出されるときに、コンパイラが引数に基づいてどの関数を呼び出すかを決定することを意味します。

フレンド関数とオーバーロードの間の相互作用

フレンド関数はオーバーロードできます。他の関数と同様に、オーバーロードされたフレンド関数には異なるパラメーター リストが必要です。

#実際的なケース

クラス例:

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);
};
ログイン後にコピー
オーバーロードされたフレンド関数:

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);
}
ログイン後にコピー
使用法:

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

Vector3D v3 = v1 + v2;  // 调用重载的友元函数 operator+()
Vector3D v4 = v1 - v2;  // 调用重载的友元函数 operator-()
ログイン後にコピー
この例では、Vector3D

クラスとそのオーバーロードされたフレンド関数

operator () および ## を定義します。 #オペレーター-()###。これらのフレンド関数を使用すると、Vector3D オブジェクトで加算演算子と減算演算子を使用できるようになります。

以上がC++ フレンド関数とオーバーロードの関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート