c语言符号大全表解释 为什么赋值运算符只能作为成员函数进行重载,而不能作为友元函数重载?
为什么赋值运算符只能作为成员函数进行重载,而不能作为友元函数重载?
我很久没写C了。我给你这个主意。它可以用作左值,因此需要返回*这个表单来返回引用friend函数。没有这个指针,对吗?赋值运算符返回所需的引用类型。这是钥匙
!因此,RT
1。因为它是运算符重载,所以它必须访问类的私有成员变量。根据类的封装要求,除了friend函数外,其他任何外部操作都是非法的,因此普通函数不能用来重载操作符。
2. 如果赋值运算符的重载函数没有显式定义,编译器将自动生成它。即使类成员变量包含指针,指针值也会被复制。因此,往往造成多个实例共享一个存储空间的尴尬局面。分解第一个定义的类时,剩余的实例仍然指向释放的存储空间,指针的值将从类中删除,但是成员变量的值已被破坏,实例仍然存在不可接受的现实。
3. 赋值函数是构造函数的重载,而不是普通成员函数,不能由对象调用。函数只需要一个相同类型的参数,以常量和引用的形式出现。友元函数的参数与重载运算符的个数一致,如,-、*、/等都需要两个参数。这些概念类似于数学概念。赋值运算符=不是数学概念中的运算符。因此,运算符重载的友元函数的参数不小于2(这些运算符是数学概念中的运算符)。
为什么C 赋值运算符重载函数不能被继承?
在赋值运算符中,有一种C/C唯一复合赋值运算符。它们实际上是一种缩写形式,使变量的变化更加简洁。Total=Total 3,这意味着将其值加上3,然后将其分配给自身。为了简化,上面的代码也可以写成:total=3。同样地,X*=y7相当于X=X*(y7)R%=P相当于R=R%P。复合赋值运算符有以下几种:符号函数=加法赋值-=减法赋值*=乘法赋值/=除法赋值%=模运算赋值>=右移赋值&=位逻辑和赋值|=位逻辑或赋值^=位逻辑异或赋值。如果你看上面的复合赋值运算符,有人会问,total=3和total=3之间有什么区别吗?答案是肯定的。对于a=a1,表达式a求值两次。对于复合运算符a=1,表达式a只计算一次。一般来说,这种差异对程序的操作几乎没有影响,但是当表达式用作函数的返回值时,函数会被调用两次(稍后解释)。此外,如果使用普通的赋值运算符,程序的开销会增加,效率也会降低。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。