看板 C_and_CPP 關於我們 聯絡資訊
class point { private: bool changed; double data[3]; public: double &operator [](int i) { changed = true; return data[i]; } double operator [](int i) const { return data[i]; } } 重載了兩個operator [], 主要是希望程式可以判別出 point[0] = 5;//changed = true double x = point[0]; 的不同, 但程式現在即使是 x = point[0]; 他也是呼叫 double &operator [](int i) 請問 class 可以做出此功能嗎? 判別資料是否發生改變 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.27.135.136 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1448783280.A.B06.html
bibo9901: 要用 proxy class11/29 15:55
bibo9901: 然後自訂 proxy::operator= 和 proxy::operator double 11/29 15:56
LPH66: 你這種寫法是依據物件本身的常數性來決定呼叫誰11/29 17:40
LPH66: 因此只要你的 point 不是 const 就一定會呼叫前者11/29 17:41
noodleT: @一樓,這樣每次呼叫[ ]都會建構/解構proxy,應該會拖累11/30 22:16
noodleT: 不少速度吧11/30 22:16
bibo9901: proxy class 只需維護一個 pointer 或 reference12/01 12:07
bibo9901: 我想應該不會有多大負擔吧?12/01 12:08
class point{ proxy & oprator[] (int n){ return proxy(data[n],changed) } } class proxy class{ private: bool *changed; double *data; public: proxy(double &d,bool &b){ data = &d; changed = &b; } proxy &oprator = (double d){ *changed = true; *data = double; return this; } double operator (double){ return *data; } } 除 operator =, operator double 之外, 還必須自己重寫 operator +-×÷ +=,-=,… 等運算吧? (抱歉,我還沒試這邊) 這些介面操作方法, 會讓class變的需更多時間 在建構/解構上嗎 ※ 編輯: noodleT (110.26.71.227), 12/01/2015 21:57:45 ※ 編輯: noodleT (110.26.71.227), 12/01/2015 22:02:04
LPH66: 有 operator double 編譯器就會自動幫你接了 12/01 22:33
LPH66: 我是指 + - * / 這些; 帶等於的確實還是要自己寫 12/01 22:34
noodleT: 謝謝,我會試試 12/01 22:38