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...