C++
中的多態(tài)一例
??????C++
為我們提供了多態(tài)的功能,什么是多態(tài)呢,我的理解就是如果把指向派生類對象的指針賦值給基類指針,那么通過這個(gè)基類指針調(diào)用繼承的函數(shù)的時(shí)候會(huì)根據(jù)指針指向的對象類型來動(dòng)態(tài)的調(diào)用所需要的方法,這種特性就是多態(tài)了。(除了這個(gè)之外好像函數(shù)重載也是一種)
???可以先看下面一段程序:

程序代碼
#include?<iostream>
using?namespace?std;
class?Shape
{
public:
????virtual?void?draw()
????{
????????cout<<"Draw?shape"<<endl;
????}
};
class?Circle:?public?Shape
{
public:
????virtual?void?draw()
????{
????????cout<<"Draw?Circle"<<endl;
????}
};
class?Triangle:?public?Shape
{
public:
????virtual?void?draw()
????{
????????cout<<"Draw?Triangle"<<endl;
????}
};
class?Square:?public?Shape
{
public:
????virtual?void?draw()
????{
????????cout<<"Draw?Square"<<endl;
????}
};
int?main()
{
????Shape?*pShape?=?NULL;
????Circle?aCircle;
????Triangle?aTriangle;
????Square?aSquare;
????pShape=?&aCircle;
????pShape->draw();
????pShape=?&aTriangle;
????pShape->draw();
????pShape=&aSquare;
????pShape->draw();
????return?0;
}
程序的運(yùn)行結(jié)果是
:
Draw Circle
Draw Triangle
Draw Square
從結(jié)果可以可以看到,輸出的結(jié)果并不是
Draw shape
。
這個(gè)就是多態(tài)的功效所在了。它直接根據(jù)指針實(shí)際指向的類型來動(dòng)態(tài)調(diào)用了執(zhí)行的函數(shù)。
要使用多態(tài),必須把基類中需要使用多態(tài)功能的方法定義為
virtual
,
這樣才能使用多態(tài)的強(qiáng)大功能。如果把基類的
draw
方法前面的
virtual
去掉,那么最后輸出的結(jié)果將會(huì)是
Draw Shape
Draw Shape
Draw Shape
這說明沒有使用多態(tài),只是覆蓋了。
?
?
多態(tài)的好處是顯然的,開發(fā)者可以利用舊代碼來調(diào)用新的方法,這樣軟件供應(yīng)商可以在不透露技術(shù)秘密的情況下發(fā)現(xiàn)軟件包,而開發(fā)者也可以根據(jù)繼承機(jī)制從軟件供應(yīng)商提供的類庫中派生出新類,且能和舊類庫一起工作。
?
此文完。
?????????????????????????參考自《高質(zhì)量程序設(shè)計(jì)指南
C/C++
語言》