Re: Перегрузка операторов
От: LaptevVV Россия  
Дата: 05.05.03 12:27
Оценка:
Здравствуйте, 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){ }
...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.