[問題] Inheritance

看板C_and_CPP (C/C++)作者 (かがみは俺の嫁。)時間16年前 (2009/06/11 21:01), 編輯推噓5(5021)
留言26則, 3人參與, 最新討論串1/1
我首先寫了一個Package Class 裡面有一個showDetail()是把Package中的各個data member照格式輸出 該function有呼叫一個Package中的函式calculateCost() 然後我定義了一個derived class TwoDayPackage 並且overload掉原本的calculateCost() 結果在main裡面宣告一個屬於TwoDayPackage的object p1並且call p1.showDetail(); 結果顯示出來的資料並不是overload以後的calculateCost()算出來的結果而是 Package::calculateCost算出來的結果 我就想說是不是base class裡面的function如果有call 該base class 內的另一個 member function時就算有overload掉還是會call base class裡的那一個 所以又在TwoDayPackage裡面定義了(一樣的)showDetail() 結果compile起來有時候是對的有時候是錯的 請問這是compiler defined的東西嗎 還是我compiler的問題 囧 我是用devcpp 我知道很多人不喜歡他不過我們教授是用他所以我也跟著用 最後我是在main裡面直接p1.TwoDayPackage::showDetail才正確 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.65.45

06/11 21:18, , 1F
derived class 是包含base class的東西 當然連calculateCost
06/11 21:18, 1F

06/11 21:19, , 2F
也會在內 你後來那個推論是對的 至於"有時候對 有時候錯"
06/11 21:19, 2F

06/11 21:19, , 3F
你就要好好trace你的程式 到底哪時後會對 哪時後會錯
06/11 21:19, 3F

06/11 21:21, , 4F
可是我有在TwoDayPackage裡面重寫一個calculateCost
06/11 21:21, 4F

06/11 21:22, , 5F
不過 如果老師沒限制作法 不妨考慮virtual function
06/11 21:22, 5F

06/11 21:23, , 6F
這樣在call p1.showDetail 然後由showdetail去call
06/11 21:23, 6F

06/11 21:23, , 7F
calculateCost 的時候他會call的是derived class裡面定義
06/11 21:23, 7F

06/11 21:23, , 8F
的那個還是base class裡面定義的那個呢?
06/11 21:23, 8F

06/11 21:24, , 9F
你做的不是 overloading, 而是 redefining
06/11 21:24, 9F

06/11 21:24, , 10F
註:我想請教的是showDetail只有base class裡有的情況
06/11 21:24, 10F

06/11 21:25, , 11F
你這樣做只會造成名稱遮蔽而已
06/11 21:25, 11F

06/11 21:26, , 12F
啊對 l大說對了 我講錯了 囧>
06/11 21:26, 12F

06/11 21:26, , 13F
Dev-C++ 也不是 compiler
06/11 21:26, 13F

06/11 21:30, , 14F
應該是在你dervied class內去call base class member func()
06/11 21:30, 14F

06/11 21:31, , 15F
配合你derived class 所要的功能 而不是從寫一個
06/11 21:31, 15F

06/11 21:36, , 16F
查了一下原來應該要說是IDE才正確~受教了
06/11 21:36, 16F

06/11 21:37, , 17F
P大是說在derived class裡面的shodetail使用TwoDayPackage
06/11 21:37, 17F

06/11 21:39, , 18F
::calculateCost嗎? 我現在比較好奇的是照我上面
06/11 21:39, 18F

06/11 21:40, , 19F
calculateCost有redefine showDetail沒有的情況下
06/11 21:40, 19F

06/11 21:41, , 20F
去宣告一個TwoDayPackage的物件P然後P.showDetail
06/11 21:41, 20F

06/11 21:42, , 21F
出來的結果showDetail 呼叫的是base class的calculateCost
06/11 21:42, 21F

06/11 21:42, , 22F
是正常的嗎 還是不能確定要看平台? 
06/11 21:42, 22F

06/11 21:43, , 23F
在讀redefine這部分想搞清楚而不是想請教其他寫法~
06/11 21:43, 23F

06/11 21:43, , 24F
謝謝!
06/11 21:43, 24F

06/11 21:47, , 25F
read virtual function first
06/11 21:47, 25F

06/11 21:57, , 26F
好的,謝謝 希望對管院來說不會太深XD
06/11 21:57, 26F
文章代碼(AID): #1ACG0dbQ (C_and_CPP)
文章代碼(AID): #1ACG0dbQ (C_and_CPP)