Re: [問題] 當指標連續函式呼叫遇上代理類別

看板C_and_CPP作者 (-858993460)時間15年前 (2010/06/12 02:40), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串4/4 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 借提順便問一下 : 如果main include test.h就一切解決了 : 但如果include test.h 是不是就失去proxy的意義阿其實不是很確定.... : 問題應該是出在第一次呼叫set回傳test&你又用這去呼叫了set : 但我試著去改一下 : 如果把set全部return this回傳test* : 如果main不include test.h情況下 : 只呼叫一次 abc.setTime(~~~); 是OK的 : 但如果還是return test& 連呼叫一次都不OK : 差異在哪裡呢?? 你要搞清楚原 PO 寫的兩個 setTime 分別是誰的 第一次是 class proxy 的 第二次則是 class test 的 再配合上 main 裡只看得到哪些東西 這樣就知道為什麼了 : 再問一個問題 : class XXX : { : 裡面只寫 void Foo(); 這樣叫宣告嗎?? : } : 那這整包class包一堆宣告 這算是class的宣告? : 那單純寫 class XXX;這又算是稱為什麼? : 到現在我還是分不清要怎麼稱呼 : 所以只要.cpp在上面 要用class物件之前要讓.cpp知道class{}這種宣告 : 他就會去link真正定義裡面這些function的cpp : 有了宣告才有辦法算大小 才知道要怎麼跳offset這樣嗎 : 以上請大大解惑@@ thx class 裡會有 member variable 和 member function 有些操作會需要知道某個 class 的詳細內容 例如在 class A 中宣告一個 member variable 為 class B 這樣一來為了得知 A 的大小就得知道 B 的大小 這就得去找 B 的定義 或者我想存取某個 B* 的成員 這樣也要知道 class B 裡有什麼東西 但有些操作卻只要知道有 "class B" 這個名字即可 例如像原 PO 寫的 class A 中有一個 member variable 是"指向 class B 的指標" 那麼因為指標的大小是固定的 所以不需要去深究到 B 的內容 只要有 "class B" 這個名字在即可 所以直接寫一個 class B; 就是告訴 compiler 說 "B 這名字是個 class 內容可能稍等會補 不過我寫 B* x; 這個指標你可以先幫我標說它會指到一個這玩意" 所以寫哪一種宣告端看你需要的操作是什麼而定 回到原 PO 的例子 compile 時 header 一 include 進來之後 對 main 這個 compilation unit 來說 他只看到 class proxy 知道裡面有個標做 class test * 的指標 以及幾個 member variable 這樣它就能做出一個 class proxy 的實體了 至於 class test * 到底指向什麼東西沒必要知道 (因為只需要知道它是個指標就行了 我們又不對它指向的東西操作 很像我上一篇說的 handle 的概念對吧?) 對 proxy.cpp 這個 compilation unit 來說 在 proxy.cpp 裡引入了 test.h 這樣它知道了 class test 裡面有什麼東西 這樣才能去對 class test *ptr; 這個指標所指向的東西進行操作 至於 member function 的呼叫是怎麼連在一起的.... 這個我覺得參考我前幾天那篇文章看會比較清楚 那些宣告和 C 當中(寫在 header 裡)的 function prototype 基本上是差不多的東西 所以 compiler/linker 做的事情其實也只不過是和 compile C code 時做的事一樣 並不會因為它是 member function 而比較特別 (因為這東西說穿了不過就是多了一個 this 參數的普通 function 而已嘛) -- "LPH" is for "Let Program Heal us".... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.92

06/12 03:35, , 1F
L 大辛苦了 <(_ _)>
06/12 03:35, 1F

06/12 14:58, , 2F
我是想問下 回傳ref 其實和回傳*不一樣嗎?
06/12 14:58, 2F

06/12 14:59, , 3F
為啥只是abc.setTime(...);回傳ref就出問題...
06/12 14:59, 3F

06/12 14:59, , 4F
不能把ref想成類似指標喔?
06/12 14:59, 4F

06/12 15:00, , 5F
我回傳指標後也沒繼續.下去 出問題的原因是什麼呢?
06/12 15:00, 5F
文章代碼(AID): #1C4eCIgh (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1C4eCIgh (C_and_CPP)