重讀essential c++讀書筆記2
by sssa2000
7/25/2004
第二章:面向過程的程式設計風格
很久以前我也很困惑為什麼要有面向過程物件導向的程式設計風格,雖然現在已經有很深的體會。其實不管是什麼風格,只要能更好地解決問題就是好的風格。
1、傳值和傳址:
lippman
在說明這個問題的時候用了乙個探索的過程,讓初學者沒有一點障礙的被領進了這個問題。
什麼是形參?什麼是實參呢?簡單的說,編寫函式的時候說明的引數就是形參,在呼叫函式的時候的引數就是實參。
當呼叫乙個函式的時候,會在記憶體中建立一塊特殊的區域,叫程式棧。他提供沒個函式引數的儲存空間。
在預設情況下,引數都會被複製乙份傳入程式棧,這就是所謂的傳值,架設給乙個陣列排序,用傳值的方式是不會改變原有數列的,這是就要用到傳址。在引數前面加乙個「
&」即可。
什麼時候該用到傳址?當希望對傳入的物件修改時,或者是如果傳入引數物件過於龐大,用到傳址就會大大提高程式的效率。
當然也可以用指標來傳遞引數,其實也是一樣的,因為指標的本質就是位址。
2、小窺動態記憶體管理
我們知道用
new方法可以宣告動態的記憶體空間,不知道得也很容易從字面了解他的意思。用這個方法宣告的變數不屬於區域性也不屬於全域性,它是建立在
heap
上的,隨時可以銷毀的。 比如
int a[5]=new int [5];
當想銷毀的時候用
delete a
他會銷毀所有陣列的元素。
當然運用不當會造成
memory leak。
3、預設引數:
使用預設引數可以讓我們更加靈活的呼叫函式,預設引數有幾個規則:
首先,如果我們提供了某個預設引數,那麼這個引數右邊的所有引數都應該是預設引數。所以我們要把預設引數放在最右邊。
預設引數只能指定一次,可以在函式宣告的地方也可以再定義的地方,但是不能兩個地方都指定。為提高可見度,作者建議我們放在宣告的地方。
4、關於inline函式
為什麼要由
inline
函式?但乙個函式被很頻繁的呼叫的時候,這個時候編譯器的負擔會很重,我們可以把他宣告為
inline
讓編譯器把函式展開,來減小負擔。方法:在原來的函式前面加上
inline
即可。inline
函式的定義常被置於標頭檔案中。
5、使用模板:
functoin template
template
開場,例如:
template displaly(const string &msg, const vector&vec)
使用的時候也很簡單:
vectorivec; //
這裡可以是任意的型別
string msg;
display(msg,ivec);
6、函式指標:
函式指標給我們帶來了更大的彈性。我們可以用指標來選擇不同的函式以呼叫。
函式指標一般和陣列一起使用:
例如有這麼幾個函式:
const vector*fibon_seq(int size);
const vector*lucas_seq(int size);
const vector*pell_seq(int size);
const vector*pent_seq(int size);
我們打算用乙個函式指標來靈活呼叫,可以這樣:
先宣告乙個函式指標:
const vector* (*seq_ptr)(int);
然後定義乙個陣列:
const vector* (*seq_array)(int)=;
這是乙個存放函式指標的陣列,這樣我們可以設定乙個
index
值:int seq_index
然後我們就可以通過
seq_ptr=seq_array[++seq_index];
來控制呼叫函式了。
7、關於維護標頭檔案:
把函式的宣告放在標頭檔案中是乙個很好的辦法,這樣,當不同的程式呼叫這個函式的時候可以不用每次都宣告。但是定義最好不要放在標頭檔案裡面。
第二章完
重讀《Essential C 》心得
1 using 2 std 是標準鏈結庫所駐之命名空間的名稱。3 所謂命名空間 namespace 是一種將鏈結庫名稱封裝起來的方法,以此避免和應用程式發生命名衝突的問題。4 using namespace std 是讓命名空間中的名稱 的簡單方法。1 一般的初始化 int a 100 2 如果有多...
讀書 重讀C primer
第一次讀 c primer 已是7年前,已不記得是第幾版。只記得當時讀起來舉步維艱,想來是無經驗之故,不得已只得囫圇吞棗,不得要義。再讀已頗為順暢,雖平時c 程式設計不多,但工作中閱讀得太多,而此時c之基本功也幫助c 之理解。但是在有些問題的解釋上,有些 霧裡看花 之感,比如解釋虛函式,多型性。不知...
essential c 讀書筆記5
繼承 將一群相關的類組織起來,並讓我們得以分享期間的共通資料和操作行為 父類 基類 子類 派生類。多型 可以使我們操縱不同類時,如同操縱單一個體。讓基類的pointer 和 reference 得以十分透明的指向任何乙個派生類的物件。動態繫結 解析操作會延遲到執行時才進行。靜態繫結 程式執行之前就已...