Как перегрузить операторы приращения в C ++ для объекта с 2 переменными? - PullRequest
1 голос
/ 15 марта 2019

поэтому у меня возникли проблемы с перегрузкой оператора.Итак, у меня есть программа, которая имеет объект с именем Вес , который имеет 2 атрибута, фунтов и унций .Я разобрался со всеми остальными операторами, но приращение одного доставляло мне проблемы.Я пытался сделать это таким образом, но по какой-то причине он не хочет работать.

Вот объявления в заголовочном файле (включая 2 переменные):

    void operator++();
    void operator--();
private:
    int pounds;
    int ounces;

И функции-члены:

void Weight::operator++() {
    pounds + 1;
    ounces + 15;
}
void Weight::operator--() {
    pounds - 1;
    ounces - 15;
}

Все помогает!

1 Ответ

1 голос
/ 15 марта 2019

Опубликованный код страдает от двух проблем.

  1. Неясно, что должно произойти, когда вы увеличиваете или уменьшаете Weight объекты.Если его значение увеличится / уменьшится на одну унцию или фунт.

  2. Выражения pounds + 1, ounces + 15 и т. Д. Ничего не изменяют в объекте.Они вычисляют значение, а полученный результат отбрасывается.

Предполагая, что оператор inrement изменяет значение на одну унцию, вам придется использовать:

void Weight::operator++() {
    ounces++;

    // If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
    if ( ounces == 16 )
    {
        pounds++;
        ounces = 0;
    }

    // That can also be achieved by using.
    // pounds += (ounces / 16);
    // ounces =  (ounces % 16);
}

Такжеканоническая практика перегрузки оператора ++ - возвращать ссылку на объект.Следовательно, вы должны использовать:

Weight& Weight::operator++() {
    ounces++;

    // If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
    if ( ounces == 16 )
    {
        pounds++;
        ounces = 0;
    }

    // That can also be achieved by using.
    // pounds += (ounces / 16);
    // ounces =  (ounces % 16);

    return *this;
}

Вам нужно будет обновить функцию operator-- аналогичным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...