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