一、對於OO(面向對象)的含義,並不是每個人的見解都是一樣的。編程
即便在現在。假設問十我的,可能會獲得15種不一樣的答案。差點兒所有的人都會容許繼承和多態是OO中的概念。大多數人還會再加上封裝。安全
另外一些人會加上異常處理。而可能會沒有人將模板也包括進去。問題的關鍵在於:對於某個特性是不是屬於OO的,每每都存在着不一樣的觀點。而每一種觀點都有着熱情的擁護者。
二、C++的標準化工做對C++最重要的貢獻就是:對功能強大的抽象機制提供了更有力的支持,從而減小了軟件的複雜性。C++並不僅不過一種面向對象的語言。它能夠支持好幾種編程風格,包含面向對象編程風格和泛型編程風格。這些編程風格都是很是重要的,因爲每一種編程風格都提供了很是靈活的方法來經過抽象機制對代碼進行組織。編程語言
面向對象編程使咱們能夠把對象的狀態以及處理這些狀態的函數綁定在一塊兒,而封裝和繼承則使咱們能夠管理相互依賴性,並使能夠經過更清晰和更easy的方式來重用代碼。泛型編程則是一種較新的風格,它可使咱們編寫出一些函數和類。它們能夠對其它一些「沒有定義的、沒有關聯的和未知類型」的函數和對象進行操做,從而爲減小程序中耦合性和相互依賴性提供了一種獨特的方式。當前,在其它的一些語言中也提供了對泛型的支持。但是都沒有像C++中對泛型的支持這樣強。其實。現在的泛型編程可能都要歸功於C++獨特的模板形式。今天。在C++中提供了不少功能強大的方式來表達抽象機制,而由此帶來的靈活性就是C++標準化中最重要的成果。
三、在C++中沒有模塊系統(不論是完整的仍是不完整的);它缺少其它一些重要的特性,好比內存垃圾收集機制,它有靜態類型檢查,但卻並不必定是「強」類型檢查。
一、強/弱類型是指類型檢查的嚴格程度的。語言有無類型,弱類型和強類型三種。無類型的不檢查。甚至不區分指令和數據。函數
弱類型的檢查很是弱,僅能嚴格的區分指令和數據。強類型的則嚴格的在編譯期進行檢查。spa
強類型定義語言:強制數據類型定義的語言。設計
也就是說。一旦一個變量被指定了某個數據類型,假設不通過強制轉換。那麼它就永遠是這個數據類型了。舉個樣例:假設你定義了一個整型變量a,那麼程序根本不可能將a看成字符串類型處理。強類型定義語言是類型安全的語言。對象
弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變量可以賦不一樣數據類型的值。繼承
二、動態類型語言:動態類型語言是指在執行期間纔去作數據類型檢查的語言,也就是說,在用動態類型的語言編程時。永遠也不用給不論什麼變量指定數據類型,該語言會在你第一次賦值給變量時。在內部將數據類型記錄下來。接口
靜態類型語言:靜態類型語言與動態類型語言恰好相反。它的數據類型是在編譯其間檢查的,也就是說在敲代碼時要聲明所有變量的數據類型。C/C++是靜態類型語言的典型表明,其它的靜態類型語言還有C#、JAVA等。內存
強類型定義語言在速度上可能略遜色於弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免不少錯誤。
另外,「這門語言是否是動態語言」與「這門語言是否類型安全」之間是全然沒有聯繫的!
三、封裝
封裝是保證軟件部件具備優良的模塊性的基礎,封裝的目標就是要實現軟件部件的「高內聚、低耦合」,防止程序相互依賴性而帶來的變更影響。
在面向對象的編程語言中,對象是封裝的最基本單位,面向對象的封裝比傳統語言的封裝更爲清晰、更爲有力。
面向對象的封裝就是把描寫敘述一個對象的屬性和行爲的代碼封裝在一個「模塊」中。也就是一個類中,屬性用變量定義,行爲用方法進行定義,方法可以直接訪問同一個對象中的屬性。
第1、良好的封裝能夠下降耦合。
第2、類內部的實現可以自由地改動。
第3、類具備清晰的對外接口。
封裝的優勢很是好理解,咱們的房子就是一個類的實例。室內的裝飾與擺設僅僅能被室內的居住者讚揚和使用,假設沒有四面牆的遮擋,室內的所有活動在外人面前一覽無遺。由於有了封裝。房屋內的所有擺設都可以任意地改變而不用影響他人。然而。假設沒有門窗。一個包裹得嚴嚴實實的黑箱子。即便它的空間再寬闊,也沒有有用價值。房屋的門窗,就是封裝對象暴露在外的屬性和方法,專門供人進出,以及流通空氣、帶來陽光。
四、繼承
在定義和實現一個類的時候。可以在一個已經存在的類的基礎之上來進行。把這個已經存在的類所定義的內容做爲本身的內容,並可以增長若干新的內容,或改動原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類本身主動共享父類數據和方法的機制,這是類之間的一種is--a關係。提升了軟件的可重用性和可擴展性。
第1、子類擁有父類非private的屬性和功能。
第2、子類具備本身的屬性和功能,即子類可以擴展父類沒有的屬性和功能;
第3、子類還可以以本身的方式實現父類的功能(方法重寫)。
對於構造函數。它不能被繼承,僅僅能被調用。繼承會破壞封裝。父類實現細節暴露給子類。
這事實上是增大了兩個類之間的耦合性。並且是強耦合的關係。
五、多態
同一操做做用於不一樣的類的實例。將產生不一樣的運行結果。即不一樣類的對象收到相同的消息時。獲得不一樣的結果。多態是面向對象程序設計的重要特徵之中的一個,是擴展性在「繼承」以後的又一重大表現 。對象依據所接受的消息而作出動做,相同的消息被不一樣的對象接受時可能致使全然不一樣的行爲,這樣的現象稱爲多態性。
虛方法是依照其執行時類型而非編譯時類型進行動態綁定調用的。
六、抽象
抽象就是找出一些事物的類似和共性之處,而後將這些事物歸爲一個類,這個類僅僅考慮這些事物的類似和共性之處,並且會忽略與當前主題和目標無關的那些方面。將注意力集中在與當前目標有關的方面。
第1、抽象類不能實例化;
第2、抽象方法是必須被子類重寫的方法;
第3、假設類中包括抽象方法,那麼類就必須定義爲抽象類,不管是否還可以包括其它通常方法。
七、接口
接口是把隱式公共方法和屬性組合起來,以封裝特定功能的一個集合。一旦類實現了接口。類就可以支持接口所指定的所有屬性和成員。
聲明接口在語法上與聲明抽象類全然一樣,但不一樣意提供接口中不論什麼成員的運行方式。因此接口不能實例化。不能有構造方法和字段。不能有修飾符;不能聲明爲虛擬的或靜態的等。還有實現接口的類就必須要實現接口中的所有方法和屬性。
一個類可以支持多個接口,多個類也可以支持一樣的接口。
抽象類可以給出一些成員的實現,接口卻不包括成員的實現,抽象類的抽象成員可被子類部分實現,接口的成員需要實現類全然實現,一個類僅僅能繼承一個抽象類,但可實現多個接口等等。