日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > C語(yǔ)言與CPP編程
[導(dǎo)讀]來(lái)源:https://www.cnblogs.com/QG-whz/p/5132745.html前言今日的C不再是個(gè)單純的“帶類的C”語(yǔ)言,它已經(jīng)發(fā)展成為一個(gè)多種次語(yǔ)言所組成的語(yǔ)言集合,其中泛型編程與基于它的STL是C發(fā)展中最為出彩的那部分。在面向?qū)ο驝編程中,多態(tài)是OO三大特性...

來(lái)源https://www.cnblogs.com/QG-whz/p/5132745.html

前言

今日的C 不再是個(gè)單純的“帶類的C”語(yǔ)言,它已經(jīng)發(fā)展成為一個(gè)多種次語(yǔ)言所組成的語(yǔ)言集合,其中泛型編程與基于它的STL是C 發(fā)展中最為出彩的那部分。在面向?qū)ο驝 編程中,多態(tài)是OO三大特性之一,這種多態(tài)稱為運(yùn)行期多態(tài),也稱為動(dòng)態(tài)多態(tài);在泛型編程中,多態(tài)基于template(模板)的具現(xiàn)化與函數(shù)的重載解析,這種多態(tài)在編譯期進(jìn)行,因此稱為編譯期多態(tài)或靜態(tài)多態(tài)。在本文中,我們將了解:
  • 什么是運(yùn)行期多態(tài)
  • 什么是編譯期多態(tài)
  • 它們的優(yōu)缺點(diǎn)在哪

運(yùn)行期多態(tài)

運(yùn)行期多態(tài)的設(shè)計(jì)思想要?dú)w結(jié)到類繼承體系的設(shè)計(jì)上去。對(duì)于有相關(guān)功能的對(duì)象集合,我們總希望能夠抽象出它們共有的功能集合,在基類中將這些功能聲明為虛接口(虛函數(shù)),然后由子類繼承基類去重寫(xiě)這些虛接口,以實(shí)現(xiàn)子類特有的具體功能。典型地我們會(huì)舉下面這個(gè)例子:

class Animal
{
public :
virtual void shout() = 0;
};
class Dog :public Animal
{
public:
virtual void shout(){ cout << "汪汪!"<<endl; }
};
class Cat :public Animal
{
public:
virtual void shout(){ cout << "喵喵~"<<endl; }
};
class Bird : public Animal
{
public:
virtual void shout(){ cout << "嘰喳!"<<endl; }
};

int main()
{
Animal * anim1 = new Dog;
Animal * anim2 = new Cat;
Animal * anim3 = new Bird;

//藉由指針(或引用)調(diào)用的接口,在運(yùn)行期確定指針(或引用)所指對(duì)象的真正類型,調(diào)用該類型對(duì)應(yīng)的接口
anim1->shout();
anim2->shout();
anim3->shout();

//delete 對(duì)象
...
return 0;
}
運(yùn)行期多態(tài)的實(shí)現(xiàn)依賴于虛函數(shù)機(jī)制。當(dāng)某個(gè)類聲明了虛函數(shù)時(shí),編譯器將為該類對(duì)象安插一個(gè)虛函數(shù)表指針,并為該類設(shè)置一張唯一的虛函數(shù)表,虛函數(shù)表中存放的是該類虛函數(shù)地址。運(yùn)行期間通過(guò)虛函數(shù)表指針與虛函數(shù)表去確定該類虛函數(shù)的真正實(shí)現(xiàn)。運(yùn)行期多態(tài)的優(yōu)勢(shì)還在于它使處理異質(zhì)對(duì)象集合稱為可能://我們有個(gè)動(dòng)物園,里面有一堆動(dòng)物
int main()
{
vectoranims;

Animal * anim1 = new Dog;
Animal * anim2 = new Cat;
Animal * anim3 = new Bird;
Animal * anim4 = new Dog;
Animal * anim5 = new Cat;
Animal * anim6 = new Bird;

//處理異質(zhì)類集合
anims.push_back(anim1);
anims.push_back(anim2);
anims.push_back(anim3);
anims.push_back(anim4);
anims.push_back(anim5);
anims.push_back(anim6);

for (auto
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉