关于有的运算符重载只能使用成员函数

1.先说结论:=, [], (), -> 是只能通过成员函数重载

        拿“=”来说,首先,c++规定之只能赋值非静态的数据,静态是不能赋值过来的。那么不能在类外重载的原因就在于友元函数的使用。

        在类中如果没有成员函数“=”的重载,就会自动调用自己的构造函数。可以代码测试实现一下

        友元函具有访问把类中数据成员声明为“朋友”的权限。就可以在类外调用。那么当把赋值运算符重载函数作为为类的友员函数,在程序中执行类时,程序就会出现两种矛盾的选择。

1、因为它认为类中并没有重载赋值运算符的成员函数,所以它根据C++的规则,会去调用相应的构造函数。

2、但是在全局里,我们已经重载了参数类型为此类类型的赋值运算符函数,而这赋值语句刚好和这函数匹配上了,根据C++的规则,也会去调用这函数。

程序是不允许即调用成员函数中默认的赋值运算符重载(构造函数),又调用通过友元函数加入进来的赋值运算符重载全局函数。

2.总结:

        对于剩下的3个运算符 ->, [], () 为什么不能重载为友元函数,也是跟上面一样的道理。即编译器发现当类中没有定义这3个运算符的重载成员函数时,就会自己加入默认的运算符重载成员函数。因此这四个运算符写成友元函数时会报错,产生矛盾。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值