1、對於OO(面向對象)的含義,並不是每個人的看法都是相同的。即使在現在,如果問十個人,可能會得到15種不同的答案。幾乎所有的人都會同意繼承和多態是OO中的概念。大多數人還會再加上封裝。還有一些人會加上異常處理,而可能會沒有人將模板也包含進去。問題的關鍵在於:對於某個特性是否是屬於OO的,往往都存在著不同的觀點,而每一種觀點都有著熱情的擁護者。
2、C++的標准化工作對C++最重要的貢獻就是:對功能強大的抽象機制提供了更有力的支持,從而降低了軟件的復雜性。C++並不僅僅只是一種面向對象的語言。它能夠支持好幾種編程風格,包括面向對象編程風格和泛型編程風格。這些編程風格都是非常重要的,因為每一種編程風格都提供了很靈活的方法來通過抽象機制對代碼進行組織。面向對象編程使我們能夠把對象的狀態以及處理這些狀態的函數綁定在一起,而封裝和繼承則使我們能夠管理相互依賴性,並使能夠通過更清晰和更容易的方式來重用代碼。泛型編程則是一種較新的風格,它能夠使我們編寫出一些函數和類,它們能夠對其他一些“未定義的、沒有關聯的和未知類型”的函數和對象進行操作,從而為降低程序中耦合性和相互依賴性提供了一種獨特的方式。當前,在其他的一些語言中也提供了對泛型的支持,但是都沒有像C++中對泛型的支持這樣強。事實上,現在的泛型編程可能都要歸功於C++獨特的模板形式。今天,在C++中提供了許多功能強大的方式來表達抽象機制,而由此帶來的靈活性就是C++標准化中最重要的成果。
3、在C++中沒有模塊系統(無論是完整的還是不完整的);它缺乏其他一些重要的特性,例如內存垃圾收集機制,它有靜態類型檢查,但卻並不一定是“強”類型檢查。
1、強/弱類型是指類型檢查的嚴格程度的。語言有無類型,弱類型和強類型三種。無類型的不檢查,甚至不區分指令和數據。弱類型的檢查很弱,僅能嚴格的區分指令和數據。強類型的則嚴格的在編譯期進行檢查。
強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,如果不經過強制轉換,那麼它就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變量a,那麼程序根本不可能將a當作字符串類型處理。強類型定義語言是類型安全的語言。
弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變量可以賦不同數據類型的值。
2、動態類型語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。
靜態類型語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變量的數據類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。
強類型定義語言在速度上可能略遜色於弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否類型安全”之間是完全沒有聯系的!
3、封裝
封裝是保證軟件部件具有優良的模塊性的基礎,封裝的目標就是要實現軟件部件的“高內聚、低耦合”,防止程序相互依賴性而帶來的變動影響。在面向對象的編程語言中,對象是封裝的最基本單位,面向對象的封裝比傳統語言的封裝更為清晰、更為有力。面向對象的封裝就是把描述一個對象的屬性和行為的代碼封裝在一個“模塊”中,也就是一個類中,屬性用變量定義,行為用方法進行定義,方法可以直接訪問同一個對象中的屬性。
4、繼承
在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並可以加入若干新的內容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動共享父類數據和方法的機制,這是類之間的一種is--a關系,提高了軟件的可重用性和可擴展性。
5、多態
同一操作作用於不同的類的實例,將產生不同的執行結果,即不同類的對象收到相同的消息時,得到不同的結果。多態是面向對象程序設計的重要特征之一,是擴展性在“繼承”之後的又一重大表現 。對象根據所接受的消息而做出動作,同樣的消息被不同的對象接受時可能導致完全不同的行為,這種現象稱為多態性。
6、抽象
抽象就是找出一些事物的相似和共性之處,然後將這些事物歸為一個類,這個類只考慮這些事物的相似和共性之處,並且會忽略與當前主題和目標無關的那些方面,將注意力集中在與當前目標有關的方面。