У меня есть класс с именем MyInteger, и у этого класса есть один член данных типа int - как бы перегрузить оператор "=", чтобы вернуть это целое число? Мне не разрешено использовать метод accessor для возврата целого числа.
член данных
private:
int number;
функция
int MyInteger::operator=(MyInteger myInteger) {
myInteger = this->number;
return myInteger;
}
Я знаю, что это неправильно, и я попытался сделать приведение, но это тоже неправильно.
В другом классе я использую это целое только для печати
cout << number << endl;
Как я могу это решить?
Ваш пример того, как вы хотите использовать это, вообще не использует оператор =
. Как перегружать operator=
поможет вам здесь?
Если вы хотите вставлять объекты MyInteger
в выходные потоки, вам нужно перегрузить operator<<
где левый операнд - это выходной поток, а правый операнд - ваш объект MyInteger
.
Я думаю, вы не имеете в виду оператора присваивания, а говорите об операторе преобразования.
Например:
#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;
}
operator<<
для std::ostream&
и MyInteger
.
operator=
должен вернуть*this;
условно. Не делать это мгновенно добавляет путаницы. Похоже, вам нужен еще один оператор преобразования.