C++には、クラスの外部からでもそのクラスの非公開メンバーにアクセスすることができる「フレンド演算子」という機能があります。
この記事では、フレンド演算子の基本的な使い方や注意点をわかりやすく解説します。
C++のフレンド演算子とは
C++には、クラスの外部からでもそのクラスの非公開メンバーにアクセスすることができる「フレンド関数」という機能があります。このフレンド関数をさらに拡張したものが「フレンド演算子」です。
フレンド演算子は、あるクラスの非公開メンバーに対して、他のクラスや関数から直接アクセスするための演算子です。
通常、演算子はオブジェクト同士を操作するために使用されますが、フレンド演算子はオブジェクトと非公開メンバーを操作するために使用されます。
例えば、以下のようなコードがあった場合、operator+
が Complex
クラスの非公開メンバー real_
と imag_
に直接アクセスできるようにすることができます。
class Complex {
private:
double real_;
double imag_;
public:
Complex(double r, double i) : real_(r), imag_(i) {}
friend Complex operator+(const Complex& lhs, const Complex& rhs);
};
Complex operator+(const Complex& lhs, const Complex& rhs) {
return Complex(lhs.real_ + rhs.real_, lhs.imag_ + rhs.imag_);
}
このように、フレンド演算子を使うことで、プログラム全体で共有される複雑な処理を簡単かつ効率的に実装することができます。
フレンド演算子の使い方
C++において、フレンド演算子はクラスの外部からでもそのクラスの非公開メンバーにアクセスすることができるようにするための機能です。
フレンド演算子の定義方法
フレンド演算子を定義するには、以下のような形式で宣言します。
friend 戻り値型 operator 演算子シンボル(引数リスト);
例えば、以下のようなコードで「+」演算子をフレンド演算子として定義し、クラス外で実装することができます。
class MyClass {
private:
int value;
public:
MyClass(int v) : value(v) {}
friend MyClass operator+(const MyClass& lhs, const MyClass& rhs);
};
MyClass operator+(const MyClass& lhs, const MyClass& rhs) {
return MyClass(lhs.value + rhs.value);
}
フレンド演算子の呼び出し方法
フレンド演算子は通常のメソッドと同じように呼び出すことができます。例えば、上記で定義した「+」演算子を使用する場合は以下のように書くことができます。
MyClass a(1), b(2), c = a + b;
このように、フレンド演算子を使用することで、クラス内部だけではなく外部からも非公開メンバーにアクセスすることが可能になります。ただし、過剰な使用はプログラム全体を複雑化させるため注意が必要です。