有關過載運算子的一些思考

2022-09-12 19:00:21 字數 623 閱讀 8968

過載「+」運算子後,執行a + b + c報錯的原因分析:

1.所謂函式不能返回臨時變數的引用,是指區域性變數bai在棧空間中分配記憶體,函式返回du時棧指標回退,當主調函式繼續調zhi用其它被調函式時,棧指標上移,上一次函式呼叫所分配的空間會被本次呼叫覆蓋,如果此時再引用原來的區域性變數就會出現不可預見的結果

2.不論是成員還是非成員過載運算子,如果返回值型別是物件(不是引用),並且引數列表中的型別是引用,那麼可能無法進行連續運算時比如a+b+c,b+c的返回值是個臨時物件,不能為其繫結引用。如果返回引用,那麼對於+運算會返回乙個臨時物件的引用,也可能會出問題(根據第一點)

3.所以如果過載類似+、-這樣產生乙個新物件的同時不改變原有引數的運算,可能無法進行連續運算比如a+b+c!

4.一點補充,無論是成員函式過載還是非成員函式過載都可能遇到這個問題,不過順序不同。成員函式過載「+」返回型別是物件時,可以執行(a+b)+c(因為臨時物件作為運算子函式的訪問者而不是引數)不能執行a+(b+c)。非成員函式過載「+」返回型別是物件時,兩種順序均無法執行。

5.過載輸出運算子「<

關於過載運算子的思考

在c 中過載運算子,能使運算子的功能得到擴充套件,如能夠支援對類或結構體的操作.其實過載運算子也是一種特殊的函式呼叫方式,過載的方式有兩種,一種是作為成員函式,一種是作為友元函式。其中 只能作為成員函式進行過載,類屬關係運算子 成員指標運算子 作用域運算子 sizeof運算子和三目運算子 是不能夠過...

過載運算子

題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...

過載運算子

include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...