Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > проблема с перегрузкой оператора =


Автор: surly 23.5.2010, 18:17
еще раз доброго времени суток.
форум почитал, были схожие проблемы у людей, но никак не смог решить свою.
столкнулся с проблемой, связанной с перегрузкой оператора =.
операторы сравнения, арифм операций перегрузить получилось, а вот с = проблема.
Код

class Colour
{
public:
    Colour(void);
    Colour(double e, double g, double b);
    ...............................
    Colour operator +(Colour col);
    Colour operator -(Colour col);
    Colour operator *(Colour col);
    Colour operator *(double f);
    Colour operator /(double f);
    Colour operator =(Colour col);
    bool operator ==(Colour col);
#pragma endregion operators
        ...............................
};

......................................................
Colour Colour::operator /(double f)
{
    return Colour(Red / f, Green / f, Blue / f);
}

Colour Colour::operator =(Colour col)
{
    this->Red = col.Red;
    this->Green = col.Green;
    this->Blue = col.Blue;
    return *this;
}

bool Colour::operator==(Colour col)
{
    if (
        (this->Red == col.Red) && (this->Blue == col.Blue) && 
                (this->Green == col.Blue)
        )
        return true;
    else return false;
    
}

вроде написано все верно, но ошибка есть ошибка..
Код

Error    5    error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const Colour' (or there is no acceptable conversion)


заранее благодарен за помощ в решении проблемы связанной с перегрузкой оператора.

Автор: kemiisto 23.5.2010, 18:35
Формальные аргументы перегруженных операторов для класса MyClass обычно константные ссылки const MyClass&. В случае оператора присваивания - возвращать нужно тоже ссылку.

Код

MyClass& operator=(const MyClass& rhs);


Не забудьте проверить присваивание самого себе:
Код

MyClass& MyClass::operator=(const MyClass& rhs) 
{
    // Check for self-assignment!
    if (this == &rhs)      // Same object?
      return *this;        // Yes, so skip assignment, and just return *this.

    ... // Deallocate, allocate new space, copy values...

    return *this;
}


http://www.cs.caltech.edu/courses/cs11/material/cpp/donnie/cpp-ops.html, короче, хотя бы что-то.

Автор: surly 23.5.2010, 18:44
спасибо, kemiisto.
вопрос решен =)
олсо, по твоей ссылке я бывал сегодня, но чет не обратил внимания, дается усталось =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)