为什么C++重载赋值运算符 必须要用成员函数 而不能用普通或者友元

为什么C++重载赋值运算符必须要用成员函数而不能用普通或者友元麻烦详细答案... 为什么C++重载赋值运算符 必须要用成员函数 而不能用普通或者友元 麻烦详细答案 展开
 我来答
beddy1
2012-05-08 · TA获得超过1988个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2183万
展开全部
那是因为赋值运算符是单目运算符,注意看赋值是怎么运用的
j = i;
不想加法之类的双目运算符
j = 5 + 6;
你难道想定义一个这样的普通函数在表达赋值?
const int& operator = (const int& val)
{
return val;
}

请问你觉不觉得它非常的怪,基本上就是一个没用的函数。
追问
不是吧 赋值运算时单目运算吗  它有2个操作数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qq993145280
2012-05-08 · TA获得超过415个赞
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:309万
展开全部
可以用友元和普通函数的,但是你用成员函数中,函数参数中有个隐藏的参数,进行函数调用时,会把调用对象的地址(this指针)传进函数,友元和普通函数是没有这个参数的;
而且重载>> 和 <<必须用友元或者普通函数(这个前提是不访问类的私有成员)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoalyg
2012-05-08 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2356万
展开全部
1、既然是操作符重载,就必然会访问类的私有成员变量,根据类的封装性要求,除了友元函数外,其他任何外部操作都是违规的,所以不能用普通函数来重载操作符。
2、赋值操作符的重载函数在没有显式定义的情况下,编译程序会自动生成,即使类成员变量包含有指针,也会将指针的值给予复制,所以往往会造成多个实例共享一个存储空间的尴尬局面,当最先定义的类被析构后,尚存的实例还在指向已被释放的存储空间,从而造成成员变量的值已经销毁,而该实例还存在的难以接受的现实。
3、赋值函数是构造函数的重载,不是普通的成员函数,不能用对象来调用,该函数只需一个同类型的参数,且以常量、引用的方式出现,而友元函数的参数与被重载的运算符要求的数量一致,比如+,-、*、/等都需要两个参数,这些概念与数学概念类似,而赋值操作符=在数学概念中不是运算符,所以说,运算符重载的友元函数的参数不会低于2个(这些运算符是数学概念中的运算符)。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式