[問題] 簡單的C++問題

看板C_and_CPP (C/C++)作者 (James)時間15年前 (2011/06/08 16:11), 編輯推噓1(1010)
留言11則, 4人參與, 最新討論串1/1
我使用的 Visual C++ 6.0版本 目前碰到了一個問題 底下是我的程式碼 #include <iostream> using namespce std; class coord { int x , y; public: coord() {x = 0;y = 0;} ~coord() {cout << "Here\n"} coord operator+(coord &ob2); } coord coord::operator+(coord &ob2) { coord temp; temp.x = x + ob2.x; temp.y = y + ob2.y; return temp; } void main() { coord ob1(10,10) , ob2(5,3) , o3; cout << "Before\n"; ob3 = ob1 + ob2; cout << "After\n"; } 上面的執行結果是 Before Here Here After Here Here Here 我想要問的是 為什麼Before後面會有2個 "Here" 我的認知是: 第一個Here就是暫存物件temp的~coord() 由於ob2的傳入是用reference的方式 那麼就只剩下ob1了 可是我這本書有寫一句話意思是說 當二元運算子被超載時 左邊的運算元被隱含似的 以this傳到函數中而右邊的運算元則由函數引數方式傳遞 所以照課本講的ob1是以this傳進函數 而這個this那不是傳ob1物件的位址嗎??(還是我搞錯了 ??) 那如果是傳位址為什麼還會~coord()呢?? 還是第二個解構子發生是別的東西?? 謝謝各位的指導 (小弟觀念不佳 麻煩指點) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.56.170

06/08 16:30, , 1F
vc6 編這 code 會過?
06/08 16:30, 1F

06/08 16:33, , 2F
第二個 Here 來自 + 的回傳值
06/08 16:33, 2F

06/08 16:35, , 3F
VC6會過 我已經有run
06/08 16:35, 3F

06/08 16:36, , 4F
你貼上來的 code 錯誤有點多,而且 cord(int,int)也沒貼
06/08 16:36, 4F

06/08 16:37, , 5F
所謂 + 的回傳值是什麼 operator+() 不是一個函數嗎? 那回
06/08 16:37, 5F

06/08 16:38, , 6F
我看到了 初始化問題(拍謝) 我的問題只是要問為什麼會有2個
06/08 16:38, 6F

06/08 16:39, , 7F
here 我認為+這個函數做完就只會回傳temp 然後temp消失
06/08 16:39, 7F

06/08 16:40, , 8F
return temp (第一個) -> copy to stack or reg (第二個)
06/08 16:40, 8F

06/08 18:31, , 9F
我覺得應該是 ob2被+再建構一次 temp也被建構一次
06/08 18:31, 9F

06/08 18:32, , 10F
然後離開加法運算之後的destructor
06/08 18:32, 10F

06/09 00:37, , 11F
第一個是區域變數temp 第二個是暫存變數(ob1+ob2)
06/09 00:37, 11F
文章代碼(AID): #1Dxowaia (C_and_CPP)
文章代碼(AID): #1Dxowaia (C_and_CPP)