重载C++插入运算符(<<)

AFr*_*ser 6 c++ operator-overloading

我正在尝试编写一个重载插入操作符的类,但是在我的头文件中我得到了错误.

Overloaded 'operator<<' must be a binary operator (has 3 parameters)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

.h文件

ostream & operator<<(ostream & os, Domino dom);
Run Code Online (Sandbox Code Playgroud)

.cpp文件

ostream & operator<< (ostream & os, Domino dom) {
    return os << dom.toString();
}
Run Code Online (Sandbox Code Playgroud)

我正在关注一本教科书,这是他们作为一个例子,但它不适合我..任何建议?

rob*_*off 14

你可能把你的operator<<内部声明.这意味着它需要一个额外的隐藏参数(this参数).你需要把它放在任何类声明之外.


nit*_*ian 12

插入运算符(<<)可以用作成员函数或朋友函数.

operator <<用作成员函数

ostream& operator<<(ostream& os);
Run Code Online (Sandbox Code Playgroud)

应该调用此函数:

dom << cout;
Run Code Online (Sandbox Code Playgroud)

通常,如果您将运算符用作成员函数,则运算符的左侧应为对象.然后,此对象作为参数隐式传递给成员函数.但是调用会让用户感到困惑,而且看起来并不好看.

operator <<用作朋友函数

friend ostream& operator<<(ostream& os, const Domino& obj);
Run Code Online (Sandbox Code Playgroud)

应该调用此函数:

cout << dom;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,对象dom显式作为引用传递.这种调用更传统,用户可以轻松理解代码的含义.