亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么C++重載賦值運算符 必須要用成員函數 而不能用普通或者友元

為什么C++重載賦值運算符 必須要用成員函數 而不能用普通或者友元

C++
回首憶惘然 2019-04-08 09:04:26
為什么C++重載賦值運算符 必須要用成員函數 而不能用普通或者友元
查看完整描述

3 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

1、既然是操作符重載,就必然會訪問類的私有成員變量,根據類的封裝性要求,除了友元函數外,其他任何外部操作都是違規的,所以不能用普通函數來重載操作符。
2、賦值操作符的重載函數在沒有顯式定義的情況下,編譯程序會自動生成,即使類成員變量包含有指針,也會將指針的值給予復制,所以往往會造成多個實例共享一個存儲空間的尷尬局面,當最先定義的類被析構后,尚存的實例還在指向已被釋放的存儲空間,從而造成成員變量的值已經銷毀,而該實例還存在的難以接受的現實。
3、賦值函數構造函數的重載,不是普通的成員函數,不能用對象來調用,該函數只需一個同類型的參數,且以常量、引用的方式出現,而友元函數的參數與被重載的運算符要求的數量一致,比如+,-、*、/等都需要兩個參數,這些概念與數學概念類似,而賦值操作符=在數學概念中不是運算符,所以說,運算符重載友元函數的參數不會低于2個(這些運算符是數學概念中的運算符)。

查看完整回答
反對 回復 2019-04-09
?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

可以用友元和普通函數的,但是你用成員函數中,函數參數中有個隱藏的參數,進行函數調用時,會把調用對象的地址(this指針)傳進函數,友元和普通函數是沒有這個參數的;
而且重載>> 和 <<必須用友元或者普通函數(這個前提是不訪問類的私有成員)

查看完整回答
反對 回復 2019-04-09
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

那是因為賦值運算符單目運算符,注意看賦值是怎么運用的
j = i;
不想加法之類的雙目運算符
j = 5 + 6;
你難道想定義一個這樣的普通函數在表達賦值?
const int& operator = (const int& val)
{
return val;
}



查看完整回答
反對 回復 2019-04-09
  • 3 回答
  • 0 關注
  • 1762 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號