中應該使用inline內聯函數替代宏調用,這樣既可達到宏調用的目的,又避免了宏調用的弊端。
使用內聯函數隻須把inline關鍵字放在函數返回類型的前麵。例如:
inlineintAdd(inta,intb);\/\/聲明Add()為內聯函數
這樣編譯器在遇到Add()函數時,就不再進行函數調用,而是直接嵌入函數代碼以加快程序的執行。
使用函數重載
在C語言中,兩個函數的名稱不能相同,否則會導致編譯錯誤。而在C++中,函數名相同而參數數據類型不同的兩個函數被解釋為重載。例如:
voidPutHz(char*str);\/\/在當前位置輸出漢字
voidPutHz(intx,?inty,?char*str);\/\/在x,y處輸入數字
使用函數重載可以幫助程序員處理更多的複雜問題,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函數名稱;同時在大型程序中,使函數名易於管理和使用,而不必絞儘腦汁地去處理函數名。同時必須注意,參數數據類型相同,但是函數返回類型不同的兩個函數不能重載。
用引用(reference)代替指針進行參數傳遞
在C語言中,如果一個函數需要修改用作參數的變量值的時候,參數應該聲明為指針類型。例如:
voidAdd(int*a)
(*a)++;
調用時則使用
Add(&x);\/\/其中x為int或可以轉化為int的類型,如unsignedint,但這時候編譯器通常會給出warning
對於複雜的程序,使用指針容易出錯,程序也難以讀懂。在C++中,對於上述情況可以使用引用來代替指針,使程序更加清晰易懂。引用就是對變量取的一個別名,對引用進行操作,這就相當於對原有變量進行操作。例如使用引用的函數定義為:
voidAdd(int&a)
a++; \/\/a為一個整數的引用
調用時使用
Add(x); \/\/其中x為int
這個函數與使用指針的上一個函數的功能是一樣的,然而代碼卻更為簡潔和清晰易懂。
使用缺省參數
在C++中函數可以使用缺省參數,例如:
voidPutHzxy(char*str,intx=-1,inty=-1)
if(x==-1)
看本書最新章節,請到oop.tw
x=wherex();
if(y==-1)
x=wherex();
moveto(x,y);
PutHx(str);
可以有三種方式調用函數PutHzxy(),例如:
PutHzxy(\"C++語言\");\/\/使用缺省參數,在當前位置輸出
PutHzxy(\"C++語言\",10,10);\/\/沒有使用缺省參數
PutHzxy(\"C++語言\",10);\/\/對y使用缺省參數,指定x的位置
通常的情況下,一個函數應該具有儘可能大的靈活性。使用缺省參數為程序員處理更大的複雜性和靈活性問題提供了有效的方法,所以在C++的代碼中都大量地使用了缺省參數。
需要說明的是,所有的缺省參數必須出現在不缺省參數的右邊。亦即,一旦開始定義缺省參數,就不可再說明非缺省的參數。否則當你省略其中一個參數的時候,編譯器無法知道你是自定義了這個參數還是利用了缺省參數而定義了非缺省的參數。
例如:
voidPutHzxy(char*str,intx=-1,inty=-1)\/\/正確
voidPutHzxy(intx=-1,inty=-1,char*str)\/\/錯誤
使用STL
STL(StandardTemplateLibrary,標準模板庫),STL的代碼從廣義上講分為三類:algorithm(算法)、container(容器)和iterator(迭代器),並包括一些工具類如auto_ptr。幾乎所有的代碼都采用了模板類和模版函數的方式,這相比於傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。
#include\/\/包含相關的頭文件\/
typedefstd::vectorintvector;\/\/使用typedef使代碼看起來更簡潔
)(niamtni
;ivrotcevtni
)++i,01
素元加添kcab_hsup用使/\/\;)i(kcab_hsup.iv
)++i;)(ezis.iv
素元的中rotcev問訪樣一組數問訪像以可們我得使,載重被符作操][/\/\;"\"\<<]i[iv< 式方發開 :合組下如是般一。發開件軟行進式方的EDI非的統傳是員序程的量大有界世xinu在 等gnalc,ccg:器譯編.1 scame/\miv是般一:器輯編.2 樣一本基法用與能功,等ekamp的dsb者或ekamung:ekam.3 等tig,nvs,svc:理管本版.4 等rxl,sgatc,epocsc:讀閱碼代.5 境環發開 )++ClausiV(oidutSlausiV.1 redliuB++CdnalroB.2 )CCG+23wgniM+TDC+nlyM(espilcE.3 )CCG+23wgniM(++C-veD.4 )用使心核譯編款多合配可(skcolB::.5 etil.6 eerF-C.7 品產生衍是都EDI的他其,鏈譯編的本基套一執各列係oidutSlausiV的軟微和CCGUNG的行流前目,示所上如