2月20日
剛買書,明明是開源的,還要將近60元,黑啊真是的!
歸入正題:
粗看了一下序言,大概地介紹吧,還有一堆推薦書的好話。真正讓我興奮的還在後面!看C++方式的改變!
Bjarne Stroustrup:C++ is a general purpose programming language, not just a Object-Oriented programming language.
第一章 對象導言(introduction不就是介紹嗎?導個什麼言!)
我所回憶的內容:(翻書補充)(後來修改的)
1、 對象和類
抽象法來看問題,萬物即爲對象,而對象有性質,所以把對象用抽象的類,也就是共性來描述。
五大原則:
1、萬物皆爲對象(程序也如此,可細分爲一組)
2、對象互相交流(函數調用請求)
3、對象互構(更復雜程序的可能性)
4、一切對象都有屬性(類的可能)
5、一個類的所有對象都能接受同一個消息(OOP強大功能的可能)
模型: 類(抽象)——實例/對象(具體)
解決理論與實際結合的困難:接口 interface(函數)
模型:對象——接口 對象:特性(數據元素)——行爲(功能)<接口>
可以想見int的定義(內建的類)和class的定義目的是一致的(用戶自定義的類)類即類型
C++實現:class
2、類的特點
封裝:用類實現,避免複雜性的暴露和錯誤,隱私
模型:程序員(類創建者)——客戶使用者(客戶程序員)
C++實現:access specifer 訪問說明符
public:公共接口(外部函數可以訪問)
protected:保護接口(外部函數中繼承類的可以訪問)
pravite:內部接口 (內部函數可以訪問)<保密性漸大>
繼承 (爲了重用)inheritance:把類進一步抽象
模 型:基類(類的類//我的用語)——派生類
(超類/父類) ——(繼承類/子類)
兩種繼承方式:修改派生類的接口函數(純繼承 pure inherent) 函數重載 over-ridding
is-a
增加派生類的接口函數
is-like-a (基類無法調用派生類新函數)
另一種方式:聚合aggregation(組合 composition)不同類的對象組成新類(創建一個成員對象)
has-a 靈活性
多態性:繼承類的個性
效率問題:(基於 is-a)
希望通過操作基類函數合法進行派生類實現
處理派生類型就像處理基本類型的過程(向上類型轉化 upcasting)
從基類函數執行不同派生類被繼承函數正確性的保證:
e.g 基類move()-> 派生類1.move()派生類 2.move()
其他語言:早捆綁 early binding
C++: 晚捆綁 late binding (編譯器到函數執行還不知道具體類型及對象個數)
關鍵字 virtual (先有個印象)
3、對象的創建和銷燬 (在後面進一步理解)
兩種方式:堆stack 動態分配 速度慢 量大 虛擬內存 不關注細節 靈活性
棧heap 靜態分配 速度快 量小 內存 關注細節(函數生命期)
C++ 的實現:動態分配
new 創建對象
delete 銷燬對象
[方法論] (跳過)