运算符重载,什么时候用友元?

重载ostream和istream运算符的时候,必须重载为友元,这是为什么?

 

什么时候应该用友元函数?什么时候用成员函数?

 

有些操作必须是成员函数:比如构造函数,拷贝构造函数,析构函数以及虚函数

由于成员是局部于类的,所以,这些函数还是优先被作为成员。

 

 

 

由此可见,修改一个类对象状态的操作,应该或者是一个成员,或者是一个带有非

const引用参数的全局函数。那些要求基础类型的左值运算符作为用户定义类型的成员函

数最为自然。

 

 

如果希望某个运算的所有运算对象都能允许隐式类型转换,实现他的函数就应该作为

非成员函数,取const引用参数或非引用参数。在应用不需要基础类型的左值的运算符(+,

-||等),显示它们的函数通常采用这种方式。这些运算符经常需要访问其运算对象类的内部

表示,因此,它们friend函数的最常见的来源。

      如果没有定义类型转换,选择成员函数要比采用引用参数的友元函数更好

 

PS:如果重载为成员函数,编译时就会产生以下错误:

 error C2679: 二进制“<<”: 没有找到接受“MyString”类型的右操作数的运算符(或没有可接受的转换)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值