永发信息网

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

答案:4  悬赏:70  手机版
解决时间 2021-03-02 07:35
为什么C++重载赋值运算符 必须要用成员函数 而不能用普通或者友元 麻烦详细答案
最佳答案
1、既然是操作符重载,就必然会访问类的私有成员变量,根据类的封装性要求,除了友元函数外,其他任何外部操作都是违规的,所以不能用普通函数来重载操作符。
2、赋值操作符的重载函数在没有显式定义的情况下,编译程序会自动生成,即使类成员变量包含有指针,也会将指针的值给予复制,所以往往会造成多个实例共享一个存储空间的尴尬局面,当最先定义的类被析构后,尚存的实例还在指向已被释放的存储空间,从而造成成员变量的值已经销毁,而该实例还存在的难以接受的现实。
3、赋值函数是构造函数的重载,不是普通的成员函数,不能用对象来调用,该函数只需一个同类型的参数,且以常量、引用的方式出现,而友元函数的参数与被重载的运算符要求的数量一致,比如+,-、*、/等都需要两个参数,这些概念与数学概念类似,而赋值操作符=在数学概念中不是运算符,所以说,运算符重载的友元函数的参数不会低于2个(这些运算符是数学概念中的运算符)。
全部回答
那是因为赋值运算符是单目运算符,注意看赋值是怎么运用的 j = i; 不想加法之类的双目运算符 j = 5 + 6; 你难道想定义一个这样的普通函数在表达赋值? const int& operator = (const int& val) { return val; } 请问你觉不觉得它非常的怪,基本上就是一个没用的函数。
可以用友元和普通函数的,但是你用成员函数中,函数参数中有个隐藏的参数,进行函数调用时,会把调用对象的地址(this指针)传进函数,友元和普通函数是没有这个参数的; 而且重载>> 和 <<必须用友元或者普通函数(这个前提是不访问类的私有成员)
赋值
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【历时】历时的研究和共时的研究指的是什么?
小升初分班考试考进一班的分数线大概是多少啊
今天向一个有男朋友的女生表白,女生说要考虑
哥哥被严重烧伤需要三十万医药费,可是我家穷
中国电信丁里营业厅地址在哪,我要去那里办事
公司上市前,怎么做股权激励
常见的几何体有哪些?简单几何体如何分类
和鸿纸制品厂地址有知道的么?有点事想过去
口袋妖怪炎帝什么版本的
怎么吃都不会饱的神兽有哪些饕餮什么的
文管的播音是什么
仁德医药奎屯NO.8在什么地方啊,我要过去处理
腐女是什么,是女人吗
Kitty usually has lunch at school划线提问,
有谁知道双蝶恋主题酒店的,我想问问这个项目
推荐资讯
南京俏夕阳中奖南京这次中奖为什么不发将品要
爱诺造型这个地址在什么地方,我要处理点事
以后的以后,歌词是什么
安溪裕福明珠房贷每个月需要多少钱
建设银行信用卡车贷专款批准了,怎么额度还是
地藏王菩萨和帝幽,还有目莲键尊者哪个厉害?
怎么检测体内的辐射量
java trim()方法哪位高手给解释一下这段
率土之滨黄月英怎么搭配战法 黄月英战法介绍
1除以7的商的小数点右边第100位上的数字是多
有一种病毒,能够晚上自动开机,然后出现女鬼
歌词有一滴泪留在眼帘
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?