作者james732 (好人超)
站内C_and_CPP
标题Re: [问题] 多型的需要???
时间Fri Oct 16 12:49:32 2009
※ 引述《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)
1F:推 VictorTom:看完这个例子, 为什麽突然有些很糟糕的念头勒....XD 10/16 12:56
2F:→ james732:这只是很单纯的学术研究与乐器演奏 (认真貌) 10/16 12:57
3F:推 ledia:同一楼, 看前一篇还没觉得这麽糟糕 XD 10/16 14:33
4F:推 archon:衍生类别里的清洗函数,要加 virtual 关键字的吗 (?) 10/16 22:20
5F:推 KanoLoa:我记得父类别宣告一次就可以,但是为了不忘记,就都加吧? 10/16 23:49
6F:→ oist77:针对"介面"而写程式。实务上,比较困难的是如何抽取这些 10/17 00:28
7F:→ oist77:介面。通常都需要有人带跟指导会比较容易有概念。 10/17 00:29
8F:推 conan77420:完完全全明白了,整个刺重问题点,谢谢James大! 10/17 14:21