[]、()、->、=这几个运算符如果要重载,为什么必须重载为成员函数而不能重载为友元
[]、()、->、=这几个运算符如果要重载,为什么必须重载为成员函数而不能重载为友元?谢谢回答!...
[]、()、->、=这几个运算符如果要重载,为什么必须重载为成员函数而不能重载为友元?谢谢回答!
展开
3个回答
展开全部
关于这个问题, 有些人的说法是避免二义性
但我的理解是, 本身就是规范. 是为了书写简单, 同时不容易出错,才规定必须重载为成员的.
因为, 常规来说, 这几个运算符重载, 都是操作本身成员的,
所以重载为成员函数就是自然而然的了.
开发者干脆就写入规范了.
其实如果没这个规定, 重载为友元, 甚至在极端情况下, 操作的成员都是public情况下, 重载为普通全局函数也是没什么的.
但既然规定了,就没必要深究原因, 遵循规范就好了.
但我的理解是, 本身就是规范. 是为了书写简单, 同时不容易出错,才规定必须重载为成员的.
因为, 常规来说, 这几个运算符重载, 都是操作本身成员的,
所以重载为成员函数就是自然而然的了.
开发者干脆就写入规范了.
其实如果没这个规定, 重载为友元, 甚至在极端情况下, 操作的成员都是public情况下, 重载为普通全局函数也是没什么的.
但既然规定了,就没必要深究原因, 遵循规范就好了.
展开全部
这是作者的规定,但是我觉得没有道理。
举个例子:
friend double* operator =(double*u, const Complex&a){ ...... }
其含义明显,但编译不能通过。
举个例子:
friend double* operator =(double*u, const Complex&a){ ...... }
其含义明显,但编译不能通过。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-12-01
展开全部
operator=作为成员函数的时候,调用this *是不可争议的,举个例子:类A的一个对象a,使用operator=的时候可以解释为a.operator=()。。左操作数可以通过this*指针传递,右操作数通过参数;然而作为友元的时候,其左右操作只能通过参数。。。可是我还是不能说服自己,为什么必须重载为成员函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询