1. 程式人生 > >2.2 C++類的成員變量和成員函數

2.2 C++類的成員變量和成員函數

net 進行 key 成員變量 將不 div 內聯 student 如果

參考:http://www.weixueyuan.net/view/6334.html

總結:

  類成員的聲明和定義:

  類成員函數的定義分類內定義(內聯)和類外定義(可用 inline 關鍵字 強制轉換為內聯函數)。

類是一種數據類型,該類型類似於普通的數據類型,但是又有別於普通的數據類型。類這種數據類型是一個包含成員變量和成員函數的一個集合。下面是student類的定義。

[例1] 類可以包含成員變量和成員函數:

  1. class student
  2. {
  3. char name[20]; //姓名
  4. int id_num; //學號
  5. int age; //年齡
  6. char sex; //性別
  7. void set_age(int a);
  8. int get_age();
  9. };

本例聲明了類student,並且在student類中聲明了四個成員變量:name、id_num、age和sex。這四個成員變量用於描述student特性。除此之外我們還在類中定聲明了兩個函數,set_age函數和get_age函數,這兩個函數是student類的成員函數,這兩個函數只給出了聲明,未給出定義。

兩種方法可以給出成員函數的定義:

  • 在類內部進行函數的聲明和定義,此種方式我們稱為inline,也即內聯定義。inline是C++關鍵字,專門用於表示內聯;
  • 在類內進行函數聲明,在類外部進行函數定義。


下面我們分別給出兩種情況的示例。

[例2] 在類內部進行函數的聲明和定義:

  1. class student
  2. {
  3. char name[20]; //姓名
  4. int id_num; //學號
  5. int age; //年齡
  6. char sex; //性別
  7. void set_age(int a){age = a;}
  8. int get_age(){return age;}
  9. };

在本例中,兩個成員函數均是在類聲明內部進行聲明和定義的,因此這兩個函數是inline類型的。

內聯函數可以通知編譯器在編譯階段用成員函數set_age和get_age的函數體替換掉所有調用該函數的代碼,這樣替換後的代碼將不會再出現對這個函數的調用的代碼。通過直接的替換可以在一定程度上提高程序運行效率,通常只是用於一些簡短函數。

[例3] 在類內部聲明函數,在類外部定義函數:

  1. class student
  2. {
  3. char name[20]; //姓名
  4. int id_num; //學號
  5. int age; //年齡
  6. char sex; //性別
  7. void set_age(int a);
  8. int get_age()const;
  9. };
  10. //在類外部定義set_age函數
  11. void student::set_age(int a)
  12. {
  13. age = a;
  14. }
  15. //在類外部定義get_age函數
  16. int student::get_age()const
  17. {
  18. return age;
  19. }

本例中set_age函數和get_age函數在類聲明內部僅有聲明部分,而無定義部分,其函數體在類聲明之外定義。本例中定義函數采用了域解析符 ::。

在類內聲明函數,如果在函數聲明時使用inline關鍵字,如例4所示,則可以將類內聲明類外定義的函數強制轉換為內聯函數。

[例4] 強制轉換為內聯函數:

  1. class student
  2. {
  3. char name[20]; //姓名
  4. int id_num; //學號
  5. int age; //年齡
  6. char sex; //性別
  7. inline void set_age(int a);
  8. inline int get_age();
  9. };
  10. //在類外部定義set_age函數
  11. void student::set_age(int a)
  12. {
  13. age = a;
  14. }
  15. //在類外部定義get_age函數
  16. int student::get_age()
  17. {
  18. return age;
  19. }

在例4中,student類中聲明函數set_age和get_age時都使用了inline關鍵字,這就使得這兩個函數也成為了內聯函數,盡管它們是在類外進行定義函數體的。

2.2 C++類的成員變量和成員函數