Задать вопрос
@jspie

Как перегрузить оператор +?

Такой вопрос... есть класс A. В нем хранится массив динамический одномерный. Имеется два экземпляра класса с разными массивами. Как правильно к примеру реализовать такое MyClass c = a+b
В перегрузке повторяющиеся элементы массива a,b должны записываться в новый массив. Перегрузка должна возвращать класс с новым массивом. Как это сделать грамотно?
Возвращает пустой массив:
Vect &Vect::operator+(const Vect &ob)
{
	Vect v;
	int j = 0;
	v.size = ob.size;
	v.vec = new int[v.size];
	for (int i = 0; i < v.size; i++){
		if (this->vec[i] == ob.vec[i])
			v.vec[j] = this->vec[i];
		j++;
	}

	return v;
}
  • Вопрос задан
  • 217 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
nekipelov
@nekipelov
Вы возвращаете ссылку на локальный объект, так нельзя. Компилятор должен был предупредить об этом. Правильно как-то так (не видя ваш класс я могу ошибаться):

Vect operator+(const Vect &lhs, const Vect &rhs)
{
  Vect v;

  v.size = lhs.size + rhs.size;
  v.vec = new int[v.size];

  std::copy(lhs.vec, lhs.vec + lhs.size, v.vec);
  std::copy(rhs.vec, rhs.vec + rhs.size, v.vec + lhs.size);

  return v;
}
Ответ написан
Комментировать
zagayevskiy
@zagayevskiy
Android developer at Yandex
В каком смысле "пустой массив"?
Заполняться у вас массив будет только если на одинаковых местах в массивах находятся одинаковые элементы. Во всех остальных случаях в массиве будут нули.
Вы не проверяете, что this.size>=ob.size, но действуете будто это так. Может скрэшиться.
Оператор + имеет другую семантику. Лучше бы использовать для этого оператор & --он может обозначать пересечение.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы