возвращаемое значение перегруженных операторов

Тема в разделе "LANGS.C", создана пользователем 10110111, 27 дек 2007.

  1. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Такой код:
    Код (Text):
    1. class COMPLEX{
    2. public:
    3.     double x,y;
    4. //...
    5.     COMPLEX(TYPE Re,TYPE Im)
    6.     {
    7.         x=Re;
    8.         y=Im;
    9.     }
    10.     COMPLEX operator*(COMPLEX z)
    11.     {
    12.         return COMPLEX(x*z.x-y*z.y,y*z.x+x*z.y);
    13.     }
    14.     COMPLEX operator*=(COMPLEX z)
    15.     {
    16.         return ((*this)*z);
    17.     }
    Когда исполняется a*=z (вне определения класса), почему-то a не изменяется.
    В чём моя ошибка?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    так ты его и не изменяешь.

    правильно:

    Код (Text):
    1.     COMPLEX operator*=(COMPLEX z)
    2.     {
    3.         // Изменяем this  (!)
    4.         (*this) = (*this) * z;
    5.  
    6.         return (*this);
    7.     }
    UPD:
    Да, кстати, я бы ссылочки (&) возвращал и принимал вместо самих объектов. типа COMPLEX & operator*=(COMPLEX &z)
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Great

    При чем лучше константные ссылочки, а то не получится умножать на константное число.