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