C++中operator<<运算符重载注意事项

我们在定义一个类的时候,为了使用方便,希望通过<<打印类的相关信息,需要重载<<运算符

一般运算符重载都设计为类的member function,但是operator<<却不能这样设计,Essential C++中解释如下:

为什么不把output运算符设计为一个member function呢?因为作为一个member function,其左侧操作数必须是隶属同一个class之下的对象,如果output运算符被设计为menber function,那么该类的对象必须被置于output运算符的左侧:
object << cout << endl;

这种形式不符合常规代码书写规范,所以不建议这样做。

以我的理解是因为member function默认有一个this指针的传入,导致默认将this指针对象作为了左操作数。

为了解决这个问题,只能定义为非成员函数,举例如下:

template <typename valType>
inline ostream& operator<< (ostream &os, const BinaryTree<valType> &bt) {
    os << "Binary Tree: " << endl;
    bt.print( os );
    return os;
}

只要在h文件或者cpp文件中定义这个操作符,在使用<<进行类输出时,根据参数列表类型匹配,还是会调用这个重载函数,达到输出目的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值