1.面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)
1.模塊化
抽象,面向?qū)夹g(shù)設(shè)計(jì)出來(lái)的程序都是由一個(gè)個(gè)對(duì)象組成的,每個(gè)對(duì)象中既定義了相應(yīng)的數(shù)據(jù)結(jié)構(gòu),又定義了操作這些數(shù)據(jù)結(jié)構(gòu)的方法。
2.數(shù)據(jù)隱藏
封裝,通過(guò)定義類把數(shù)據(jù)和方法集成在一個(gè)對(duì)象中,外部程序只能通過(guò)類所規(guī)定的接口和類進(jìn)行通信。
3.繼承
允許從已經(jīng)存在的類中繼承相應(yīng)的成員,只要告訴編譯器新類是由另一個(gè)類繼承而來(lái)的,它就會(huì)把另一個(gè)類中除私有成員之外的所有成員都賦給新類。繼承操作可以減輕工作量,提高可靠性。
4.多態(tài)性
指一個(gè)名字可以具有多種不同的語(yǔ)義,或者說(shuō)多個(gè)函數(shù)具有相同的名字但具有不同的作用。
5.重載
多個(gè)函數(shù)可以共用一個(gè)名字,只要參數(shù)個(gè)數(shù)不同,或者參數(shù)類型不同即可。
關(guān)鍵字
1.const用來(lái)定義數(shù)值不能改變的變量。
變量的存儲(chǔ)類型
auto
static
register
extern
函數(shù)的重載
函數(shù)同名 ,參數(shù)個(gè)數(shù)或者類型不同即可重載。
但是不能根據(jù)返回值不同進(jìn)行重載,因?yàn)闆](méi)有調(diào)用函數(shù)之前,C++無(wú)法判斷要調(diào)用哪一個(gè)函數(shù)。
類
1.類的定義
類的定義相當(dāng)于定義一種數(shù)據(jù)類型,而對(duì)象則是類的實(shí)例。
2.public,private,protected
public表明數(shù)據(jù)成員和成員函數(shù)都是公有的,所有的函數(shù)都可以訪問(wèn)這些成員。
private私有的,只有該類的成員函數(shù)和友元才可以訪問(wèn)。
protected受保護(hù)的,具有private特征的同時(shí),可以由子類成員訪問(wèn)。?
靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)
對(duì)于某些類來(lái)講,一些特定的數(shù)據(jù)成員的值都是固定不變的,或者說(shuō)對(duì)該類的所有對(duì)象都一樣的,他們并不是與某一個(gè)對(duì)象相關(guān),而是與該類的所有對(duì)象有關(guān)。這種數(shù)據(jù)就可以被定義為靜態(tài)的。另外,類中的成員函數(shù)也可以被定義為靜態(tài),此時(shí)該成員函數(shù)不再具有this指針,也就是說(shuō)靜態(tài)成員函數(shù)不與某個(gè)具體對(duì)象相聯(lián)系,它是屬于類的。
對(duì)于靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)來(lái)講,不管該類生成了多少個(gè)對(duì)象,也只有一個(gè)靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。并不是每生成一個(gè)對(duì)象就生成一個(gè)備份,而是所有對(duì)象共用一個(gè)。
靜態(tài)數(shù)據(jù)成員主要用于設(shè)定對(duì)所有對(duì)象都共享的數(shù)據(jù),主要目的是提高內(nèi)存的利用效率。
靜態(tài)成員函數(shù)不能對(duì)一般的數(shù)據(jù)成員進(jìn)行操作,通常只能用于對(duì)靜態(tài)數(shù)據(jù)成員進(jìn)行處理。
友元
之前學(xué)習(xí)JAVA時(shí)沒(méi)有接觸過(guò)友元,特此記錄加以區(qū)分學(xué)習(xí)記憶。
使用友元或者友元類,就使得與類無(wú)關(guān)系的一般函數(shù)或者其他類也能夠?qū)︻愔械膒rivate數(shù)據(jù)成員進(jìn)行訪問(wèn)。
目前個(gè)人感覺(jué)友元破壞了封裝特性,才疏學(xué)淺,以后想明白了再來(lái)修改。
繼承
通過(guò)使用已有的類并在此基礎(chǔ)上追加新的功能就可以派生出新的類,這一處理過(guò)程成為繼承,被繼承的類稱為基類(父類),通過(guò)繼承而產(chǎn)生的新類叫派生類(子類)。
抽象函數(shù)和虛函數(shù)
虛函數(shù)是有代碼的并明確允許子類去覆蓋,但子類也可不覆蓋,就是說(shuō)可以直接用,不用重寫(xiě)。
抽象函數(shù)是沒(méi)有代碼,子類繼承后一定要重寫(xiě)。
簡(jiǎn)單來(lái)說(shuō)虛函數(shù)(Virtual)已經(jīng)包含了也必須包含默認(rèn)的實(shí)現(xiàn),所以在派生類中可以重新實(shí)現(xiàn)也可以不實(shí)現(xiàn)這些虛函數(shù)。
抽象函數(shù)(abstract)沒(méi)有提供默認(rèn)實(shí)現(xiàn),所以在派生類中必須實(shí)現(xiàn)這些抽象函數(shù)。
接口中的函數(shù)類似于抽象函數(shù),也不提供默認(rèn)實(shí)現(xiàn),實(shí)現(xiàn)接口的類也必須實(shí)現(xiàn)這些函數(shù)。
多態(tài)
把一個(gè)子類實(shí)例賦值給一個(gè)父類引用,此時(shí)調(diào)用父類中的虛方法,且子類重寫(xiě)過(guò),則運(yùn)行時(shí)調(diào)用的是實(shí)際類型的方法,即子類中override的方法。
java的實(shí)例方法調(diào)用是基于運(yùn)行時(shí)的實(shí)際類型的動(dòng)態(tài)調(diào)用,而非變量的聲明類型。