Мы возвращаем ссылку из оператора присваивания, чтобы мы могли сделать несколько интересных трюков, таких как @ SomeWittyUsername показывает .
Объект, на который мы хотим вернуть ссылку, - это тот, кто является оператором.вызывается или this
.Итак, как вы уже слышали, вы захотите вернуть *this
.
Так что ваш оператор присваивания, вероятно, будет выглядеть так:
Test& Test::operator=(const Test& t) {
age = t.getAge();
id = t.getID();
return *this;
}
Вы можете заметить, что это выглядитпоразительно похож на ваш экземпляр-конструктор.В более сложных классах оператор присваивания будет выполнять всю работу конструктора копирования, но в дополнение ему придется безопасно удалять любые значения, которые класс уже хранит.
Поскольку это довольно простой классУ нас нет ничего, что мы должны безопасно удалить.Мы можем просто переназначить обоих участников.Так что это будет почти точно так же, как конструктор копирования.
Это означает, что мы можем упростить ваш конструктор, просто используя оператор!
Test::Test(const Test& t) {
*this = t;
}
Опять же, пока это работает дляВаш простой класс, в производственном коде с более сложными классами, мы обычно хотим использовать списки инициализации для наших конструкторов (подробнее читайте здесь ):
Test::Test(const Test& t) : age(t.getAge()), id(t.getId()) { }