6.1 類(lèi)的定義
1類(lèi)的定義
類(lèi)的定義可以分為兩部分:說(shuō)明部分和實(shí)現部分。說(shuō)明部分說(shuō)明類(lèi)中包含的數據成員和成員函數,實(shí)現部分是對成員函數的定義。類(lèi)定義的一般格式如下:
//類(lèi)的說(shuō)明部分
class<類(lèi)名>
{
public:
<成員函數或數據成員的說(shuō)明> //公有成員,外部接口
protected:
<數據成員或成員函數的說(shuō)明> //保護成員
private:
<數據成員或成員函數的說(shuō)明> //私有成員
。;
//類(lèi)的實(shí)現部分
<各個(gè)成員函數的實(shí)現>
其中,class是聲明類(lèi)的關(guān)鍵字;<類(lèi)名>是要聲明的類(lèi)的名字,必須符合標識符定義規則;花括號表示類(lèi)的聲明范圍,說(shuō)明該類(lèi)的成員,其后的分號表示類(lèi)聲明結束。類(lèi)的成員包括數據成員和成員函數,分別描述類(lèi)所表達的問(wèn)題的屬性和行為。關(guān)鍵字public、private和protected稱(chēng)為訪(fǎng)問(wèn)權限修飾符,它們限制了類(lèi)成員的訪(fǎng)問(wèn)控制范圍。
各個(gè)成員函數的實(shí)現即可以在類(lèi)體內定義,也可以在類(lèi)體外定義。如果一個(gè)成員函數在類(lèi)體內進(jìn)行了定義,它將不出現在類(lèi)的實(shí)現部分;如果所有的成員函數都在類(lèi)體內進(jìn)行了定義,則可以省略類(lèi)的實(shí)現部分。在類(lèi)體內定義的成員函數都是內聯(lián)函數。
2類(lèi)成員的訪(fǎng)問(wèn)控制
類(lèi)中提供了3種訪(fǎng)問(wèn)控制權限:公有(public)、私有(private)和保護(protected)。其中,公有類(lèi)型定義了類(lèi)的外部接口,任何一個(gè)外部的訪(fǎng)問(wèn)都必須通過(guò)外部接口進(jìn)行;私有類(lèi)型的成員只允許本類(lèi)的成員函數訪(fǎng)問(wèn),來(lái)自類(lèi)外部的任何訪(fǎng)問(wèn)都是非法的;保護類(lèi)型介于公有類(lèi)型和私有類(lèi)型之間,在繼承和派生時(shí)可以體現出其特點(diǎn)。
3類(lèi)的數據成員
類(lèi)中的數據成員描述類(lèi)所表達的問(wèn)題的屬性。數據成員在類(lèi)體中進(jìn)行定義,其定義方式與一般變量相同,但對數據成員的訪(fǎng)問(wèn)要受到訪(fǎng)問(wèn)權限修飾符的控制。
在定義類(lèi)的數據成員時(shí),要注意以下幾個(gè)問(wèn)題。
(1)類(lèi)中的數據成員可以是任意類(lèi)型,包括整型、浮點(diǎn)型、字符型、數組、指針和引用等,也可以是對象。但是要注意,只有另外一個(gè)類(lèi)的對象,才可以作為該類(lèi)的成員,即作為該類(lèi)的成員對象而存在。自身類(lèi)的對象是不可以作為自身類(lèi)的成員存在的,但自身類(lèi)的指針可以。
(2)在類(lèi)體中不允許對所定義的數據成員進(jìn)行初始化。
4類(lèi)的成員函數
類(lèi)的成員函數描述類(lèi)所表達的問(wèn)題的行為。類(lèi)中所有的成員函數都必須在類(lèi)體內進(jìn)行說(shuō)明。但成員函數的定義既可以在類(lèi)體內給出,也可以在類(lèi)體外給出。
第一種方式是將成員函數直接定義在類(lèi)的內部。
第二種方式是在類(lèi)聲明中給出對成員函數的說(shuō)明,而在類(lèi)外部對成員函數進(jìn)行定義(但成員函數仍然在類(lèi)范圍內)。這種在類(lèi)外部定義的成員函數的一般格式是:
<返回類(lèi)型><類(lèi)名>::<成員函數名>(<參數表>)
{
<函數體>
。
在類(lèi)體外定義成員函數時(shí),要注意必須在成員函數名前加上類(lèi)名和作用域運算符(::)。作用域運算符用來(lái)標識某個(gè)成員屬于某個(gè)類(lèi)。作用域運算符的使用格式如下:
<類(lèi)名>::<成員函數名>(<參數表>) 或 <類(lèi)名>::<數據成員名>
成員函數的兩種定義方式之間是有差別的。如果一個(gè)成員函數的聲明和定義都在類(lèi)體內,那么這個(gè)成員函數就是內聯(lián)函數。如果一個(gè)成員函數的聲明在類(lèi)體內,而定義在類(lèi)體外,這時(shí)對該成員函數的調用是按一般函數進(jìn)行的。如果要將定義在類(lèi)體外的成員函數也作為內聯(lián)函數處理,就必須在成員函數的定義前加上關(guān)鍵字“inline”,以此顯式地說(shuō)明該成員函數也是一個(gè)內聯(lián)函數。
成員函數除了可以定義為內聯(lián)函數以外,也可以進(jìn)行重載,可以對其參數設置默認值。
編輯推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |