Re: [問題] class 的object
※ 引述《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
11/10 19:52, 1F
推
11/10 20:24, , 2F
11/10 20:24, 2F
推
11/10 20:28, , 3F
11/10 20:28, 3F
推
11/11 00:31, , 4F
11/11 00:31, 4F
推
11/11 14:40, , 5F
11/11 14:40, 5F
討論串 (同標題文章)