@Anvario0

Почему при вызове return вызывается конструктор копирования, а не перегрузка оператора =?

Написал перегрузку оператора +
coffeeMachine operator +(const coffeeMachine& other)
	{
		coffeeMachine temp;
		temp.x = this->x + other.x;
		temp.y = this->y + other.y;
		temp.size = this->size + other.size;

		return temp;
	}

Вызвал в main
coffeeMachine device(8, 12, 6);
	coffeeMachine machine(23, 65, 8);
	coffeeMachine mix = device + machine;

Но он вызывает перегрузку конструктора копирования, а не перегрузку оператор =, почему?
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
coffeeMachine mix = device + machine;
вызывает перегрузку конструктора копирования, а не перегрузку оператор =, почему?

Потому что ты создаёшь здесь экземпляр класса, это делается конструктором. Поскольку ты хочешь его инициализировать другим экземпляром, используется конструктор копирования. Дело в том, что оператор = ожидает слева сконструированный объект, а в данной записи его нет.

А если написать вот так:
coffeeMachine mix; mix = device + machine;
то ты сначала создаёшь экземпляр со значением по умолчанию, а потом вызываешь оператор =.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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