C++中面向對象的理解




1、對於OO(面向對象)的含義,並非每一個人的看法都是同樣的。

即使在如今。假設問十個人,可能會得到15種不同的答案。差點兒全部的人都會允許繼承和多態是OO中的概念。大多數人還會再加上封裝。

另一些人會加上異常處理。而可能會沒有人將模板也包括進去。問題的關鍵在於:對於某個特性是否是屬於OO的,往往都存在着不同的觀點。而每一種觀點都有着熱情的擁護者。
2、C++的標准化工作對C++最重要的貢獻就是:對功能強大的抽象機制提供了更有力的支持,從而減少了軟件的復雜性。C++並不只不過一種面向對象的語言。它可以支持好幾種編程風格,包含面向對象編程風格和泛型編程風格。這些編程風格都是非常重要的,由於每一種編程風格都提供了非常靈活的方法來通過抽象機制對代碼進行組織。

面向對象編程使我們可以把對象的狀態以及處理這些狀態的函數綁定在一起,而封裝和繼承則使我們可以管理相互依賴性,並使可以通過更清晰和更easy的方式來重用代碼。泛型編程則是一種較新的風格,它可以使我們編寫出一些函數和類。它們可以對其它一些“沒有定義的、沒有關聯的和未知類型”的函數和對象進行操作,從而為減少程序中耦合性和相互依賴性提供了一種獨特的方式。當前,在其它的一些語言中也提供了對泛型的支持。可是都沒有像C++中對泛型的支持這樣強。其實。如今的泛型編程可能都要歸功於C++獨特的模板形式。今天。在C++中提供了很多功能強大的方式來表達抽象機制,而由此帶來的靈活性就是C++標准化中最重要的成果。
3、在C++中沒有模塊系統(不管是完整的還是不完整的);它缺乏其它一些重要的特性,比如內存垃圾收集機制,它有靜態類型檢查,但卻並不一定是“強”類型檢查。
1、強/弱類型是指類型檢查的嚴格程度的。語言有無類型,弱類型和強類型三種。無類型的不檢查。甚至不區分指令和數據。

弱類型的檢查非常弱,僅能嚴格的區分指令和數據。強類型的則嚴格的在編譯期進行檢查。

強類型定義語言:強制數據類型定義的語言。

也就是說。一旦一個變量被指定了某個數據類型,假設不經過強制轉換。那么它就永遠是這個數據類型了。舉個樣例:假設你定義了一個整型變量a,那么程序根本不可能將a當作字符串類型處理。強類型定義語言是類型安全的語言。

弱類型定義語言:數據類型能夠被忽略的語言。它與強類型定義語言相反, 一個變量能夠賦不同數據類型的值。

2、動態類型語言:動態類型語言是指在執行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時。永遠也不用給不論什么變量指定數據類型,該語言會在你第一次賦值給變量時。在內部將數據類型記錄下來。

靜態類型語言:靜態類型語言與動態類型語言剛好相反。它的數據類型是在編譯其間檢查的,也就是說在敲代碼時要聲明全部變量的數據類型。C/C++是靜態類型語言的典型代表,其它的靜態類型語言還有C#、JAVA等。

強類型定義語言在速度上可能略遜色於弱類型定義語言,可是強類型定義語言帶來的嚴謹性可以有效的避免很多錯誤。

另外,“這門語言是不是動態語言”與“這門語言是否類型安全”之間是全然沒有聯系的!

3、封裝

封裝是保證軟件部件具有優良的模塊性的基礎,封裝的目標就是要實現軟件部件的“高內聚、低耦合”,防止程序相互依賴性而帶來的變動影響。

在面向對象的編程語言中,對象是封裝的最基本單位,面向對象的封裝比傳統語言的封裝更為清晰、更為有力。

面向對象的封裝就是把描寫敘述一個對象的屬性和行為的代碼封裝在一個“模塊”中。也就是一個類中,屬性用變量定義,行為用方法進行定義,方法能夠直接訪問同一個對象中的屬性。

第一、良好的封裝可以降低耦合。
第二、類內部的實現能夠自由地改動。


第三、類具有清晰的對外接口。
封裝的優點非常好理解,我們的房子就是一個類的實例。室內的裝飾與擺設僅僅能被室內的居住者贊賞和使用,假設沒有四面牆的遮擋,室內的全部活動在外人面前一覽無遺。因為有了封裝。房屋內的全部擺設都能夠任意地改變而不用影響他人。然而。假設沒有門窗。一個包裹得嚴嚴實實的黑箱子。即使它的空間再寬闊,也沒有有用價值。房屋的門窗,就是封裝對象暴露在外的屬性和方法,專門供人進出,以及流通空氣、帶來陽光。

4、繼承

在定義和實現一個類的時候。能夠在一個已經存在的類的基礎之上來進行。把這個已經存在的類所定義的內容作為自己的內容,並能夠增加若干新的內容,或改動原來的方法使之更適合特殊的須要,這就是繼承。繼承是子類自己主動共享父類數據和方法的機制,這是類之間的一種is--a關系。提高了軟件的可重用性和可擴展性。

第一、子類擁有父類非private的屬性和功能。
第二、子類具有自己的屬性和功能,即子類能夠擴展父類沒有的屬性和功能;
第三、子類還能夠以自己的方式實現父類的功能(方法重寫)。


對於構造函數。它不能被繼承,僅僅能被調用。繼承會破壞封裝。父類實現細節暴露給子類。

這事實上是增大了兩個類之間的耦合性。而且是強耦合的關系。

5、多態

同一操作作用於不同的類的實例。將產生不同的運行結果。即不同類的對象收到相同的消息時。得到不同的結果。多態是面向對象程序設計的重要特征之中的一個,是擴展性在“繼承”之后的又一重大表現 。對象依據所接受的消息而做出動作,相同的消息被不同的對象接受時可能導致全然不同的行為,這樣的現象稱為多態性。

虛方法是依照其執行時類型而非編譯時類型進行動態綁定調用的。

6、抽象

抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個類,這個類僅僅考慮這些事物的相似和共性之處,而且會忽略與當前主題和目標無關的那些方面。將注意力集中在與當前目標有關的方面。

第一、抽象類不能實例化;
第二、抽象方法是必須被子類重寫的方法;
第三、假設類中包括抽象方法,那么類就必須定義為抽象類,不論是否還能夠包括其它一般方法。

7、接口

接口是把隱式公共方法和屬性組合起來,以封裝特定功能的一個集合。一旦類實現了接口。類就能夠支持接口所指定的全部屬性和成員。

聲明接口在語法上與聲明抽象類全然同樣,但不同意提供接口中不論什么成員的運行方式。所以接口不能實例化。不能有構造方法和字段。不能有修飾符;不能聲明為虛擬的或靜態的等。還有實現接口的類就必需要實現接口中的全部方法和屬性。

一個類能夠支持多個接口,多個類也能夠支持同樣的接口。
抽象類能夠給出一些成員的實現,接口卻不包括成員的實現,抽象類的抽象成員可被子類部分實現,接口的成員須要實現類全然實現,一個類僅僅能繼承一個抽象類,但可實現多個接口等等。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM