2.2 C++類的成員變量和成員函數
參考:http://www.weixueyuan.net/view/6334.html
總結:
類成員的聲明和定義:
類成員函數的定義分類內定義(內聯)和類外定義(可用 inline 關鍵字 強制轉換為內聯函數)。
類是一種數據類型,該類型類似於普通的數據類型,但是又有別於普通的數據類型。類這種數據類型是一個包含成員變量和成員函數的一個集合。下面是student類的定義。
[例1] 類可以包含成員變量和成員函數:
- class student
- {
- char name[20]; //姓名
- int id_num; //學號
- int age; //年齡
- char sex; //性別
- void set_age(int a);
- int get_age();
- };
本例聲明了類student,並且在student類中聲明了四個成員變量:name、id_num、age和sex。這四個成員變量用於描述student特性。除此之外我們還在類中定聲明了兩個函數,set_age函數和get_age函數,這兩個函數是student類的成員函數,這兩個函數只給出了聲明,未給出定義。
有兩種方法可以給出成員函數的定義:
- 在類內部進行函數的聲明和定義,此種方式我們稱為inline,也即內聯定義。inline是C++關鍵字,專門用於表示內聯;
- 在類內進行函數聲明,在類外部進行函數定義。
下面我們分別給出兩種情況的示例。
[例2] 在類內部進行函數的聲明和定義:
- class student
- {
- char name[20]; //姓名
- int id_num; //學號
- int age; //年齡
- char sex; //性別
- void set_age(int a){age = a;}
- int get_age(){return age;}
- };
在本例中,兩個成員函數均是在類聲明內部進行聲明和定義的,因此這兩個函數是inline類型的。
內聯函數可以通知編譯器在編譯階段用成員函數set_age和get_age的函數體替換掉所有調用該函數的代碼,這樣替換後的代碼將不會再出現對這個函數的調用的代碼。通過直接的替換可以在一定程度上提高程序運行效率,通常只是用於一些簡短函數。
[例3] 在類內部聲明函數,在類外部定義函數:
- class student
- {
- char name[20]; //姓名
- int id_num; //學號
- int age; //年齡
- char sex; //性別
- void set_age(int a);
- int get_age()const;
- };
- //在類外部定義set_age函數
- void student::set_age(int a)
- {
- age = a;
- }
- //在類外部定義get_age函數
- int student::get_age()const
- {
- return age;
- }
本例中set_age函數和get_age函數在類聲明內部僅有聲明部分,而無定義部分,其函數體在類聲明之外定義。本例中定義函數采用了域解析符 ::。
在類內聲明函數,如果在函數聲明時使用inline關鍵字,如例4所示,則可以將類內聲明類外定義的函數強制轉換為內聯函數。
[例4] 強制轉換為內聯函數:
- class student
- {
- char name[20]; //姓名
- int id_num; //學號
- int age; //年齡
- char sex; //性別
- inline void set_age(int a);
- inline int get_age();
- };
- //在類外部定義set_age函數
- void student::set_age(int a)
- {
- age = a;
- }
- //在類外部定義get_age函數
- int student::get_age()
- {
- return age;
- }
在例4中,student類中聲明函數set_age和get_age時都使用了inline關鍵字,這就使得這兩個函數也成為了內聯函數,盡管它們是在類外進行定義函數體的。
2.2 C++類的成員變量和成員函數