[問題] 有關&在return type那邊時

看板C_and_CPP (C/C++)作者 (笨笨鳥慢慢飛)時間15年前 (2010/11/07 13:45), 編輯推噓1(1021)
留言22則, 4人參與, 最新討論串1/1
遇到的問題:只是觀念不了解,課本翻不到QAQ 希望得到的正確結果:目前結果是正確的 程式跑出來的錯誤結果:沒錯誤 開發平台:VC++ 2008 Express 有問題的code: ostream& operator << (ostream & output,polynomial& p) { bool empty=0;//測試資料是否為空 if(p.n==1 && p[0].coef==0)//當只有1項(常數項)且係數為0時 { empty=1; } for(int i=p.n-1;i>=0;i--) { if(p[i].coef != 0 || empty)//係數不為0或者多項式為0時 cout<<p[i].coef<<" "<<p[i].exp<<endl; } p.destroy(); return output; } node& polynomial::operator [](int index) { node* temp=&first;//temp為暫存,指向常數項的位置 for(int i=0;i<index;i++)//index為0則回傳常數項,否則回傳下index項 { temp=temp->link; } return *temp; } 補充說明: 上面的code只是我最近寫程式時剛好寫到的 只是寫完後對於&擺在return type那邊的觀念一直很模糊 我想大家應該也會覺得不知道在寫什麼還寫下去是件很不好的事吧@@ node和polynomial是我宣告的type(其實function內容不是重點啊@@) 我是感覺&擺在return type好像是回傳某個物件的位置,又好像是回傳那物件 究竟電腦實際上在處理這東西時是怎麼處理的啊??? 這問題的答案應該也可以解決為什麼這兩個operator overloading的return type一定要有 &吧??? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.50.53 ※ 編輯: stupid2 來自: 220.132.50.53 (11/07 13:46)

11/07 14:18, , 1F
operator << 回傳 & 是為了支援串接式的寫法, [] 回傳
11/07 14:18, 1F

11/07 14:20, , 2F
& 是為了可以讓你更改到本來的那個物件, 像是呼叫其
11/07 14:20, 2F

11/07 14:20, , 3F
成員函式來改變狀態
11/07 14:20, 3F

11/07 14:29, , 4F
Type &function(); 這裡的 & 是 reference 的意思
11/07 14:29, 4F

11/07 14:30, , 5F
回傳是物件的本身,而非位置
11/07 14:30, 5F

11/07 14:37, , 6F
不過你想要回傳其他型態的值也是可以, 不過重載運算子
11/07 14:37, 6F

11/07 14:37, , 7F
的時候必須考慮到他未來會被怎樣使用, 以及是否提供和
11/07 14:37, 7F

11/07 14:38, , 8F
內建型態一樣的用法 http://ppt.cc/sYTA 不至於讓呼叫
11/07 14:38, 8F

11/07 14:38, , 9F
的人混亂
11/07 14:38, 9F

11/07 14:40, , 10F
補充一點, 如果你要胡搞瞎搞最好還是自己寫具名函式,
11/07 14:40, 10F

11/07 14:41, , 11F
通常重載這些運算子意味著不好的設計, 也是很多人批評
11/07 14:41, 11F

11/07 14:41, , 12F
C++ 的一個點
11/07 14:41, 12F

11/07 14:44, , 13F
原本我以為寫operator overloading是比較好的ㄝ@@
11/07 14:44, 13F

11/07 14:45, , 14F
雖然目前主要是覺得會讓程式看起來乾淨一點
11/07 14:45, 14F

11/07 14:47, , 15F
挑剔一點的人會說「既然你提供 <<那有沒有提供 >> ?」
11/07 14:47, 15F

11/07 14:47, , 16F
「你有提供[], 是不是也有 * 跟 ->」, 如果比大小你有
11/07 14:47, 16F

11/07 14:48, , 17F
提供 == , 那麼通常 > < >= <= != 都要一起給, 為的只
11/07 14:48, 17F

11/07 14:49, , 18F
是讓他使用起來像內建型別, 重載運算子就是有附帶這個
11/07 14:49, 18F

11/07 14:50, , 19F
責任, 如果你沒有履行這樣的責任, 而是為了自己方便重
11/07 14:50, 19F

11/07 14:50, , 20F
載, 那麼整個程式重用性也會降低, 甚至可讀性已經低了
11/07 14:50, 20F

11/07 14:51, , 21F
了解love大所說的東西了~我還停留在方便自己的階段QAQ
11/07 14:51, 21F

04/30 22:06, , 22F
有看有推
04/30 22:06, 22F
文章代碼(AID): #1CrZpj55 (C_and_CPP)
文章代碼(AID): #1CrZpj55 (C_and_CPP)