@NeYmen

C++ Оператор и его перегрузка?

DATE & operator ++()
		{
			DATE Copy(*this);
			day++;
			month++;
			year = year + 10;
			return *this;
		}

Это отрывок из кода, DATE -это класс, day,month,yar целочисленные переменные.
У меня вопрос, Зачем здесьDATE& operator ++() используется ссылка?

Зачем в качестве параметра передавать указатель *this? DATE Copy(*this);
И вообще, насколько нужно перегружать все эти операторы, и используется ли это вообще?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Ну вот так прнято в С++. Оператор префиксного инкремента (++i) имеет такую сигнатуру - он возвращает ссылку на измененный объект. Если выхотите чтобы у вашего класса Date можно было сделать ++date, то надо переопределить вот такой вот оператор. Это позволяет писать более читаемый и короткий код. Вместо date.IncremeantAndReturn() можно использовать идиоматичное ++date, или даже что-то вроде while (++date < deadline). Это не обязательно делать, но иногда это весьма удобно и полезно.

Оператор должен возвращать измененное значение, поэтому и возвращается *this после его увеличения;

В этом коде Сopy не используется. Оно тут не нужно вообще. копия понадобится для постфиксного инкримента (i++), который должен возвращать неизмененный объект.

Передача *this в конструктор Copy - это для вызова конструктора копирования, чтобы, внезапно, создать копию текущего объекта. Подумайте, как вам скопировать текущий объект? Надо новому объекту присвоить текущий, или в конструктор передать ему текущий объект. Но как передать текущий объект? У вас есть указатель на него this. Разыменовав этот указатель (*this) вы как раз можете передать текущий объект куда надо.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы