看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)
VictorTom:看完這個例子, 為什麼突然有些很糟糕的念頭勒....XD 10/16 12:56
james732:這只是很單純的學術研究與樂器演奏 (認真貌) 10/16 12:57
ledia:同一樓, 看前一篇還沒覺得這麼糟糕 XD 10/16 14:33
archon:衍生類別裡的清洗函數,要加 virtual 關鍵字的嗎 (?) 10/16 22:20
KanoLoa:我記得父類別宣告一次就可以,但是為了不忘記,就都加吧? 10/16 23:49
oist77:針對"介面"而寫程式。實務上,比較困難的是如何抽取這些 10/17 00:28
oist77:介面。通常都需要有人帶跟指導會比較容易有概念。 10/17 00:29
conan77420:完完全全明白了,整個刺重問題點,謝謝James大! 10/17 14:21