Re: [問題] class 的object

看板C_and_CPP作者 ((short)(-15074))時間14年前 (2009/11/10 14:26), 編輯推噓5(500)
留言5則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《Dreamer77 (追夢)》之銘言: : [問題2] : 如果B繼承A : 書上總是舉這個例子 : A *a = new A(); : A *b = new B(); : 用於解釋memeber function 會如何被呼叫 以及virtual的相關問題 : 但我不理解的是為什麼不宣告成 : B *b = new B(); : 宣告成A *b = new B(); 相較起來會有什麼用途嗎 : 謝謝 推文好像有點慢 例如這樣: class Car {public: virtual void drive(); virtual void clean();}; class Benz : public Car {public: void drive(); void clean(); void playMovie(Movie *m);}; class Toyota : public Car {public: void drive(); void clean();}; class Hyundai : public Car {public: void drive(); void clean(); void openTopWindow();}; 那我只要知道我拿到一個 Car * 就可以 drive() 像是: void GoTraveling(Car *mycar) { mycar.drive(); } 我甚至不需要在這裡就知道它其實是 Benz * 還是 Toyota * 還是 Hyundai * 又或者是一個停車場 Car *parkingLot[10]; 我可以讓三種車都停進去: Benz *Sanzenin = new Benz(); Toyota *Katsura = new Toyota(); Hyundai *Nishizawa = new Hyundai(); parkingLot[0] = Sanzenin; parkingLot[1] = Katsura; parkingLot[2] = Nishizawa; 那某個管理員想要清理車子: Car *Tennousu; for(i=0; i<=2; i++) { Tennousu=parkingLot[i]; //雖然 parkingLot[i]->clean(); 也可以 Tennousu->clean(); //不過這樣就沒梗了(誤)原PO應該會比較能理解.... } 就可以很方便的跑完 這個就是推文裡說的「多形」 好像旋風管家的梗用的有點多...囧> 當然有些特定功能就不能用 像 Benz 裡多了 playMovie() Hyundai 裡多了 openTopWindow() 這樣雖然我們有 Movie *FourteenthTarget=Tachibana.rent("Fourteenth Target");//這裡是柯南梗 囧> 管理員卻沒辦法用 Tennousu->playMovie(FourteenthTarget); //compile error 或是 Tennousu->openTopWindow(); //compile error too 因為她只知道 Car 該有的東西 但知道它是 Benz * 的管家就可以放電影給大小姐看: Benz *Ayasaki = dynamic_cast<Benz *>(parkingLot[0]); Ayasaki->playMovie(FourteenthTarget); //ok 知道它是 Hyundai * 的人也可以打開天窗: Hyundai *Hamster = dynamic_cast<Hyundai *>(parkingLot[2]); Hamster->openTopWindow(); -- 一定是等一下某科期中考壓力太大才在這裡玩梗...= = -- 'You've sort of made up for it tonight,' said Harry. 'Getting the sword. Finishing the Horcrux. Saving my life.' 'That makes me sound a lot cooler then I was,' Ron mumbled. 'Stuff like that always sounds cooler then it really was,' said Harry. 'I've been trying to tell you that for years.' -- Harry Potter and the Deathly Hollows, P.308 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.92 ※ 編輯: LPH66 來自: 140.112.28.92 (11/10 14:27)

11/10 19:52, , 1F
推這篇,多型講的好清楚XD
11/10 19:52, 1F

11/10 20:24, , 2F
說得很清楚... good
11/10 20:24, 2F

11/10 20:28, , 3F
推講解; 順便祝考試順利:)
11/10 20:28, 3F

11/11 00:31, , 4F
push
11/11 00:31, 4F

11/11 14:40, , 5F
推~~初學者也可以一看就懂
11/11 14:40, 5F
文章代碼(AID): #1A-GUmc0 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1A-GUmc0 (C_and_CPP)