operator《》重载理解(需为友元函数)

原文转自点击打开链接

加入了自己的理解

类成员函数中:如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。


而 >>  或<< 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。。。。。。就只能申明为友元函数了。。。

如果一定要声明为成员函数,只能成为如下的形式:

ostream & operator<<(ostream &output)

{

  return output;

}

修改为

void operator<<(ostream &output)
{
output << "(" << real << "," << img << ")" << endl;

}

        

所以在运用这个<<运算符时就变为这种形式了:data<<cout;(不需要返回值,这种相当于data.operator(cout),cout就是ostream &output的实参,传入后里面就变成cout<< "(" << real << "," << img << ")" << endl;可以打印出来)

data<<cout;不合符人的习惯。


运算符重载函数可以作为成员函数,友元函数,普通函数。

普通函数:一般不用,通过类的公共接口间接访问私有成员。

成员函数:可通过this指针访问本类的成员,可以少写一个参数,但是表达式左边的第一个参数必须是类对象,通过该类对象来调用成员函数。

友元函数:左边一般不是对象。<< >>运算符一般都要申明为友元重载函数。


一般情况下:

双目运算符重载为友元函数,这样就可以使用交换律,比较方便

单目运算符一般重载为成员函数,因为直接对类对象本身进行操作


总之:如果运算符重载为成员函数,第一个参数必须是本类的对象,因为默认使用第一个参数的对象进行调用该成员函数


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值