C++基础与面向对象
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
1. 預處理知識
預處理作用如下:
① 包含另一個文件(通常是頭文件),為了引入需要的代碼。“”是引用非標準庫文件,編譯器將在用戶工作目錄尋找,找不到再去默認庫尋找,用于用戶自己定義的頭文件;<>表系統(tǒng)示庫文件。
② 定義符號,起到開關(guān)作用,可以根據(jù)機器的情況、操作系統(tǒng)的情況及用戶的需求來
決定哪部分代碼有效,例如,如果要在 Win32 的環(huán)境下編程,那么,就定義 Win32 這個符
號。
③ 定義宏,簡化常用的數(shù)據(jù),或者簡化復雜的函數(shù)聲明、定義的過程。
C++是強類型語言,任何變量、函數(shù)都必須先聲明再定義,聲明通常放在單獨的頭文件中。
在頭文件中聲明類時,注意}后面應有分號!
私有的數(shù)據(jù)成員和函數(shù)并不是只有該類的成員函數(shù)才能訪問到,友元函數(shù)和友
類也能訪問。
2. 類的繼承機制
C++ 中允許單繼承和多繼承。一個類可以根據(jù)需要生成派生類。派生類根據(jù)情況繼承了
基類的方法,還可以定義新的方法。一個子類的每個對象包含有從父類那里繼承來的數(shù)據(jù)成
員以及自己所特有的數(shù)據(jù)成員。
在 C++ 語言中,派生類可以從一個基類派生,稱為單繼承;
也可以從多個基類派生,就是所謂多繼承。
派生類的繼承方式有 “ 公有繼承( public ) ” 、 “ 私有繼承( private ) ” 和 “ 保護繼
承( protected ) ” 這 3 種常見的方式,此外還有虛繼承這種方式。
這里重點介紹一下公有繼承。
公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有
的狀態(tài),而基類的私有成員仍然是私有的。
⑴ 基類成員對其對象的可見性:公有成員可見,其他不可見。這里保護成員同于私有
成員;
⑵ 基類成員對派生類的可見性:公有成員和保護成員可見,而私有成員不可見。這里
保護成員同于公有成員;
⑶ 基類成員對派生類對象的可見性:公有成員可見,其他成員不可見。
所以,在公有繼承時,派生類的對象可以訪問基類中的公有成員;派生類的成員函數(shù)
可以訪問基類中的公有成員和保護成員。
3.虛函數(shù)
虛函數(shù)就是人們希望在派生類中被重新定義的函數(shù),注意:用基類的指針指向派生類的對象時,就能調(diào)用該派生類的虛函數(shù)。
需要注意以下幾點 :
1. 在基類中聲明一個成員函數(shù)為虛函數(shù)后,在它的派生類中此成員函數(shù)也是虛函數(shù),
并且不需要在前面加關(guān)鍵字。
2. 當指針調(diào)用函數(shù)時,如果調(diào)用的是虛函數(shù),則根據(jù)指針指向的對象訪問函數(shù);如果
調(diào)用的是非虛函數(shù),則指針的類型調(diào)用相應的函數(shù);如果虛函數(shù)在派生類中沒有定義,則會
自動調(diào)用基類中的函數(shù)定義。
另外, 虛函數(shù)的使用需要謹慎,因為它會增加一些額外的開銷,不過這點開銷不足以
削弱它的強大功能,除非用戶漫無目的濫用它。
此外,可以將一個虛函數(shù)聲明為一個純虛函數(shù):
virtual void show()=0;
這么做,等于告訴編譯器在對象中為函數(shù) show 保留一個間隔,為將來從基類中派生的
函數(shù)占據(jù)一個位置。純虛函數(shù)有 以下 特點:
1. 純虛函數(shù)僅僅是用來為基類的派生類中的函數(shù)保留位置
2. 純虛函數(shù)在基類中沒有定義,它們被初始化為 0
3. 當虛函數(shù)變成純虛函數(shù)時,任何派生類都必須給出它自己的定義。否則編譯出錯。
在使用中,不能創(chuàng)建一個帶有純虛函數(shù)的類的對象,但允許聲明含有純虛函數(shù)的類的指針。
在程序中往往會用到這個功能。
4. 句柄
Windows 具有很強的面向?qū)ο筇匦浴?Windows 對象有很多,譬如桌面、讀取所使用的程序等等。那么,如何區(qū)分這些東西呢?答案是使用句柄。句柄是引用不同 Windows 對象的方式。可以使用 Windows 的句柄、文件的句柄、分配內(nèi)存的句柄、圖像的句柄等等。系統(tǒng)在創(chuàng)建這些資源時會為它們分配內(nèi)存,并返回標識這些資源的標識號,這就是句柄。
實際上我們也可以將這些句柄看作指針。
轉(zhuǎn)載于:https://my.oschina.net/assange/blog/414347
總結(jié)
以上是生活随笔為你收集整理的C++基础与面向对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ShowAllPic--图片
- 下一篇: CentOS升级gcc到4.8.2以支持