z__y 2022-12-07 00:18 采纳率: 88.9%
浏览 75
已结题

为什么重载赋值运算符只能重载为成员函数,而不能是友元函数?

为什么重载赋值运算符只能重载为成员函数,而不能是友元函数?
我查到这与编译器会自动生成一个赋值运算符的重载有关,对此我有三个疑问,
1.这个自动生成的重载赋值运算符是无论我自己写不写重载运算符都会存在的吗?
2.这个编译器生成的赋值运算符是成员函数吗?
3.我查到一个答案说:“如果把自己定义赋值运算符的写成友元的话,函数的参数列表不一样,不会发生重载;所以编译器禁止了这种行为。”我对于这里说的不会发生重载产生了疑惑,参数不一样不才可以构成重载吗?这里是说因为定义为友元不算做重载吗?是否为友元足以让编译器区分两个函数吗?

  • 写回答

1条回答 默认 最新

  • 於黾 2022-12-07 11:51
    关注
    获得7.50元问题酬金

    应该是说反了,因为参数一样,所以没法重载
    比如你写一个类A,然后重载赋值运算符,如果给A赋值一个int,那么其实将值赋值给A.a这个属性
    那你如果再写一个类B,同样赋值一个int,要赋值给B.b这个属性
    那这个函数在类里面没有任何问题
    但是这个函数如果是在类外面就有大问题了

    评论

报告相同问题?

问题事件

  • 系统已结题 1月2日
  • 赞助了问题酬金15元 12月25日
  • 创建了问题 12月7日