@rustam6548

Почему некорректно работает перегруженный оператор постинкремента?

Вкратце: нужно для класса Vector (математический вектор в n-мерном пространстве с заданными координатами) перегрузить оператор постинкремента, чтобы он на единицу увеличивал все координаты вектора.
class Vector
{
private:
	double* dim;
	int dimCount = 0;

public:
	Vector(int n = 1, bool input = false) 
	{
		dim = new double[n];
		dimCount = n;

		if (input)
		{
			for (int i = 0; i < n; i++)
			{
				cout << "Введите " << i + 1 << " координату: "; cin >> dim[i];
			}
		}
	}

	int getDimCount()
	{
		return dimCount;
	}

  double* operator[](const int n);
  Vector operator++(int);
}

double* Vector::operator[](const int n)
{
	double* result = &this->dim[n];
	return result;
}

Vector Vector::operator++(int)
{
	Vector result = *this;

	for (int i = 0; i < this->getDimCount(); i++)
	{
		++*this->operator[](i);
	}

	return result;
}

Вроде бы всё правильно написал, но:
cout << *(a++)[0];
выводит при заданной 0-координате значение на 1 больше, а не предыдущее (да и вообще со всеми координатами так).
Помогите, пожалуйста. Заранее спасибо
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
includedlibrary
@includedlibrary
На этой строке вы хотите скопировать вектор:
Vector result = *this;

Однако, у вас нигде нет конструктора на этот случай, поэтому у вас тупо копируется указатель, а не данные, которые по нему лежат. Надо добавить конструктор для этого:
Vector(Vector &v) {
    this->dim = new double[v.dimCount];
    this->dimCount = v.dimCount;
    memcpy(this->dim, v.dim, this->dimCount * sizeof(double));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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