私はC++を学んでいますが、2つの異なる型のインスタンスで動作するバイナリ演算子を作成する好ましい方法についていくつかの洞察を得ることができるのだろうかと思いました。異なるタイプの対称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;
};
私は上記のコードでは最良の方法である方法、二つのタイプの中で対称性を持っているしたい場合:ここで私は私の懸念を説明するために作った例があります。ある方法を他の方法よりも選択する可能性はありますか?これは返品の種類によって異なりますか?説明してください!ありがとうございました!
AとBをよりよく説明し、それらがどのように関連しているかは、クリーンでシンプルな解決方法を決定するのに役立ちます。彼らは関連していますか? 1つのコンバーチブルはもう1つのコンバーチブルですか? –