Здравствуйте, Octane, Вы писали:
O>O>class Complex
O>{
O>private:
O> ...
O>public:
O> ...
O> Complex operator+(Complex &other){...}
O> Complex operator+(const double &other){...}
O> ...
O>};
O>
O>и есть два теста :
O>O>void main(void)
O>{
O> Complex z(1,2);
O> z=z+1;/* все работает */
O> z=3+z;/* Нет такого глобального оператора или нет соответствующей заданным операторам конверсии*/
O>}
O>
O>Вопросы:
O>1)как описать оператор сложения TYPE и Complex ?(TYPE — левый операнд)
O>2)как описать конверсию от типа TYPE к типу Complex?
1. Методом класса — никак. Именно поэтому Страструп и придумал друзей класса.
Знатоки типа Саттера, Кенига и самого Страуструпа рекомендуют операции с присваиваниями делать методами класса, так как они как рах изменяют левый операнд — текущий объект.
А все остальные бинарные — делать друзьями. Так собственно и сделано в стандартном Complex от Borland — смотрите в include.
2. Это делает конструктор Complex(TYPE &a=значение по умолчанию). Конечно TYPE не может быть совсем уж "из другой оперы". Если из double, то об этом практически во всех книжках написано
class Complex
{ double re, im;
public:
Complex (double ree = 0, double imm = 0):re(ree),im(imm){ }
...