Re: [問題] 多型的需要???
※ 引述《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
10/16 12:56, 1F
→
10/16 12:57, , 2F
10/16 12:57, 2F
推
10/16 14:33, , 3F
10/16 14:33, 3F
推
10/16 22:20, , 4F
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
10/17 14:21, 8F
討論串 (同標題文章)