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

程序代碼
#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;
}
程序的運行結果是
:
Draw Circle
Draw Triangle
Draw Square
從結果可以可以看到,輸出的結果并不是
Draw shape
。
這個就是多態的功效所在了。它直接根據指針實際指向的類型來動態調用了執行的函數。
要使用多態,必須把基類中需要使用多態功能的方法定義為
virtual
,
這樣才能使用多態的強大功能。如果把基類的
draw
方法前面的
virtual
去掉,那么最后輸出的結果將會是
Draw Shape
Draw Shape
Draw Shape
這說明沒有使用多態,只是覆蓋了。
?
?
多態的好處是顯然的,開發者可以利用舊代碼來調用新的方法,這樣軟件供應商可以在不透露技術秘密的情況下發現軟件包,而開發者也可以根據繼承機制從軟件供應商提供的類庫中派生出新類,且能和舊類庫一起工作。
?
此文完。
?????????????????????????參考自《高質量程序設計指南
C/C++
語言》