[問題] &operator vs operator

看板C_and_CPP (C/C++)作者 (麵T)時間10年前 (2015/11/29 15:48), 10年前編輯推噓2(209)
留言11則, 3人參與, 最新討論串1/1
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

11/29 15:55, , 1F
要用 proxy class
11/29 15:55, 1F

11/29 15:56, , 2F
然後自訂 proxy::operator= 和 proxy::operator double
11/29 15:56, 2F

11/29 17:40, , 3F
你這種寫法是依據物件本身的常數性來決定呼叫誰
11/29 17:40, 3F

11/29 17:41, , 4F
因此只要你的 point 不是 const 就一定會呼叫前者
11/29 17:41, 4F

11/30 22:16, , 5F
@一樓,這樣每次呼叫[ ]都會建構/解構proxy,應該會拖累
11/30 22:16, 5F

11/30 22:16, , 6F
不少速度吧
11/30 22:16, 6F

12/01 12:07, , 7F
proxy class 只需維護一個 pointer 或 reference
12/01 12:07, 7F

12/01 12:08, , 8F
我想應該不會有多大負擔吧?
12/01 12:08, 8F
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

12/01 22:33, , 9F
有 operator double 編譯器就會自動幫你接了
12/01 22:33, 9F

12/01 22:34, , 10F
我是指 + - * / 這些; 帶等於的確實還是要自己寫
12/01 22:34, 10F

12/01 22:38, , 11F
謝謝,我會試試
12/01 22:38, 11F
文章代碼(AID): #1MMgsmi6 (C_and_CPP)
文章代碼(AID): #1MMgsmi6 (C_and_CPP)