看板 C_and_CPP 關於我們 聯絡資訊
原來還有人繼續再追阿! 提供一點後續心得。 這會影響 member function pointer 第一部份。 1 #include &lt;iostream&gt; 2 #include &lt;cstdio&gt; 3 4 using namespace std; 5 6 struct A 7 { 8 virtual void func() 9 { 10 printf("i: %d\n", i_); 11 } 12 virtual void abc() 13 { 14 printf("abc i: %d\n", i_); 15 } 16 A() 17 { 18 i_=10; 19 } 20 private: 21 int i_; 22 }; 23 24 25 int main() 26 { 27 void (A::*p)() = &amp;A::abc; 28 A a; 29 (a.*p)(); 30 31 return 0; 32 } member function pointer 的第二部份 1 #include &lt;iostream&gt; 2 #include &lt;cstdio&gt; 3 4 using namespace std; 5 6 struct A 7 { 8 virtual void func() 9 { 10 printf("i: %d\n", i_); 11 } 12 A() 13 { 14 i_=10; 15 } 16 private: 17 int i_; 18 }; 19 20 struct B 21 { 22 virtual void ff() 23 { 24 printf("i: %d\n", i_); 25 } 26 B() 27 { 28 i_=10; 29 } 30 private: 31 int i_; 32 }; 33 34 struct AB : public A, public B 35 { 36 virtual void func() 37 { 38 printf("i am ab\n"); 39 } 40 virtual void ff() 41 { 42 printf("i am ab ff\n"); 43 } 44 }; 45 46 int main() 47 { 48 void (AB::*p)() = &amp;B::ff; 49 AB ab; 50 (ab.*p)(); 51 52 return 0; 53 } 有點沒完沒了的感覺, 就此先打住, 讓有興趣的人研究。 ※ 引述《Feis (永遠睡不著 @@)》之銘言: : ※ 引述《descent (「雄辯是銀,沉默是金」)》之銘言: : <deleted> : : struct A : : { : : virtual void func() : : { : : printf("i: %d\n", i_); : 如果把這行改成 cout << "i: " << i_ << endl; 會發生什麼事情? : 這是在 codepad 上的結果: http://codepad.org/AmbfEhWd : [編輯: 阿. 我知道了! 是 hex ! 對不起. 我笨了. 想了很久 Q_Q] : : 執行結果: : : i: 10 : : vptr_addr:8048af8 : : func_addr:80489b4 : : i: 11 : : i: 10 : : i: 11 : : i: 10 : 此外應該還會有多重繼承的問題? : 例如: http://codepad.org/OwbHBzOZ : [編輯: 結果我想到一個可能的解法?... http://codepad.org/ghjxo44i ] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.239.46
Feis:大魔王應該是虛擬繼承? 09/06 16:01
a27417332:最近版上好像會一直研究特定主題XD 09/06 16:28
GNUGCC:descent 大大,我想有人還是不清楚為何結果如此這樣,請您說 09/06 23:43
GNUGCC:說有何高見吧^^ 09/06 23:44
s3748679:嗯.. 我錯覺嗎.. 好像有亂碼出現說... 09/06 23:51
Feis:s3748679: 嗯. 是網頁貼上的問題 XD (&lt; <, &gt; >) 09/06 23:59
Feis:GNUCCC: 那你說說為什麼指標要分兩部分? 09/07 00:01
Feis:基本上 G 大的邏輯就是浮點數也是整數. 這樣其實我認同 09/07 00:01
LPH66:哎呀, 才想說問下 G 兄的高見的被樓上搶先了 XD 09/07 00:02
GNUGCC:F 大大,您說的指標分兩部份是指? 09/07 00:17
Feis:.. 這篇文章內容不就是分兩個部分嗎..... 09/07 00:18
GNUGCC:那「浮點數也是整數」,這個好像不是我的邏輯耶^^ 09/07 00:18
Feis:但是浮點數也是用整數兜出來的阿 09/07 00:19
GNUGCC:一個一個慢慢來,一個問題未解又提另一個問題,descent 大大, 09/07 00:21
GNUGCC:您怎麼說? 09/07 00:21
Feis:他不在. 你可以幫忙回答一下嗎 @@ 09/07 00:21
GNUGCC:我該講的都講了,如果不懂的請看前面我討論過的內容,至於還 09/07 00:22
GNUGCC:是不懂為何請教 descent 大大吧^^ 09/07 00:23
Feis:了解. 我問個真的懂的人 :) 09/07 00:23
azureblaze:T::*和void*的差別是沒禮貌的問題,G大是不會回答你的 09/07 00:25