Из ваших ответов на комментарии в вопросе кажется, что у вас есть неявное преобразование из double
в A
в вашем классе. что-то вроде:
class A
{
// ...
public:
A(double);
// ...
};
В этом случае вы можете просто определить свободную функцию для каждого оператора вида:
A operator*( const A&, const A& );
, и он будет использоваться, если одна из сторон является A
объектом, а другая сторона неявно конвертируется в A
. По этой причине часто предпочтительнее сделать симметричные бинарные операторы свободными функциями.
Зачастую проще реализовать двоичный код *
с точки зрения версии присвоения *=
. В этом случае я бы сделал версию присваивания функцией-членом и определил бы *
как что-то вроде:
A operator*( const A& l, const A& r )
{
A result(l);
result += r;
return result;
}
В противном случае, поскольку operator*
является просто частью интерфейса вашего класса, у меня не возникло бы проблем с тем, чтобы сделать его friend
, если требуется.