作者descent (「雄辯是銀,沉默是金」)
看板C_and_CPP
標題Re: [問題] 關於Class指標的觀念
時間Fri Sep 6 15:16:52 2013
原來還有人繼續再追阿!
提供一點後續心得。
這會影響 member function pointer 第一部份。
1 #include <iostream>
2 #include <cstdio>
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)() = &A::abc;
28 A a;
29 (a.*p)();
30
31 return 0;
32 }
member function pointer 的第二部份
1 #include <iostream>
2 #include <cstdio>
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)() = &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 (< <, > >) 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