《C 必知必會》讀書筆記(上)

2021-06-18 09:02:01 字數 2365 閱讀 7304

1、資料抽象

1) 首先, 為型別取乙個描述性的名字。如果很難為這個型別命名,那就說明我們還不知道要實現什麼。因此,我們需要多開動腦筋,結合業務邏輯,給即將產生的類乙個好的合適的職責。這就是設計過程。乙個抽象資料型別應該表示乙個單一的、明確的概念,而且為該概念所取的名字應該是顯而易見的。

2) 其次,列出型別所能執行的操作。要避免在實現時簡單的為資料成員提供一連串的get/set(獲取/設定)操作——那不是資料抽象,而是懶惰且缺乏想象力的表現。

3) 然後,為型別設計介面。

4) 最後,實現介面。

2、關於stl

1) stl包含三大元件:容器,演算法和迭代器。

2) stl並不僅僅是乙個庫,它更是一種優秀的思想和一套約定。

3) stl不但使我們能夠更輕鬆、更快捷地編寫複雜的**,而且使編寫的**級標準又高度優化。

4) stl的另乙個優雅之處在於它的高度可配置。

5) 學習stl並廣泛地使用stl吧!

3、賦值和初始化並不相同。

直接了當的說,賦值發生於賦值時,除此之外,遇到所有其它的複製情形均屬於初始化,包括宣告、函式返回、引數傳遞等。

4、當乙個函式的名字作為引數傳遞時,函式名字會退化成乙個指標。當函式作為函式指標進行傳遞時,它不能被內聯(即使被inline宣告了)。

5、template method(模板方法)模式

1)template method模式與c++中的模板一點關係都沒有。

2) template method模式賦予基類設計者一種中級控制機制,該控制機制介於非虛函式提供的「(要麼)占用它或離開它」和虛函式提供的「如果你不喜歡她就替換掉所有或部分東西」這兩種機制之間。

3) template method模式也是乙個「好萊塢法則」的例子,即「不要call我們,我們會call你」。

6、名字空間(namespace)

1)  本質上,名字空間是對全域性作用域的細分。

2) 「將using宣告放進全域性作用域中」是乙個很餿很餿的主意!

3) 千萬不要在標頭檔案中使用using宣告!盡量將using宣告放在函式作用域內。最次之也應該放在原始檔的#include之後。

7、指標比較的含義

8、prototype模式與factory method模式

1) 虛建構函式:在c++中,提供了轉殖自身物件能力的成員函式,從傳統上說,被稱為「虛建構函式」。

2)prototype(原型)模式其實可以看做factory method(工廠方法)模式的乙個特例。其中,clone()函式就是乙個工廠方法。

3) 使用factory method模式通常意味著乙個高階設計需要基於乙個物件的確切型別產生(建立)另乙個「適當型別」的物件,這樣的需要往往發生於存在多個平行或幾乎平行的類層次結構中。

4)factory method 模式通常是**一系列執行期型別檢查問題的良方。

9、協變返回型別(covariant return type)

1) 如果b是乙個基類型別,d公有派生自b。那麼,假設有乙個基類虛函式返回b*, 那麼乙個重寫的該虛函式可以返回d*。

如果基類虛函式返回b&,那麼乙個重寫的該虛函式可以返回d&。

2)協變返回型別可以有效的避免型別資訊丟失。從而使我們總是可以在乙個適當的抽象層面工作。

10、拒絕編譯器的遺贈:

1)禁止複製

2)禁止或強制使用堆分配

以上都是通過c++的public, protected, private訪問屬性來搞定的。

11、raii和智慧型指標

1)raii(資源獲取即初始化)是一項很簡單的技術。它利用c++物件生命週期的概念來控制程式的資源。

2)raii主要用於希望對某個重要資源進行跟蹤,即建立乙個物件,並將資源的生命期和物件的生命期相關聯。

3)raii技術在c++程式設計中的影響是如此深遠,以至於很難發現有哪個庫或元件或大型**塊未使用某種方式使用它們。

4)raii經常使用智慧型指標來實現。

12、指標算術運算

1)指標算術總是依照所指物件的大小比例來進行的,指標遞增1,指標所代表的物件位址遞增sizeof(t).

2) void* 不支援指標算術運算。原因正是因為我們不知道某個 void* 指標所指物件的型別,所以無法正確的按比例運算。

3)同一型別的兩個指標可以進行減法運算(注意:加法可不行!),運算結果是參與運算的兩個指標之間的元素個數。

C 必知必會讀書筆記

在物件導向設計中,不知情 和 忽略 也是一種天賜之福。實際上體現的就是一種松耦合,不需要執行 期的實際型別 動態型別 的精確知識。這就是不知情和松耦合的優點。p101頁。c 中的new有三種形態,一種是最常見的 new運算子,也就是用來在堆上分配記憶體,然後呼叫建構函式的那個。一種是operator...

《C 必知必會》讀書筆記4

int f 乙個返回值為int 的函式 int f 乙個函式指標,指向乙個返回型別為int的並且無引數的函式 const int n 12 int a n 首先,提醒這段 在c中不行。這個是乙個具有n個int 元素的陣列 int a n 乙個指標,指向乙個具有n個int元素的陣列。int p n 乙...

SQL必知必會》讀書筆記

慎用 檢索所有列 一般而言,除非你確實需要表中的每一列,否則最好別使用 萬用字元。雖然使用萬用字元能讓你自己省事,不用明確列出所需列,但檢索不需 要的列通常會降低檢索和應用程式的效能。使用萬用字元有乙個大優點。由於不明確指定列名 因為星號檢索每一列 所以能檢索出名字未知的列。2.關於distinct...