Re: [問題] 多型的需要???

看板C_and_CPP作者 (好人超)時間16年前 (2009/10/16 04:49), 編輯推噓5(503)
留言8則, 7人參與, 最新討論串5/5 (看更多)
※ 引述《conan77420 (小馬非馬)》之銘言: : 謝謝各位簡單明瞭的例子解說 : 因為我還沒實際寫過多型所以觀念還不是很正確 : 我想問,在這個例子中, : "保養清洗()" 中的實作內容是屬於〝樂器〞中的menber function嗎? : 我記得virtual function 是實作多型的方法,不同的物件做相同的動作 ^^^^^^^^^^^^^^^^^^^^^^ 其實不該這麼說 以樂器的例子來說,每種樂器都要保養清洗 (都有這個函式) 但是他們的保養清洗方式不一樣 (函式的內容不一樣) class 樂器 { public: virtual void 吹奏() = 0; virtual void 保養清洗() = 0; }; class 喇叭 : public 樂器 { public: virtual void 吹奏() { cout << "吹喇叭" << endl; } virtual void 保養清洗() { cout << "洗喇叭" << endl; } }; class 長號 : public 樂器 { public: virtual void 吹奏() { cout << "吹長號" << endl; } virtual void 保養清洗() { cout << "洗長號" << endl; } }; int main() { 樂器 *借來的樂器 = 借一個樂器(); 借來的樂器->吹奏(); 借來的樂器->保養清洗(); } 這樣不管借到了什麼樂器,都能夠以它的方式來吹奏與保養清洗 只要它是樂器的一種(也就是繼承自樂器類別),並且實作了那兩個函式 如果沒有繼承與多型,可能要這麼麻煩: int main() { 樂器 *借來的樂器 = 借一個樂器(); switch (借來的樂器->Type()) { case 喇叭: 吹喇叭(借來的樂器); 保養清洗喇叭(借來的樂器); case 長號: 吹長號(借來的樂器); 保養清洗長號(借來的樂器); // 如果借來的樂器可能有一百種,那這裡就要寫一百個 case // 為每一種樂器呼叫相對應的函式 } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46 ※ 編輯: james732 來自: 140.117.171.46 (10/16 12:53) ※ 編輯: james732 來自: 140.117.171.46 (10/16 12:55)

10/16 12:56, , 1F
看完這個例子, 為什麼突然有些很糟糕的念頭勒....XD
10/16 12:56, 1F

10/16 12:57, , 2F
這只是很單純的學術研究與樂器演奏 (認真貌)
10/16 12:57, 2F

10/16 14:33, , 3F
同一樓, 看前一篇還沒覺得這麼糟糕 XD
10/16 14:33, 3F

10/16 22:20, , 4F
衍生類別裡的清洗函數,要加 virtual 關鍵字的嗎 (?)
10/16 22:20, 4F

10/16 23:49, , 5F
我記得父類別宣告一次就可以,但是為了不忘記,就都加吧?
10/16 23:49, 5F

10/17 00:28, , 6F
針對"介面"而寫程式。實務上,比較困難的是如何抽取這些
10/17 00:28, 6F

10/17 00:29, , 7F
介面。通常都需要有人帶跟指導會比較容易有概念。
10/17 00:29, 7F

10/17 14:21, , 8F
完完全全明白了,整個刺重問題點,謝謝James大!
10/17 14:21, 8F
文章代碼(AID): #1Ar_jTzE (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Ar_jTzE (C_and_CPP)