Re: [問題] 當指標連續函式呼叫遇上代理類別
※ 引述《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
06/12 03:35, 1F
推
06/12 14:58, , 2F
06/12 14:58, 2F
→
06/12 14:59, , 3F
06/12 14:59, 3F
→
06/12 14:59, , 4F
06/12 14:59, 4F
→
06/12 15:00, , 5F
06/12 15:00, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):