C 物件導向高階程式設計 侯捷

2021-10-10 17:11:14 字數 1506 閱讀 7291

1、防禦式宣告

#ifndef _complex_

#define _complex_

...#endif

作用:保證只include一次

2、inline function 在body內進行定義

更快,但最終能否inline由編譯器決定

3、為什麼應該用初始化列表

complex(double r=0, double i=0) : re(r), im(i)

兩個階段:初始化和賦值階段,如果寫在body裡面,就放棄了初始化階段,直接到賦值。這樣效率就會降低。

4、盡量所有的引數傳遞都傳引用,不要傳值。返回值也盡量傳引用。 (---侯捷)

如果不希望被改變,加const func(const complex&)

什麼情況下返回值不能用引用:當函式結束後,引用的東西就消亡了,這種情況下,返回值就不能是引用。

如果返回的值,不是在函式體中建立的,返回的時候就可以傳引用

5、使用友元函式可以直接使用private資料,而不是友元,需要定義專門的函式才能拿到private的資料。

相同class的各個objects互為friends(友元)

******************************************總結**********************************************

1、資料一定是private

2、引數盡可能以reference傳遞,加不加const,看情況

3、返回值也盡量用reference。加不加const,看情況

4、應該加const的地方就應該加const,否則可能會編譯報錯

5、盡量使用初始化列表

所謂stack(棧),所謂heap(堆)

stack,是存在於某作用域(scope)的一塊記憶體空間(memory space)。例如當你呼叫函式,函式本身即會形成乙個stack用來放置它所接收的引數,以及返回位址。在函式體內宣告的任何變數,其所使用的記憶體塊都取自上述stack。 如 complex c1(1, 2)

heap,或稱為system heap,是指由作業系統提供的一塊global記憶體空間,程式自動分配(dynamic allocated)從中獲得若干塊(blocks)complex* p = new complex(3)

從棧中獲得的空間,當作用域結束,空間就會被自動釋放。從堆中獲得的空間,必須手動釋放;

static object,其生命在作用域(scope)結束之後仍然存在,直到整個程式結束。

global object,其生命在整個程式結束之後才結束。

---侯老師說其他地方沒有這兩頁ppt,所以儲存下來(^v^)

侯捷 C 物件導向高階開發(上)筆記整理

c 物件導向高階開發 上 一 c 程式設計簡介 1 基於物件 只有乙個class的程式設計 object based 物件導向 幾個class的程式設計 object oriented 2 class的經典分類 3 class之間的關係 繼承inheritance 復合composition 委託d...

C 侯捷 C 物件導向高階開發P1 6

侯捷 c 物件導向開發 動手實現自己的複數類 ifndef complex define complex endif一般情況下,建構函式是要被外界呼叫的,因此不能放在private中,但是有一種設計模式叫做singleton,這個模式將夠著函式放在private中,只允許獲得乙個類例項 class ...

侯捷c 物件導向(上)

一 c 程式設計簡介 1 基於物件 只有乙個class的程式設計 object based 物件導向 幾個class的程式設計 object oriented 2 class的經典分類 class without pointer members e.g complex 複數 class with p...