Оператор перегрузки = вместо использования аксессора

0

У меня есть класс с именем MyInteger, и у этого класса есть один член данных типа int - как бы перегрузить оператор "=", чтобы вернуть это целое число? Мне не разрешено использовать метод accessor для возврата целого числа.

член данных

 private:
    int number;

функция

 int MyInteger::operator=(MyInteger myInteger) {

    myInteger = this->number;

    return myInteger;
}

Я знаю, что это неправильно, и я попытался сделать приведение, но это тоже неправильно.

В другом классе я использую это целое только для печати

 cout << number << endl;

Как я могу это решить?

  • 0
    Как вы хотите использовать этот оператор?
  • 2
    operator= должен вернуть *this; условно. Не делать это мгновенно добавляет путаницы. Похоже, вам нужен еще один оператор преобразования.
Показать ещё 2 комментария
Теги:
operator-overloading

2 ответа

5

Ваш пример того, как вы хотите использовать это, вообще не использует оператор =. Как перегружать operator= поможет вам здесь?

Если вы хотите вставлять объекты MyInteger в выходные потоки, вам нужно перегрузить operator<< где левый операнд - это выходной поток, а правый операнд - ваш объект MyInteger.

-5

Я думаю, вы не имеете в виду оператора присваивания, а говорите об операторе преобразования.

Например:

#include <iostream>
#include <algorithm>
#include <iterator>

class MyInteger
{
public:
    MyInteger() : number( 0 ) {}
    void operator ()( int x ) { if ( x < 0 ) ++number; }
    operator int() const { return number; }

private:
    int number;
};

int main()
{
   int a[] = { 1, 2, -3, 4, -5, 6, -7 };
   int count = std::for_each( std::begin( a ), std::end( a ), MyInteger() );
   std::cout << "There are " << count << " negative values" << std::endl;
}
  • 5
    Но учтите, что это почти наверняка плохая идея. Вы собираетесь полностью испортить различные перегруженные вызовы функций. Предпочитаю определять operator<< для std::ostream& и MyInteger .
  • 0
    @ Гонки легкости на орбите Я так не думаю, потому что, как я понял, этот класс эмулирует целые числа. Так что это также может быть использовано в арифметических операциях. Более того, я дал прямой ответ на вопрос. Нет сомнений, что лучше.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню