C++中虚函数的理解,以及简单继承情况下的虚函数的表!
面向?qū)ο蟮娜筇卣?#61;封裝性+繼承性+多態(tài)性
封裝=將客觀事物抽象成類,每個(gè)類對(duì)自身的數(shù)據(jù)和方法實(shí)行權(quán)限的控制
繼承=實(shí)現(xiàn)繼承+可視繼承+接口繼承
多態(tài)=將父類對(duì)象設(shè)置成為和一個(gè)或者更多它的子對(duì)象相等的技術(shù),
用子類對(duì)象給父類對(duì)象賦值之后,
父類對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性一不同的方式運(yùn)作
C++的空類有哪些成員函數(shù)
1.缺省構(gòu)造函數(shù)
2.缺省拷貝構(gòu)造函數(shù)
3.缺省析構(gòu)函數(shù)
4.缺省賦值運(yùn)算符
5.缺省取址運(yùn)算符
6.缺省取址運(yùn)算符const
PS:只有當(dāng)實(shí)際使用的時(shí)候才會(huì)去使用這些類的成員函數(shù)的時(shí)候,編譯器才回去定義它們。
拷貝構(gòu)造函數(shù)和賦值運(yùn)算符重載有以下兩個(gè)不同之處:
1.拷貝構(gòu)造函數(shù)生成的新的類對(duì)象,而賦值運(yùn)算符不能;
2.由于拷貝構(gòu)造函數(shù)是直接構(gòu)造一個(gè)新的類對(duì)象,所以在初始化這個(gè)對(duì)象之前不用
檢驗(yàn)源對(duì)象是否和新建對(duì)象相同。而賦值運(yùn)算符則需要這個(gè)操作,另外賦值運(yùn)算
中如果原來的對(duì)象中有內(nèi)存分配要先把內(nèi)存釋放掉。
PS:當(dāng)類中有指針類型的成員變量時(shí),一定要重寫拷貝構(gòu)造函數(shù)和賦值運(yùn)算符,不要使用默認(rèn)的。
對(duì)C++了解的人都知道虛函數(shù)(Virtual Function)是通過一張?zhí)摵瘮?shù)表(Virtual Table)來實(shí)現(xiàn)的。
在這個(gè)表中,主是要一個(gè)類的虛函數(shù)的地址表,這張表解決了繼承、覆蓋的問題,保證真實(shí)反應(yīng)實(shí)際的函數(shù)。
這樣,在有虛函數(shù)的類的實(shí)例中這個(gè)表被分配在了這個(gè)實(shí)例的內(nèi)存中,所以當(dāng)用父類的指針來操作一個(gè)子類的時(shí)候,
這張?zhí)摵瘮?shù)表就顯得由為重要了,它就像一個(gè)地圖一樣,指明了實(shí)際所應(yīng)該調(diào)用的函數(shù)。
在C++標(biāo)準(zhǔn)規(guī)格說明書中說到,編譯器必需要保證虛函數(shù)表的指針存在于對(duì)象實(shí)例中最前面的位置,這是為了保證正確取到虛函數(shù)的偏移量。
這意味著我們通過對(duì)象實(shí)例的地址得到這張?zhí)摵瘮?shù)表,然后就可以遍歷其中函數(shù)指針,并調(diào)用相應(yīng)的函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的C++中虚函数的理解,以及简单继承情况下的虚函数的表!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大漠找图算法_大漠找图怎么实现用资源表图
- 下一篇: C语言与C++初学“你好 世界”