vc++深入详解学习-NO.3
c++的多態(tài)性,基于虛函數(shù)的多態(tài)性技術(shù),在成員函數(shù)的定義前面加上virtual關(guān)鍵字申明的函數(shù)叫做虛函數(shù),當(dāng)c++編譯器在編譯的時候,發(fā)現(xiàn)類中的虛函數(shù),這個時候c++就好采用遲邦定技術(shù),在運行期間依據(jù)對象的類型確定調(diào)用哪一個函數(shù)。?
?
在基類的函數(shù)前加上virtual關(guān)鍵字,在派生類中重寫該函數(shù),運行時候?qū)鶕?jù)對象的實際類型來調(diào)用相應(yīng)函數(shù)!如果對象類型是派生類,就調(diào)用派生類函數(shù),基類則調(diào)用基類函數(shù)!
純虛函數(shù)? virtual 返回類型 函數(shù)名()=0? 采用這種方式聲明的函數(shù)即是純虛函數(shù),含有純虛函數(shù)的類叫做抽象類,這種類不能用來實例化對象,只是作為基類為派生類服務(wù)。在派生類中必須完全實現(xiàn)基類的純虛函數(shù),否則派生類也編程了抽象類不能實例化對象!? 純虛函數(shù)可以讓類先具有一個操作名稱,而沒有操作內(nèi)容,讓派生類在繼承時再去具體的實現(xiàn)定義。
=========================
?
函數(shù)的覆蓋的條件:
???????? 1 基類函數(shù)必須是虛函數(shù)
???????? 2 發(fā)生覆蓋的兩個函數(shù)必須分別位于基類和派生類
?????? ? 3? 函數(shù)名稱和參數(shù)列表必須完全相同
在函數(shù)覆蓋的情況下,編譯器會子運行的時候根據(jù)對象的實際類型來確定調(diào)用的函數(shù)!
=======================
函數(shù)的隱藏
派生類中具有和基類同名的函數(shù),從而在派生類中隱藏了基類同名的函數(shù)。
1派生類的函數(shù)與基類的函數(shù)完全相同(函數(shù)名和列表都相同),只是基類的函數(shù)沒有使用virtual關(guān)鍵字,此時基類的函數(shù)將被隱藏而不是覆蓋。
2派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)列表不同,在這種情況下,不管基類的函數(shù)聲明是否含有virtual關(guān)鍵字,基類的函數(shù)都將被隱藏,注意這種情況與函數(shù)重載的區(qū)別,重載發(fā)生在同一個類中。
?
區(qū)分覆蓋和隱藏。。函數(shù)的覆蓋是發(fā)生在派生類與基類之間,兩個函數(shù)必須完全相同,并且都是虛函數(shù),不屬于這種情況的,就是隱藏!
===============================
引用。 引用就是變量的別名,他需要另一個變量或者對象來初始化自身! 用&標(biāo)示申明一個引用,引用必須在申明時候進(jìn)行初始化。
引用和用來初始化引用的變量指向同一塊內(nèi)存,因此通過引用或者變量可以改變同一塊內(nèi)存中的內(nèi)容。引用一旦初始化,他就代表了一塊特定的內(nèi)存,再也不能代表其他的內(nèi)存!
引用只是一個別名,是一個變量或者對象的替換名稱。引用的地址沒有任何意義,因此c++沒有提供訪問引用本身地址的方法、引用的地址就是他所引用的變量或者對象的地址對引用的地址所做的操作就是對被引用的對象或者變量所做操作。指針是地址,指針變量要存儲地址值,因此要占據(jù)內(nèi)存空間,我們可以隨時修該指針變量所保存的地址值,從而指向其他內(nèi)存。
=============================
c++中為了防止頭文件的多次包含,我們采用預(yù)編譯指令符來解決。 用#ifndef 檢查有無定義宏,如果沒有,則定義一個宏#define,然后執(zhí)行頭文件中的內(nèi)容,最后在結(jié)尾處寫上#endif!
===========
visual c++是一個集編輯器,編譯器,鏈接器的工具集合,編譯過程分兩個部分
1是cpp文件的單獨編譯生成obj目標(biāo)文件2vc連接生成的obj文件,然后生成exe可執(zhí)行文件。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/veonm/p/3204383.html
總結(jié)
以上是生活随笔為你收集整理的vc++深入详解学习-NO.3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转: Linux下单网卡多vlan多虚拟
- 下一篇: Effective C++ 第二版 1)