C++有些运算符为什么必须声明为友元而不是类成员

设计类时常常需要重载运算符,我发现重载输入输出流时都使用友元函数,为什么不用类成员函数呢?张宇老师说过,“能不能用,用了再说”,于是我用了。

std::istream & operator >>(std::istream & is, Student & stu);   //输入一个字
	//friends
	friend std::istream & getline(std::istream & is, Student & stu);//输入一行
	friend std::ostream & << (std::ostream & os, Student & stu);    //输出

 

于是被编译器告知不能用,还告诉我是因为参数太多了。

  

这是为什么呢?有人说我这是类成员函数,只能有一个参数,因为另一个默认的参数是类对象自身。我觉得还挺有道理的,并不是说类成员函数只能有一个参数,只是需要两个操作数的操作符如+-*/<<,>>等如果申明为类成员函数时,第一个参数默认为类对象本身了。这也是+-就能在类成员函数中重载的原因。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值