私は C++ を学んでおり、2 つの異なる型のインスタンスで機能する二項演算子を作成する好ましい方法について、ある程度の洞察を得ることができるかどうか疑問に思っていました。以下は、私の懸念を説明するために作成した例です。
class A;
class B;
class A
{
private:
int x;
public:
A(int x);
int getX() const;
int operator + (const B& b);
};
class B
{
private:
int x;
public:
B(int x);
int getX() const;
int operator + (const A& A);
};
A::A(int x) : x(x) {}
int A::getX() const { return x; }
// Method 1
int A::operator + (const B& b) { return getX() + b.getX(); }
B::B(int x) : x(x) {}
int B::getX() const { return x; }
// Method 1
int B::operator + (const A& a) { return getX() + a.getX(); }
// Method 2
int operator + (const A& a, const B& b) { return a.getX() + b.getX(); }
int operator + (const B& b, const A& a) { return a.getX() + b.getX(); }
#include <iostream>
using namespace std;
int main()
{
A a(2);
B b(2);
cout << a + b << endl;
return 0;
};
2 つのタイプの間で対称性を持たせたい場合、上記のコードではどちらの方法が最適な方法でしょうか。ある方法を他の方法よりも優先して選択することに危険はありますか? これは戻り値の型によって異なりますか? 説明してください!ありがとうございました!