为类重载 C 插入运算符 (<<)

新手上路,请多包涵

我正在尝试编写一个重载插入运算符的类,但在我的头文件中出现错误。

 Overloaded 'operator<<' must be a binary operator (has 3 parameters)

这是我的代码:

.h 文件

ostream & operator<<(ostream & os, Domino dom);

.cpp 文件

ostream & operator<< (ostream & os, Domino dom) {
    return os << dom.toString();
}

我正在关注一本教科书,这是他们用作示例的,但它对我不起作用..有什么建议吗?

原文由 AFraser 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您可能将 operator<< 放在类声明中。这意味着它需要一个额外的隐藏参数( this 参数)。您需要将其放在任何类声明之外。

原文由 rob mayoff 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

运算符 << 用作成员函数

ostream& operator<<(ostream& os);

这个函数应该被调用为:

 dom << cout;

一般来说,如果您将运算符用作成员函数,则运算符的左侧应该是一个对象。然后这个对象被隐式地作为参数传递给成员函数。但是该调用使用户感到困惑,并且看起来不太好。

运算符 << 用作友元函数

friend ostream& operator<<(ostream& os, const Domino& obj);

这个函数应该被调用为:

 cout << dom;

在这种情况下,对象 dom 被明确地作为引用传递。这种调用比较传统,用户可以很容易地理解代码的含义。

原文由 nitin_cherian 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题