重讀《Essential C 》心得

2021-04-03 02:27:50 字數 2755 閱讀 6713

1)

using

2)std

是標準鏈結庫所駐之命名空間的名稱。

3)所謂命名空間(namespace)是一種將鏈結庫名稱封裝起來的方法,以此避免和應用程式發生命名衝突的問題。

4)using namespace std;

是讓命名空間中的名稱**的簡單方法。

1)一般的初始化:int a=100;

2)如果有多個初始值,比如給乙個複數賦值,需要有虛部和實部,不能用該方法,可以使用建構函式賦值法:complexa(2,4) 表示給乙個複數變數a賦值為(2,4),同樣,把int a=100轉換成這種方法:int a(100)

1)宣告:int a[10];vectora(10);

2)初始化:vector不支援vectora(4)=(1,2,3,4)這種方式的初始化。可用乙個已經初始化的陣列來初始化vector:int b[4]=;vectora(b,b+4);這裡傳給vector的是陣列b的起始和終止位址。還可用a.size()來獲得vector的大小,所以vector比較適合長度常常改變的資料。

3)指標:若要根據不同的情況來訪問4個vector:a,b,c,d,可以宣告乙個陣列:vector* e[4]=;其中e是乙個陣列,型別為vector* 這樣就可以通過e來操作這4個vector。

1)和cout 一樣,cerr 將其輸出結果導至使用者的終端機。兩者的唯一差別是,cerr 的輸出結果並無緩衝(bufferred)情形 — 它會立即顯 示於使用者終端機上。

2)3)

ostringstream clas

提供「記憶體內的輸出操作」,輸出到乙個string物件上,當需要將多筆不同型別的資料格式化為字串表現式時,它尤其有用。

1)當呼叫乙個函式的時候,會在記憶體中建立一塊特殊的區域,叫程式棧。它提供函式引數的儲存空間。

2)在預設情況下,引數都會被複製乙份傳入程式棧,這就是所謂的傳值。

3)假設要給乙個陣列排序,用傳值的方式是不會改變原有數列的,這是就要用到傳址,在引數前面加乙個「&」即可。當希望對傳入的物件修改時,或者是如果傳入引數物件過於龐大,可用傳址來提高效率。用指標來傳遞引數,其實也是一樣的,因為指標的本質就是位址。

1)用new方法可以宣告動態的記憶體空間。該方法宣告的變數不屬於區域性也不屬於全域性,它是建立在heap上的,隨時可以銷毀的。

2)int a[5]=new int [5];

當想銷毀的時候用delete a 便會銷毀所有陣列的元素。

使用預設引數可靈活的呼叫函式,預設引數有2個規則:

1)如果提供了某個預設引數,那麼這個引數右邊的所有引數都應該是預設引數。所以要把預設引數放在最右邊。

2)預設引數只能指定一次,可以在函式宣告的地方也可以再定義的地方,但是不能兩個地方都指定。為提高可見度,一般放在宣告的地方。

當乙個函式被很頻繁的呼叫的時候,這個時候編譯器的負擔會很重,可以把他宣告為inline讓編譯器把函式展開,來減小負擔。方法:在原來的函式前面加上inline即可。inline函式的定義常被置於標頭檔案中。

1)函式指標帶來了更大的彈性。可以用指標來選擇不同的函式以呼叫。函式指標一般和陣列一起使用。

2)如有這麼幾個函式:

const vector*fibon_seq(int size);

const vector*lucas_seq(int size);

const vector*pell_seq(int size);

const vector*pent_seq(int size);

若要用乙個函式指標來靈活呼叫可以:

a)先宣告乙個函式指標:const vector* (*seq_ptr)(int);

b)然後定義乙個陣列:const vector* (*seq_array)(int)=;//這是乙個存放函式指標的陣列

c)這樣就可以設定乙個index值:int seq_index;然後便可以通過seq_ptr=seq_array[++seq_index];來控制呼叫函式了。

1)通過繼承特性能,得以定義一整群互有關係的類,並共享共通的介面;有了多型則得以用一種與型別無關的方式來操作這些類。需要通過抽象基類的pointer或reference來操控其共通介面,即多型和動態繫結的特性,只有在使用pointer或reference時才能發揮。

2)在派生類中定義乙個虛函式的時候,返回型別必須完全吻合,但有乙個例外:當基類的虛函式返回某個基類形式(通常是pointer或reference)時,派生類中定義的虛函式可以返回派生類的型別。

class num_sequence

;

class fibonacci : public num_sequence

};

1)

functoin template

template

displaly(const string &msg, const vector&vec)

2)

使用:vectorivec; //這裡可以是任意的型別

3)在實際運用中,不論內建型別或class型別,都可能被指定作為class template 的實際型別,建議將所有的template型別引數視為「class型別」來處理,這意味著通常會把它宣告為乙個const reference,而非by value來傳遞。template引數並不是非得某種型別不可,也可以以常量表示式作為template引數

1)所謂異常是某種物件。大部分的時候,被丟擲的異常都屬於特定的異常類(class),也可形成乙個繼承體系。

2)可在catch塊中重拋異常。如果想捕捉任何型別的異常,可以使用一網打盡的方式。只需在異常宣告部分指定省略符號(…)即可:

catch(...)

重讀Essential C 讀書筆記2

重讀essential c 讀書筆記2 by sssa2000 7 25 2004 第二章 面向過程的程式設計風格 很久以前我也很困惑為什麼要有面向過程物件導向的程式設計風格,雖然現在已經有很深的體會。其實不管是什麼風格,只要能更好地解決問題就是好的風格。1 傳值和傳址 lippman 在說明這個問...

Essential C 學習筆記

essential c 學習筆記 系統學習c 的第一天,做點小筆記。使用c 進行檔案讀寫操作的例程 寫檔案 include include using namespace std 一定要新增這句 使用標準的命名 intmain 讀檔案 讀檔案的操作 include include include u...

重讀《論語》的個人心得 學而第一 A

學而第一 朱熹注 此為書之首篇,故所記多務本之意,乃入道之門,積德之基,學者之先務也。解悟 人生於世,學習的重要性不言而喻,但什麼是 學習 呢?具體點,什麼是 學 什麼又是 習 嬰兒學話謂學,幼兒學步謂學,少兒識字知意讀聖賢書也謂學。所以,但凡從未知到有知的心靈過程,皆可謂之 學 這是學字的含義。當...