C 程式設計技巧

2021-05-18 11:05:04 字數 3339 閱讀 1160

c++ 程式設計技巧 

c++語言是乙個物件導向的語言,使用c++編寫的**更加簡捷、高效,更具可維護性和可重用性。但是很多人使用了c++語言後卻感到c++與c程式設計沒有什麼區別。這其實是由於對c++語言的特點和特色理解和使用不夠造成的。事實上,沒有任何乙個程式設計師使用c語言的程式設計效率可以超過c++語言的。

一、使用new和delete進行動態記憶體分配和釋放

運算子new和delete是c++新增的過算符,提供了儲存的動態分配和釋放功能。它的作用相當於c語言的函式malloc()和free(),但是效能更為優越。使用new比使用malloc()有以下的幾個優點:

(1)、new自動計算要分配型別的大小,不使用sizeof運算子,比較省事,可以避免錯誤。

(2、它自動地返回正確的指標型別,不用進行強制指標型別轉換。

(3)、可以用new對分配的物件進行初始化。

使用例子:

(1)、int *p;

p=new int[10]; //分配乙個含有10個整數的整形陣列

delete[] p; //刪除這個陣列

(2)、int *p;

p=new int (100);//動態分配乙個整數並初始化

二、使用inline內連函式替代巨集呼叫

對於頻繁使用的函式,c語言建議使用巨集呼叫代替函式呼叫以加快**執行,減少呼叫開銷。但是巨集呼叫有許多的弊端,可能引起不期望的***。例如巨集:

#define abs(a) ((a)<0?(-a):(a)), 當使用abs(i++)時,這個巨集就會出錯。

所以在c++中應該使用inline內連函式替代巨集呼叫,這樣即可達到巨集呼叫的功能,又避免了巨集呼叫的弊端。

使用內連函式只需把inline關鍵字放在函式返回型別的前面。例如:

inline int add(int a,int b);//宣告add()為內連函式

這樣編譯器在遇到add()函式時,不再進行函式呼叫,而是直接嵌入函式**以加快程式的執行。

三、使用函式過載

在c語言中,兩個函式的名稱不能相同,否則會導致編譯錯誤。而在c++中,函式名相同而引數不同的兩個函式被解釋為過載。例如:

void puthz(char *str); //在當前位置輸出漢字

void puthz(int x,int y,char *str); //在x,y處輸出漢字

使用函式過載可以幫助程式設計師應付更多的複雜性,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函式名稱;同時在大型程式中,使函式名易於管理和使用,而不必絞盡腦汁地去處理函式名。

四、使用引用(reference)代替指標進行引數傳遞

在c語言中,如果乙個函式需要修改用作引數的變數值的時候 ,引數應該宣告為指標型別。例如:

void add(int *a)

但是對於複雜的程式,使用指標容易出錯,程式也難以讀懂。在c++中,對於上述情況 可以使用引用來代替指標,使程式更加清晰易懂。引用就是對變數取的乙個別名,對引用進行操作,就相當於對原有變數進行操作。,例如使用引用的函式定義為:

void add(int &a) (a++;); //a為乙個整數的引用

這個函式與使用指標的上乙個函式的功能是一樣的,然而**卻更為簡潔和清晰易懂。

五、使用預設引數

在c++中函式可以使用預設引數,例如:

void puthzxy(char *str,int x=-1,int y=-1)

可以有兩種方式呼叫函式puthzxy(),例如:

puthzxy("c++語言");//使用預設引數,在當前位置輸出

puthzxy("c++語言",10,10);//沒有使用預設引數

通常的情況下,乙個函式應該盡可能地具有更大的靈活性,使用預設引數為程式設計師處理更大的複雜性和靈活性提供了有效的方法。所以在c++的**中都大量的使用了預設引數。

需要說明的是,所有的預設引數必須出現在不預設引數的右邊。亦即,一旦開始定義取預設數值的引數,就不可再說明非預設的引數。

例如:

void puthzxy(char *str,int x=-1,int y=-1); //正確

void puthzxy(int x=-1,int y=-1,char *str);//錯誤

六、使用「類」對資料進行封狀

c語言是模組化的程式語言,通過函式的使用和檔案的單獨編譯實現了一定的資料封裝功能。但c++通過使用「類」的強大功能,在資料封裝、繼承等很多的方面比c做得更好。通過使用「類」把資料和對資料的所有操作集合封裝在一起,建立了乙個定義良好的介面,使程式設計師在使用乙個類的時候可以只關心它的使用,而不必關心它的實現。

由於函式也可一定程度上實現對資料的封裝,在編寫c++程式時何時使用函式,何時使用類,對於c++的初學者難以把握。根據筆者的經驗,對於函式和類的使用總結出以下的方法:

首先把程式需要完成的功能劃分為很多的基本子過程,乙個子過程實現一種相對完整的功能。然後根據如下的規則進行劃分:

(1)、如果有一些資料被兩個以上的子過程同時使用,應該把這些資料和這些子過程使用「類」進行封裝。

(2)、如果一些資料只被乙個子過程使用,應把這些資料和這個子過程合成乙個函式。這些資料宣告為這個函式的內部臨時資料。

(3)、如果一些資料被乙個子過程在不同的時間裡幾次使用,應把這些資料和這個子過程合成乙個函式。這些資料被定義為這個函式的內部靜態資料。

(4)、如果乙個子過程的功能在以後可能被修改或擴充套件,應該把這些過程及其使用的數合成乙個類,以便以後使用繼承的方法對其功能進行修改和擴充。

(5)、當(2)、(3)和(4)矛盾時,以(4)為準。

例如,對於在c++中使用滑鼠這一程式含有10多個子過程,諸如mouseopen(),mousehide()等等。如果是呼叫dos的33h中斷來實現,因為在程式中各個子過程之間沒有共同使用的資料,所以應該把每個子過程定義為函式。

又如,如果定義了乙個表示圖形的資料結構,對於這個圖形要進行放大、移動、旋轉等子過程。因為這些子過程都要使用公共的圖形資料,所以應該把這些子過程和這些圖形資料定義為乙個類。

七、使用模板和bids

在borland c++ 3.1中還引入模板(template)的功能,通過模板borland c++ 3.1實現了功能強大的bids(borland international data structures)。使用bids可以不需程式設計實現可以儲存任何資料型別的陣列、鍊錶、椎棧、佇列等資料結構。下面的例子實現了乙個儲存整形變數的堆疊:

typedef bi_stackasvector intstack;

main()

{instack is;//定義乙個整形變數的堆疊

for(int i=0;i<10;i++)

is.push(i);//10個數壓棧

for(i=0;i<10;i++)

cout<

C 程式設計技巧

c 程式設計技巧 一 使用new和delete進行動態記憶體分配和釋放 運算子new和delete是c 新增的過算符,提供了儲存的動態分配和釋放功能。它的作用相當於c語言的函式malloc 和free 但是效能更為優越。使用new比使用malloc 有以下的幾個優點 1 new自動計算要分配型別的大...

C 程式設計技巧

1 遵循程式設計規範,例如公司的程式設計規範 google c 程式設計規範 等 2 小就是美 簡單就是美 3 盡可能多的使用 const 修飾符 4 宣告即初始化 變數 物件宣告時就初始化 5 結構 類等例項變數都以指標變數的方式使用 6 始終在使用前檢測指標變數的有效性 7 指標和標量型別使用值...

C 程式設計小技巧

1.乙個應用程式只能被使用者開啟一次 process mobj pro process.getcurrentprocess process mobj prolist process.getprocessesbyname mobj pro.processname if mobj prolist.len...