c++類定義和類實現


預備知識:

c++中我們cpp文件和.h文件的區別是,cpp文件是需要編譯的文件,成為一個獨立的編譯單元,而h文件從來是不需要編譯,只是用於預處理。

 

通常我們在cpp文件中,完成函數的實現,然后在h中則是對於函數的聲明,由於默認情況下,全局變量和全局函數存儲類型都是extern類型的,所以我們不需要顯示的使用extern

 

這樣,我們其他的cpp文件,只要#include .h文件,則在cpp中實現的函數,就能在其他cpp中使用,因為我們已經用.h文件,完成了extern函數聲明的操作。

 

 

 

 

c++類的定義,其實就是定義一個類型。

class A{

public:

  void  fun(int n);

  int   fun1(void);

public:

  int  num;

};

 

其實就是定義了一種類型。和我們通常所說的定義不一樣。

類的定義,是不能重復定義的,在同一個編譯單元中,只能定義類一次。如果重復定義,會出錯。同時類聲明和類定義都是內部鏈接。只是為當前編譯單元所用。

 

因此,把類的定義,放在.h文件中,類的實現放在專門的cpp中。這樣包含.h的其他cpp,就可以使用cpp中實現的函數。。

 

同時注意:類的實現cpp文件的編譯,必須依賴於類的定義文件.h,所以我們在類實現文件cpp中必須#include< ........h>,用於編譯,否則會出錯。這是不同於普通的函數。

 

 

//student.h                 (這是頭文件,在此文件中進行類的聲明)
class Student                            //類聲明        
{ public:
void display( );                  
private:
int num; 
char name[20];     
char sex;                            
};
//student.cpp                            //在此文件中進行函數的定義
#include <iostream>
#include ″student.h″                     
void Student∷display( )                 
{cout<<″num:″<<num<<endl;          
cout<<″name:″<<name<<endl; 
cout<<″sex:″<<sex<<endl;   
}
//main.cpp                            主函數模塊
#include <iostream>
#include ″student.h″                 
int main( )
{Student stud;                       
stud.display( );                     
return 0;
}

 

類中只有static成員變量。具有外部鏈接特性。所以這要求,static成員變量的初始化一定要在.Cpp文件中。如果在h文件中。那么多個cpp文件#include,則發生多次重復定義的錯誤。

 

 

類定義和類實現分離的好處

1/快編譯速度

當然可以啊。相反,如果你把類的所有代碼都內聯定義到頭文件中,那么所有需要用到這個類的CPP文件實際上都包含了更多的代碼,編譯器編譯每個這樣的CPP文件時都編譯了這些代碼。而分開定義,這些代碼就只被編譯了一遍,也就是在編譯實現那個類的CPP文件時。

在特殊情況下確實可以的
假如我有一個類a被幾百個cpp同時包含,如果定義和聲明放在一起,只要我對a進行任何修改,那幾百個文件都必須被重新編譯。而如果頭文件只包含聲明,修改a的實現不會導致那些文件被重新編譯,有時可以極大的提高速度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM