У меня есть класс Counter
, и я хочу перегрузить operator <<
, чтобы вывести элемент данных Counter
. Я попытался сделать ostream перегружать функции-члена:Может ли перегрузка нагрузки быть членом функции?
Counter{
public:
std::ostream& operator<<(std::ostream& outStream, const Counter& c);
private:
int count_;
};
std::ostream& Counter::operator<<(std::ostream& outStream, const Counter& c){
outStream << c.count_;
return outStream;
}
Но компилятор г ++ всегда выдает ту же ошибку:
‘std::ostream& Counter::operator<<(std::ostream&, const Counter&)’
must take exactly one argument
Однако, если я изменил функцию перегрузки, чтобы быть другим класс , он работал все хорошо, как это:
Counter{
public:
friend std::ostream& operator<<(std::ostream& outStream, const Counter& c);
private:
int count_;
};
std::ostream& operator<<(std::ostream& outStream, const Counter& c){
outStream << c.count_;
return outStream;
}
Означает ли это, что перегрузка оператора поток не может быть функцией членом класса?
Это не * есть *, чтобы быть другом - вы можете использовать открытый интерфейс, если ваш класс хорошо разработан ... – Flexo
Он должен быть другом, если вы хотите получить доступ к непубличным членам, как и любой другой другая функция; ничего особенного о 'operator <<' здесь. – ildjarn
@ildjarn, но может ли это быть функцией-членом? – Brian