1、封裝
封裝,即隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開(kāi)接口,控制程序?qū)︻悓傩缘淖x取和修改。
- 對(duì)于類的內(nèi)部,成員函數(shù)可以自由修改成員變量,進(jìn)行更精確的控制;
- 對(duì)于類的外部,良好的封裝能夠減少耦合,同時(shí)隱藏實(shí)現(xiàn)細(xì)節(jié)。
C++類成員的三種訪問(wèn)權(quán)限:public/protected/private
試想如果對(duì)類中成員變量的訪問(wèn)不做限制,那任何代碼都可以訪問(wèn)、修改,雖然這樣看起來(lái)更加靈活,但也意味著不可控,成員變量可以隨意被修改,而且修改邏輯可能在代碼中的各個(gè)角落,影響代碼的可讀性、可維護(hù)性。
2、抽象
抽象包括兩個(gè)方面,一是數(shù)據(jù)抽象,二是過(guò)程抽象。
- 數(shù)據(jù)抽象,關(guān)注于目標(biāo)的特性信息;
- 過(guò)程抽象,關(guān)注于目標(biāo)的功能是什么,而不是功能是怎么實(shí)現(xiàn)的。
比如對(duì)于“學(xué)生”這個(gè)對(duì)象,其目標(biāo)特性信息包括:學(xué)校、年級(jí)、班級(jí)、學(xué)號(hào)、成績(jī)等;其功能包括:學(xué)習(xí)、運(yùn)動(dòng)、繪畫(huà)、考試、比賽等。
封裝主要講的是隱藏信息、保護(hù)數(shù)據(jù),而抽象講的是隱藏方法的具體實(shí)現(xiàn)。
類的方法主要通過(guò)“函數(shù)”這一語(yǔ)法機(jī)制來(lái)實(shí)現(xiàn)的。通過(guò)函數(shù)包裹具體的實(shí)現(xiàn)邏輯,這本身就是一種抽象。調(diào)用者在使用函數(shù)的時(shí)候,并不需要去研究函數(shù)內(nèi)部的實(shí)現(xiàn)邏輯,只需要通過(guò)函數(shù)的命名、注釋或者文檔,了解其提供了什么功能,就可以直接使用了。

3、繼承
繼承,即子類繼承父類的特征和行為,使得子類具有父類的成員變量和方法。
C++類的三種繼承方式:public/protected/private
從繼承關(guān)系上來(lái)講,繼承可以分為兩種模式,單繼承和多繼承。
- 單繼承表示一個(gè)子類只繼承一個(gè)父類;
- 多繼承表示一個(gè)子類可以繼承多個(gè)父類。
繼承最大的一個(gè)好處就是代碼復(fù)用。假如兩個(gè)類有一些相同的屬性和方法,我們就可以將這些相同的部分,抽取到父類中,讓兩個(gè)子類繼承父類。這樣,兩個(gè)子類就可以重用父類中的代碼,避免代碼重復(fù)寫(xiě)多遍。不過(guò),過(guò)度使用繼承,繼承層次過(guò)深,也會(huì)導(dǎo)致代碼可讀性、可維護(hù)性變差。
4、多態(tài)
多態(tài),即同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。表現(xiàn)形式有覆蓋和重載。
- 覆蓋是指子類重寫(xiě)從基類繼承過(guò)來(lái)的函數(shù),函數(shù)名、返回值、參數(shù)列表都必須和基類相同。當(dāng)子類的對(duì)象調(diào)用成員函數(shù)的時(shí)候,如果成員函數(shù)有被覆蓋則調(diào)用子類中覆蓋的版本,否則調(diào)用從基類繼承過(guò)來(lái)的函數(shù)。
- 重載指在相同作用域中存在多個(gè)同名的函數(shù),這些函數(shù)的參數(shù)表不同,編譯器根據(jù)函數(shù)不同的形參表對(duì)同名函數(shù)的名稱做修飾,然后這些同名函數(shù)就成了不同的函數(shù)。