[問題] 重載[][] 下標運算子(架構已定)

看板C_and_CPP作者 (Charlott.HonG)時間7年前 (2016/11/03 18:05), 7年前編輯推噓1(1024)
留言25則, 4人參與, 最新討論串1/1
程式碼連結:https://goo.gl/t7nEkR class raw{ private: unt x; unt y; unt len; vector<uch> img; } 可以做到 raw a(3, 3); cout << a[n] << endl; 或是 a[n] = x; 剛好就讀取道 img 對應的位置沒問題 可是我如果想要用二維的方式讀取自己寫了 a.at2d(x, y); 如果圖是[3x3] 那麼 a.at2d(1, 0); 可以讀寫img[3] 現有結構有方法可以把 a.at2d(1, 0); 置換成 a[1][0] 又不影響 a[pos] 嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.127.112.105 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1478167551.A.5ED.html ※ 編輯: hunandy14 (140.127.112.105), 11/03/2016 18:08:10

11/03 18:42, , 1F
拉出class row,重載uch& row::operator []
11/03 18:42, 1F

11/03 18:42, , 2F
以及重載row& raw::operator[]
11/03 18:42, 2F

11/03 18:43, , 3F
啊我沒有看到不影響a[pos]的需求 唔
11/03 18:43, 3F

11/03 18:45, , 4F
可能可以再讓row能隱式轉換成uch 我覺得很醜就是了
11/03 18:45, 4F

11/03 19:09, , 5F
如果我理解沒錯的話 你想要用一樣的話做兩件不同的事 你
11/03 19:09, 5F

11/03 19:09, , 6F
覺得有辦法嗎…
11/03 19:09, 6F
想說會不會有什麼不知道特別方法~~ ※ 編輯: hunandy14 (218.173.155.186), 11/03/2016 19:38:58

11/03 19:48, , 7F
return一個別的class,支援conversion function與
11/03 19:48, 7F

11/03 19:48, , 8F
operator[]
11/03 19:48, 8F
什麼意思QuQ ※ 編輯: hunandy14 (218.173.155.186), 11/03/2016 21:33:46

11/03 22:56, , 9F
凱薩大大講的可以看書 more effective C++
11/03 22:56, 9F
看起來不錯~我會把他看完的~~

11/03 22:56, , 10F
裡面有個proxy class在講這件事情 我臨時找不到code
11/03 22:56, 10F

11/03 23:17, , 11F
咦…原Po的意思不是用[][]的時候把a當作二維,用[]的時
11/03 23:17, 11F

11/03 23:17, , 12F
候當作一維嗎?
11/03 23:17, 12F

11/03 23:19, , 13F
http://ideone.com/eTTHNU 剛剛大概回想一下
11/03 23:19, 13F

11/03 23:19, , 14F
因為[][]沒辦法重載所以要分兩段
11/03 23:19, 14F

11/03 23:19, , 15F
不知道是不是會錯意
11/03 23:19, 15F

11/03 23:21, , 16F
沒看到沒看到又不影響a[pos]
11/03 23:21, 16F

11/03 23:23, , 17F
原PO講的情況用( )做會比較簡單 要不影響有我沒想到
11/03 23:23, 17F
好屋~

11/04 00:36, , 18F
11/04 00:36, 18F
嗚哇~明天在消化,感謝您~~

11/04 00:48, , 19F
我覺得這不是好寫法。今天要是用3-d array,用一個[]與
11/04 00:48, 19F

11/04 00:48, , 20F
三個[],都能知道是甚麼意思。那如果用兩個[],請問是?
11/04 00:48, 20F

11/04 00:49, , 21F
用明確一點的function來存取會比你只用[]好
11/04 00:49, 21F
對耶!~沒想到 ※ 編輯: hunandy14 (218.173.155.186), 11/04/2016 01:21:36

11/04 01:31, , 22F
明天也來看一下 感謝凱薩大大示範
11/04 01:31, 22F

11/04 11:00, , 23F
大概看懂了 想請問轉型是因為要對應<<所以呼叫的嗎?
11/04 11:00, 23F

11/04 11:19, , 24F
是的。不過再額外提供operator=給assign value比較好
11/04 11:19, 24F

11/04 20:14, , 25F
感謝凱薩大大的回覆 又學到了一課
11/04 20:14, 25F
娃~有看沒有很懂,我再慢慢消化QuQ ※ 編輯: hunandy14 (218.173.155.186), 11/05/2016 22:15:48
文章代碼(AID): #1O6ml_Nj (C_and_CPP)