1.多態(tài)性的概念
多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的第三個(gè)重要特征死姚。
多態(tài)性是指發(fā)出同樣的消息被不同類型的對象接收時(shí)導(dǎo)致完全不同的行為掂为。
消息——主要指對類的成員函數(shù)的調(diào)用础锐。
2.虛函數(shù)的使用方法:
(1)在基類用virtual聲明成員函數(shù)為虛函數(shù)
(2)在派生類中重新定義此函數(shù)瞭郑,要求函數(shù)名胳徽、函數(shù)的參數(shù)個(gè)數(shù)和類型全部與基類的虛函數(shù)相同婿屹,并根據(jù)派生類的需要重新定義函數(shù)體。
(3)定義一個(gè)指向基類對象的指針變量推溃,并使它指向同一類族中的某一對象昂利。
(4)通過該指針變量調(diào)用此虛函數(shù),此時(shí)調(diào)用的就是指針變量指向的對象的同名函數(shù)铁坎。
c++規(guī)定蜂奸,當(dāng)一個(gè)成員函數(shù)被聲明為虛函數(shù)后,其派生類中原型相同的函數(shù)都自動(dòng)成為虛函數(shù)
派生類沒有對基類的虛函數(shù)重新定義硬萍,則派生類繼承其直接基類的虛函數(shù)
?
?
3.vector
是c++STL(標(biāo)準(zhǔn)模板類庫)的重要一員扩所。可以容納許多其它類型的相同實(shí)體朴乖,稱為容器祖屏。
使用時(shí):#include<vector>
四種定義方式:
(1)vector<int>a(10);
(2)vector<int>b(10,1);
(3)vector<int>c(b);
(4)vector<int>d(b.begin(),b.begin()+3);
輸出向量中的所有元素:
(1)for(int i=0; i<a.size(); ++i)
? cout<<a[i];
(2)for (vector<int>::iterator it=a.begin();it!=a.end();++it)
cout<<*it;
vector<int>::iterator //遍歷器助赞,迭代器(指向容器元素的指針)
向量中的操作都是通過使用成員函數(shù)來完成的:
a.clear(); //清空a
a.push_back(5);//向最后插入一個(gè)元素
a.pop_back();//刪除最后一個(gè)元素
a.resize(10,2)//元素的個(gè)數(shù)調(diào)整至10個(gè)袁勺,值為2
?
?
?
?
4.C++標(biāo)準(zhǔn)程序庫中的string類
string name;?
自動(dòng)處理空間的占用問題雹食。C++字符串并不以’\0’結(jié)尾 .
可以用 = 進(jìn)行賦值操作,== 進(jìn)行比較期丰,+ 做串聯(lián).
使用時(shí)#include <string> //注意這里不是string.h
string str1,str2=“abcd”;
?str1=str2;
?str2=str1+”123”;
?cout<<str2<<" "<<str2.length()<<" "<<str2.insert(0,"8");
由C++字符串得到對應(yīng)的C_string的方法是使用data()群叶、c_str()
data()以字符數(shù)組的形式返回字符串內(nèi)容,但并不添加’\0’钝荡。
char s[20];strcpy(s,str1.data());
c_str()返回一個(gè)以‘\0’結(jié)尾的字符數(shù)組街立,strcpy(s,str2.c_str());
?
5.虛函數(shù)的實(shí)用意義:
從基類繼承來的某些成員函數(shù)不完全適應(yīng)派生類的需要,允許其派生類中對該函數(shù)重新定義埠通,賦予它新的功能赎离,當(dāng)基類的這些成員函數(shù)聲明為虛函數(shù)后,可以通過指向其基類的指針指向同一類族中不同類的對象植阴,從而調(diào)用其同名的函數(shù)蟹瘾。
由虛函數(shù)實(shí)現(xiàn)的多態(tài)性是:同一類族中不同類的對象,對同一函數(shù)調(diào)用作出不同的響應(yīng)掠手。
是追求用指針管理繼承體系對象的結(jié)果憾朴。
多態(tài)性使得應(yīng)用程序使用類體系中的不同層次對象,并使這些對象共存的復(fù)雜局面達(dá)到了一種可管理的境界.
程序員從使用孤立的類,到使用分層的類喷鸽,并且讓各種對象“同場競技”,充分展現(xiàn)其個(gè)性.
不支持多態(tài)的語言不能稱為面向?qū)ο蟮恼Z言众雷。
?
6.多態(tài)的實(shí)現(xiàn)
聯(lián)編(編聯(lián)、束定做祝、綁定)(binding):就是把一個(gè)標(biāo)識(shí)符名和一個(gè)存儲(chǔ)地址聯(lián)系在一起的過程砾省。將一個(gè)函數(shù)調(diào)用鏈接上相應(yīng)于函數(shù)體的代碼,這一過程就是函數(shù)聯(lián)編混槐。
??
???????????? 靜態(tài)聯(lián)編:出現(xiàn)在運(yùn)行前的聯(lián)編(在編譯時(shí)完成)编兄,也稱為早期聯(lián)編。
?? 動(dòng)態(tài)聯(lián)編:聯(lián)編工作在程序運(yùn)行階段完成的情況声登。在編譯狠鸳、連接過程中無法解決的聯(lián)編問題,要等到程序開始運(yùn)行之后再來確定悯嗓。
?? 也稱為滯后聯(lián)編件舵。
?
?
7.虛函數(shù)的工作機(jī)理
Virtual出現(xiàn)則每個(gè)類增加一個(gè)虛函數(shù)表保存類的虛函數(shù)
凡有虛函數(shù)的類均維護(hù)一個(gè)虛函數(shù)表
實(shí)例化每個(gè)對象中會(huì)增加一個(gè)指針指向虛函數(shù)表(對象大小會(huì)有變化).
虛函數(shù)調(diào)用時(shí)不需要確定對象類型,通過該指針即可找到所要鏈接函數(shù)
?
?