перегруженные операторы «+» и «-», проблема с выяснением того, как проверить, является ли «сумма» передается в отрицательно

Я перегрузил эти операторы, чтобы помочь мне пройти по двусвязному списку, но натолкнулся на небольшую ошибку, и, будучи еще новичком в c ++, я застрял. Я никогда не считал, что введенная «сумма» будет отрицательным числом. Поэтому я думаю, что мне нужно поставить проверку в каждом операторе для отрицательного числа, потому что это резко изменит способ обхода списка, например, если я указываю на узел 5 и I + (- 3), я бы хотел, чтобы он двигался в обратном направлении три узла, то же самое с -, 5 — (-3) будет идти вперед три узла. логика кажется простой, но синтаксис сбивает с толку. Вот перегруженные операторы:

template <typename T>
typename doublyLinkedList<T>::iterator doublyLinkedList<T>::iterator::operator+(const int amount) const {
doublyLinkedList<T>::iterator tempClone(*this);
tempClone.pastBoundary=false;
T i;

for(i=0; i < amount; i++)
{
if(tempClone.current->forward == NULL)
{
tempClone.pastBoundary =true;
}else
{
++tempClone;
}
}

if(tempClone.pastBoundary == true)
{
return *this;
}else
{
return tempClone;
}
}
template <typename T>
typename doublyLinkedList<T>::iterator doublyLinkedList<T>::iterator::operator-(const int amount) const {
doublyLinkedList<T>::iterator tempClone(*this);
tempClone.pastBoundary=false;
T i;

for(i=0; i < amount; i++)

{
if(tempClone.current->backward == NULL)
{
tempClone.pastBoundary =true;
}else
{
--tempClone;
}
}if(tempClone.pastBoundary == true)
{
return *this;
}else
{
return tempClone;
}
}

1

Решение

if(amount = (-amount)) — если сумма не равна 0, это всегда верно.

И это должно идти до цикла for. На самом деле, я бы, вероятно, сделал:

if (amount < 0) return this->operator-(-amount);

и наоборот для другого оператора.

1

Другие решения

В начале оператора + добавьте:

if (amount <0) {
operator-(-amount);
return;
}

и аналогично в оператор добавьте:

if (amount <0) {
operator+(-amount);
return;
}

Редактировать: кстати, будьте очень осторожны с опечатками вроде:

if(amount = (-amount))

который назначает -amount для количества, а затем проверяет, равно ли количество нулю!

0

По вопросам рекламы [email protected]