Я изучаю C++, и мне было интересно узнать, как я могу получить представление о предпочтительном способе создания бинарных операторов, работающих с экземплярами двух разных типов. Вот пример того, что я сделал, чтобы проиллюстрировать мои проблемы:C++ Симметричные двоичные операторы с различными типами
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 и то, как они связаны, могут помочь в определении простого простого решения. Связаны ли они? Один конвертируемый в другой? –