C++中的面向?qū)ο缶幊毯?jiǎn)介
最近一段時(shí)間參加了一家培訓(xùn)機(jī)構(gòu)組織的培訓(xùn),主要的內(nèi)容大多都是面向?qū)ο?/FONT>編程的技術(shù)課程,在這里按照面向?qū)ο?/FONT>里面的幾個(gè)基本概念分別進(jìn)行說(shuō)明如下,希望大家學(xué)習(xí)參考。
一.對(duì)象(Object),這個(gè)概念可以說(shuō)是面向?qū)ο?/FONT>里面的最為核心的概念,如果找不著對(duì)象,又如何面向?qū)ο?/FONT>呢?對(duì)象,也就是你要處理的問(wèn)題里面設(shè)計(jì)的若干個(gè)因素,比如你做學(xué)生成績(jī)統(tǒng)計(jì),那么學(xué)生當(dāng)然是你要考慮的對(duì)象。
二.類(Class),從本質(zhì)上講是先有對(duì)象才有類,因?yàn)樵谔幚淼膶?shí)際編程問(wèn)題時(shí),你面對(duì)的是一個(gè)個(gè)具體的對(duì)象,太多了,怎么辦?分門(mén)別類,實(shí)現(xiàn)物以類聚,對(duì)了,將相同屬性的對(duì)象作為一類進(jìn)行考慮,張三也好,李四也好,他們都是人的一個(gè)實(shí)例。在具體的語(yǔ)言實(shí)現(xiàn)時(shí),兩者的順序就需要顛倒一下了,也就是要先有類,然后才能實(shí)例化生成對(duì)象。
三.面向?qū)ο?/FONT>的三大特性:
1.封裝
所謂的封裝也就是在類的設(shè)計(jì)時(shí),實(shí)現(xiàn)對(duì)于類內(nèi)的數(shù)據(jù)與方法的不同權(quán)限設(shè)置,有些數(shù)據(jù)和方法,我們不希望用戶在類的外部通過(guò)實(shí)例化去調(diào)用,那么我們將它們聲明成私有的(private),這樣這些數(shù)據(jù)和方法只能被類內(nèi)部的成員函數(shù)訪問(wèn),而如果希望能夠被實(shí)例訪問(wèn),那么聲明成公有的(public),至于第三種訪問(wèn)區(qū)分符(protected)保護(hù)型的,在類的繼承時(shí)應(yīng)用,我們到繼承那里說(shuō)明。
與封裝有關(guān)的一個(gè)概念是“抽象”(abstract) ,即將設(shè)計(jì)的類的最主要的功能表示出來(lái),這些功能正是要被其他類和函數(shù)訪問(wèn)的。
2.繼承
與繼承有關(guān)的概念是關(guān)系,關(guān)系描述了類之間的聯(lián)系,有四種基本類型,即“繼承、組合、利用、實(shí)例化”。繼承就是說(shuō)某一個(gè)類具有了另外一個(gè)類所有的數(shù)據(jù)和方法,當(dāng)然可以修改一部分并且增加新的數(shù)據(jù)和方法。繼承分為兩種類型,即單重繼承和多重繼承。
單重繼承,即類Derived繼承了類Base,定義如下:
- class Base
- {
- };
- class Derived:public Base
- {
- }
可見(jiàn)在定義繼承類時(shí),要指明繼承了哪一個(gè)類,并且指明繼承級(jí)別(public,protected,private),通過(guò)這三種訪問(wèn)區(qū)分符的修飾,可以改變基類數(shù)據(jù)在派生類中的訪問(wèn)權(quán)限,public 繼承不會(huì)改變,protected繼承的話原來(lái)的public 數(shù)據(jù)和方法變成派生類的protected型數(shù)據(jù)和方法,其他不變,private繼承則將所有的數(shù)據(jù)和方法的訪問(wèn)權(quán)限設(shè)置為private,即這些數(shù)據(jù)和方法都不能在類的外部訪問(wèn)。
派生類的構(gòu)造和析構(gòu)順序,首先構(gòu)造基類,然后構(gòu)造派生類,中間是類的作用,析構(gòu)順序正好相反。
多重繼承是說(shuō)一個(gè)類繼承了兩個(gè)或者多個(gè)類的數(shù)據(jù)或者方法。在多重繼承這里預(yù)見(jiàn)的主要的問(wèn)題是兩個(gè)歧義性:首先,當(dāng)繼承的兩個(gè)基類中含有相同的數(shù)據(jù)或者方法時(shí),在派生類中調(diào)用無(wú)法區(qū)分。
解決方法:指明調(diào)用的哪一個(gè)類的成員變量和方法,使用作用域分解運(yùn)算符;在派生類里面重新定義該數(shù)據(jù)或者方法。第二類歧義性發(fā)生在多層繼承時(shí),B,C繼承了A,而D又繼承了B,C,正如矩形和菱形繼承四邊形而正方形繼承了矩形和菱形,兩條繼承路徑使得基類被兩次繼承,直接訪問(wèn)無(wú)法區(qū)分,解決方法:支出繼承路徑,使用虛基類(virtual)方法,在定義繼承關(guān)系時(shí)添加virtual使得基類永遠(yuǎn)只有一份拷貝。
3.多態(tài)
多態(tài)性分為兩種,即靜態(tài)多態(tài)性和動(dòng)態(tài)多態(tài)性。所謂多態(tài),也就是明明同樣一個(gè)東西,在不同情況下有著不同的表現(xiàn)。
靜態(tài)多態(tài)性,即預(yù)先定義好的,通過(guò)函數(shù)重載(funcition overload)實(shí)現(xiàn),函數(shù)包含了返回值、函數(shù)名稱、函數(shù)參數(shù)三個(gè),名字多表示功能,返回值的區(qū)分不能區(qū)分函數(shù)(想象數(shù)據(jù)類的強(qiáng)制轉(zhuǎn)換吧)。因此重載也就是函數(shù)名稱相同而參數(shù)不同,不同可以表現(xiàn)在參數(shù)個(gè)數(shù)不同、參數(shù)類型不同、參數(shù)順序不同
【編輯推薦】