漫談C 良好的程式設計習慣與程式設計要點 0

2021-07-14 06:17:47 字數 2042 閱讀 5186

**:melonstreet 正文

假設現在我們要實現乙個複數類complex,在類的實現過程中探索良好的程式設計習慣。

complex.h:

# ifndef  __complex__

# define __complex__

class complex

# endif

防止標頭檔案的內容被多次包含。

# ifndef  __complex__

# define __complex__

class complex

double imag() const

private:

doubel re,im;

}# endif

例如上面的成員函式:

double real () const 

double imag() const

既然函式不會改變物件,那麼就如實說明,編譯器能幫你確保函式的const屬性,閱讀**的人也明確你的意圖。

而且,const物件才可以呼叫這些函式——const物件不能夠呼叫非const成員函式。

class complex

private:

doubel re,im;

}

在初始值列表中,才是初始化。在建構函式體內的,叫做賦值。

為complex 類新增乙個+=操作符:

class complex

使用引用避免類物件構造與析構的開銷,使用const確保引數不會被改變。內建型別的值傳遞與引用傳遞效率沒有多大差別,甚至值傳遞效率會更高。例如,傳遞char型別時,值傳遞只需傳遞乙個位元組;引用實際上是指標實現,需要四個位元組(32位機)的傳遞開銷。但是為了一致,不妨統一使用引用。

以引用方式返回函式區域性變數會引發程式未定義行為,離開函式作用域區域性變數被銷毀,引用該變數沒有意義。但是我要說的是,如果可以,函式應該返回引用。當然,要返回的變數要有一定限制:該變數的在進入函式前,已經被分配了記憶體。以此條件來考量,很容易決定是否要返回引用。而在函式被呼叫時才建立出來的物件,一定不能返回引用。

說回operator +=,其返回值就是引用,原因在於,執行a+=b時,a已經在記憶體上存在了。

operator +,其返回值不能是引用,因為a+b的值,在呼叫operator +的時候才產生。

下面是operator+=operator +的實現:

inline complex & complex :: operator += (const complex & r)

inline complex operator + (const complex & x , const complex & y)

operator +=中返回引用還是必要的,這樣可以使用連續的操作:

c3 += c2 += c1;

就我們的複數類來說,+可以有多種使用方式:

complex c1(2,1);

complex c2;

c2 = c1 + c2;

c2 = c1 + 5;

c2 = 7 + c1;

為了應付怎麼多種加法,+需要有如下三種過載:

inline complex operator+ (const complex & x ,const complex & y)

inline complex operator + (const complex & x, double y)

這是某次面試中,面試官大哥告訴我的。想想確實是有道理,類的使用者用起來也舒服,一眼就能看見介面

漫談C 良好的程式設計習慣與程式設計要點 2

melonstreet 想象有乙個銀行賬戶的類,每個人都可以開銀行賬戶。存在銀行利率這個成員變數,它不應該屬於物件,而應該屬於銀行這個類,由所有的使用者來共享。static修飾成員變數時,該成員變數放在程式的全域性區中,整個程式執行過程中只有該成員變數的乙份副本。而普通的成員變數存在每個物件的記憶體...

良好程式設計習慣

1.程式應該以注釋開頭,如時間,日期,用途,作者.2.在逗號後插入空格,增強程式可讀性.3.在宣告和執行語句間插入空行,以突出宣告語句,程式更清晰.4.在二元運算子兩端都插入空格,突出運算子,增強程式可讀性.5.與羅列大量if語句相比,if else語句效率要高,後者只要不滿足就跳過不需要遍歷.6....

良好的程式設計習慣

最近,看到一些程式設計技巧有意無意的去使用,然而這些技巧看起來很華麗,但有礙於良好的程式設計習慣。比如在輸出乙個陣列時,可以有以下兩種寫法 for int i 0 i len i 良好的習慣 cout arr i endl for int i 0 i len cout arr i endl 不好的習...