Re: [問題] 關於Class指標的觀念

看板C_and_CPP (C/C++)作者 (「雄辯是銀,沉默是金」)時間11年前 (2013/09/06 15:16), 編輯推噓2(2018)
留言20則, 6人參與, 最新討論串13/19 (看更多)
原來還有人繼續再追阿! 提供一點後續心得。 這會影響 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

09/06 16:01, , 1F
大魔王應該是虛擬繼承?
09/06 16:01, 1F

09/06 16:28, , 2F
最近版上好像會一直研究特定主題XD
09/06 16:28, 2F

09/06 23:43, , 3F
descent 大大,我想有人還是不清楚為何結果如此這樣,請您說
09/06 23:43, 3F

09/06 23:44, , 4F
說有何高見吧^^
09/06 23:44, 4F

09/06 23:51, , 5F
嗯.. 我錯覺嗎.. 好像有亂碼出現說...
09/06 23:51, 5F

09/06 23:59, , 6F
s3748679: 嗯. 是網頁貼上的問題 XD (&lt; <, &gt; >)
09/06 23:59, 6F

09/07 00:01, , 7F
GNUCCC: 那你說說為什麼指標要分兩部分?
09/07 00:01, 7F

09/07 00:01, , 8F
基本上 G 大的邏輯就是浮點數也是整數. 這樣其實我認同
09/07 00:01, 8F

09/07 00:02, , 9F
哎呀, 才想說問下 G 兄的高見的被樓上搶先了 XD
09/07 00:02, 9F

09/07 00:17, , 10F
F 大大,您說的指標分兩部份是指?
09/07 00:17, 10F

09/07 00:18, , 11F
.. 這篇文章內容不就是分兩個部分嗎.....
09/07 00:18, 11F

09/07 00:18, , 12F
那「浮點數也是整數」,這個好像不是我的邏輯耶^^
09/07 00:18, 12F

09/07 00:19, , 13F
但是浮點數也是用整數兜出來的阿
09/07 00:19, 13F

09/07 00:21, , 14F
一個一個慢慢來,一個問題未解又提另一個問題,descent 大大,
09/07 00:21, 14F

09/07 00:21, , 15F
您怎麼說?
09/07 00:21, 15F

09/07 00:21, , 16F
他不在. 你可以幫忙回答一下嗎 @@
09/07 00:21, 16F

09/07 00:22, , 17F
我該講的都講了,如果不懂的請看前面我討論過的內容,至於還
09/07 00:22, 17F

09/07 00:23, , 18F
是不懂為何請教 descent 大大吧^^
09/07 00:23, 18F

09/07 00:23, , 19F
了解. 我問個真的懂的人 :)
09/07 00:23, 19F

09/07 00:25, , 20F
T::*和void*的差別是沒禮貌的問題,G大是不會回答你的
09/07 00:25, 20F
文章代碼(AID): #1IAO5dHs (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1IAO5dHs (C_and_CPP)