class A{
public:
int x;
A& operator=(const A& a){x = a.x; return *this;} //переопределили стандартное поведение
void operator=(int xx){x=xx;} //определили поведение при присваивании целого. Но здесь тоже можно вернуть *this.
};
int main(){
A a;
a=1;
A a2;
std::cout << (a2=a).x;
}
воскресенье, 14 ноября 2010 г.
31. Какой результат должны возвращать операции с присваиванием?
Вообще говоря, ничего они не должны. Однако, для всех классов, по умолчанию, этот оператор означает копирование объекта и возвращение ссылки. Поэтому, при переопределении оператора, отступать от этого правила нежелательно. Но мы не обязаны использовать этот оператор только для копирования объектов.
Подписаться на:
Комментарии к сообщению (Atom)
А если убрать строчку
ОтветитьУдалитьA& operator=(const A& a){x = a.x; return *this;}
то все работает точно так же. Для чего она?
Если мы не объявили
ОтветитьУдалитьA& operator=(const A& a)
он всегда создается по умолчанию. Если убрать эту строчку, компилятор сгенерирует эквивалентный код, какой я привел в примере, поэтому и без этой строчки работает так же. А вообще переопределять бывает необходимо, если в классе есть указатели.
Или есть желание, что бы оператор = выполнял некую другую функцию, а не присваивание.
ОтветитьУдалить