作者查詢 / scale0125

總覽項目: 發文 | 留言 | 暱稱
作者 scale0125 在 PTT [ C_and_CPP ] 看板的留言(推文), 共50則
限定看板:C_and_CPP
首頁
上一頁
1
下一頁
尾頁
[問題] 關於多型的問題
[ C_and_CPP ]98 留言, 推噓總分: +2
作者: scale0125 - 發表於 2014/02/05 11:20(12年前)
7Fscale0125:感謝F大的解答,我比較疑或的是我用了繼承,為何02/05 12:09
8Fscale0125:printB2 在 A,B 中是不同的。02/05 12:11
12Fscale0125:所以我可以說 printB2在B中有兩個嗎?02/05 12:15
13Fscale0125:因為沒有加virtual 所以有一個是public,另一個是privat02/05 12:16
15Fscale0125:這樣也不算是overloading,我的參數都是空的02/05 12:16
23Fscale0125:這樣說來,一開始在B裡沒有寫public: 的話02/05 13:29
24Fscale0125:printB1,printB2都算B裡新的private的函數02/05 13:31
25Fscale0125:而非所謂的override了,是這樣嗎?但是加了virtual卻有效02/05 13:32
29Fscale0125:剛剛就第二個case把virtual拿掉02/05 14:13
30Fscale0125:出現ABCDABAB*****************ABCDABAB02/05 14:14
31Fscale0125:本來預期出現 ABABABAB*****************ABABABAB 說02/05 14:14
35Fscale0125:可是我Class B裡的 method都是放在public:底下02/05 14:17
37Fscale0125:在沒有virtual的狀況下 應該是要執行父類別的02/05 14:18
41Fscale0125:因為我看書上是說 子類別的public:底下是放新的method或02/05 14:21
42Fscale0125:放 要override的 method02/05 14:21
44Fscale0125:您第一推的多形我大概了解,反而是子類別宣告放子物件02/05 14:23
45Fscale0125:我目前還沒想通02/05 14:23
47Fscale0125:也是,感謝大大回答,我再整理一下,感謝感謝。02/05 14:29
48Fscale0125:我發現我不懂的是 子物件b呼叫doPrintB1,doPrintB2時02/05 16:04
49Fscale0125:不是直接調用自己的而是還要使用父類別的doPrintB1,02/05 16:05
50Fscale0125:及doPrintB202/05 16:05
53Fscale0125:以case1的例子就是找父類別的,對吧~~02/05 16:15
54Fscale0125:然後 父類別的doPrintB1,doPrintB2裡面的method是父子02/05 16:17
56Fscale0125:都有的02/05 16:17
58Fscale0125:就是remark沒有拿掉 ClassB裡面只有printB1,printB202/05 16:18
60Fscale0125:此時子物件透過doPrintB1,doPrintB2去找父類別裡的02/05 16:21
61Fscale0125:printB1,printB202/05 16:21
62Fscale0125:我不懂的是 子物件也有printB1,printB202/05 16:21
63Fscale0125:為何不是直接去找子類別的printB1,printB202/05 16:22
64Fscale0125:因為b本身是子物件,宣告時也是用子類別宣告02/05 16:23
65Fscale0125:我以為就只是繼承doPrintB1,doPrintB2然後去找自己的02/05 16:24
66Fscale0125:printB1,printB202/05 16:25
68Fscale0125:但是繼承的話不是會把父類別的函式放到子類別中~~02/05 16:26
71Fscale0125:因為我用java卻去寫 子物件,宣告時也是用子類別宣告02/05 16:34
72Fscale0125:然後也是不在子類別裡寫doPrintB1,doPrintB202/05 16:35
74Fscale0125:結果卻是呼叫子類別的printB1,printB202/05 16:36
76Fscale0125:所以一直想不通。02/05 16:37
77Fscale0125:沒有 所以在java裡面其實只有實驗doPrintB2呼叫printB202/05 16:38
78Fscale0125:但我都是用 子類別宣告,子物件去做呼叫02/05 16:40
80Fscale0125:printB1有加,printB2沒有02/05 16:43
82Fscale0125:都加的話 b.doPrintB1印出C , b.doPrintB1印出D02/05 16:48
84Fscale0125:恩該怎麼說呢,我以為在case1的情況下,02/05 16:51
85Fscale0125:不管有沒有加virtual, 子類別宣告,子物件去做呼叫02/05 16:51
86Fscale0125:doPrintB1,doPrintB2 都應該是 C 和 D02/05 16:52
88Fscale0125:當然這是我在實際跑程式之前"自己認為"02/05 16:54
92Fscale0125:所以我才會有case2出來,才知道case1不是我想的那樣將02/05 16:58
93Fscale0125:doPrintB1,doPrintB2視為子類別的method02/05 16:59
94Fscale0125:再次感謝F大花了那麼多時間協助 <(__)>02/05 17:00
97Fscale0125:恩 我算是用結果論去猜02/05 17:03
98Fscale0125:所以遇到不同題型就掛了...02/05 17:07
首頁
上一頁
1
下一頁
尾頁