在頭 h寫函式實現體和在cpp中寫實現體的區別

2021-06-11 17:42:49 字數 1687 閱讀 4328

在頭.h寫函式實現體和在cpp中寫實現體的區別:

其實區別就是一句話:

在.h中寫成員函式的實現體就則該函式就是內聯函式,在.cpp中寫實現體就是普通成員函式。

****宣告內聯函式看上去和普通函式非常相似: 

void f(int i, char c); 

當你定義乙個內聯函式時,在函式定義前加上 inline 關鍵字,並且將定義放入標頭檔案: 

inline 

void f(int i, char c) 

***任何在類的說明部分定義的函式都會被自動的認為是內聯函式。 

內聯函式必須是和函式體申明在一起,才有效。像這樣的申明:inline tablefunction(int i) 是沒有效果的,編譯器只是把函式作為普通的函式申明,我們必須定義函式體。 

inline tablefunction(int i) ; 

這樣我們才算定義了乙個內聯函式。我們可以把它作為一般的函式一樣呼叫。但是執行速度確比一般函式的執行速度要快。 

我們也可以將定義在類的外部的函式定義為內聯函式,比如: 

class tableclass; 

inline int dec()  

int getnum(); 

} inline int tableclass::getnum() 

***上面申明的三個函式都是內聯函式。在c++中,在類的內部定義了函式體的函式,被預設為是內聯函式。而不管你是否有inline關鍵字。 

內聯函式在c++類中,應用最廣的,應該是用來定義訪問函式。我們定義的類中一般會把資料成員定義成私有的或者保護的,這樣,外界就不能直接讀寫我們類成員的資料了。

對於私有或者保護成員的讀寫就必須使用成員介面函式來進行。如果我們把這些讀寫成員函式定義成內聯函式的話,將會獲得比較好的效率。 

class sample 

void settest(int i)  

} 以下內容摘自:

當然,內聯函式也有一定的侷限性。就是函式中的執行**不能太多了,如果,內聯函式的函式體過大,一般的編譯器會放棄內聯方式,而採用普通的方式呼叫函式。這樣,

內聯函式就和普通函式執行效率一樣了。 

***使用內聯函式時應注意以下幾個問題:

(1) 在乙個檔案中定義的內聯函式不能在另乙個檔案中使用。它們通常放在標頭檔案中共享。

(2) 內聯函式應該簡潔,只有幾個語句,如果語句較多,不適合於定義為內聯函式。 

(3) 內聯函式體中,不能有迴圈語句、if語句或switch語句,否則,函式定義時即使有inline關鍵字,編譯器也會把該函式作為非內聯函式處理。

(4) 內聯函式要在函式被呼叫之前宣告。

例如:#include

int increment(int i);

inline int increment(int i)

void main(void)

如果我們修改一下程式,將內聯函式的定義移到main()之後: 

#include

int increment(int i);

void main(void)

//內聯函式定義放在main()函式之後

inline int increment(int i)

內聯函式在呼叫之後才定義,這段程式在編譯的時候編譯器不會直接把它替換到main中。也就是說實際上"increment(int i)"只是作為乙個普通函式被呼叫,並不具有內聯函式的性質,無法提高執行效率。

在DocX中寫過載函式的幫助

許式偉2006 12 23 今天,我發布了docx的乙個重要公升級。這個公升級主要解決了一直以來困擾我很久的函式過載 function overload 問題。原先,docx只支援在主題文件 man檔案 中書寫同名函式的幫助,而.h cpp等中無法做到。但是主題文件是我準備逐步淘汰的寫法。為此我設想...

在DocX中寫過載函式的幫助

許式偉2006 12 23 今天,我發布了docx的乙個重要公升級。這個公升級主要解決了一直以來困擾我很久的函式過載 function overload 問題。原先,docx只支援在主題文件 man檔案 中書寫同名函式的幫助,而.h cpp等中無法做到。但是主題文件是我準備逐步淘汰的寫法。為此我設想...

寫乙個函式,實現strstr

要求 寫乙個函式,實現strstr,即從乙個字串中查詢另乙個字串的位置,如 strstr 12345 34 返回值為2,在2號位置找到字串34。include include include using namespace std int strstr char str,char str1 else...