在面向對象的程序設計中,有經常接觸類、對象等專業名詞;到底什麼是類、什麼是對象呢?在程序又是怎樣運用呢?類是面向對象程序設計的核心,它實際是一種新的數據類型,也是實現抽象類型的工具,因為類是通過抽象數據類型的方法來實現的一種數據類型。類是對某一類對象的抽象;而對象是某一種類的實例,因此,類和對象是密切相關的。沒有脫離對象的類,也沒有不依賴於類的對象。
什麼是類
類是一種復雜的數據類型,它是將不同類型的數據和與這些數據相關的操作封裝在一起的集合體。這有點像C語言中的結構,唯一不同的就是結構沒有定義所說的“數據相關的操作”,“數據相關的操作”就是我們平常經常看到的“方法”,因此,類具有更高的抽象性,類中的數據具有隱藏性,類還具有封裝性。
類的結構(也即類的組成)是用來確定一類對象的行為的,而這些行為是通過類的內部數據結構和相關的操作來確定的。這些行為是通過一種操作接口來描述的(也即平時我們所看到的類的成員函數),使用者只關心的是接口的功能(也就是我們只關心類的各個成員函數的功能),對它是如何實現的並不感興趣。而操作接口又被稱為這類對象向其他對象所提供的服務。
類的定義格式
類的定義格式一般地分為說明部分和實現部分。說明部分是用來說明該類中的成員,包含數據成員的說明和成員函數的說明。成員函數是用來對數據成員進行操作的,又稱為“方法”。實現部分是用來對成員函數的定義。概括說來,說明部分將告訴使用者“干什麼”,而實現部分是告訴使用者“怎麼干”。
類的一般定義格式如下:
class <類名>
{
public: <成員函數或數據成員的說明>
private: <數據成員或成員函數的說明>
}; <各個成員函數的實現>
下面簡單地對上面的格式進行說明:class是定義類的關鍵字,<類名>是種標識符,通常用T字母開始的字符串作為類名。一對花括號內是類的說明部分(包括前面的類頭)說明該類的成員。類的成員包含數據成員和成員函數兩部分。從訪問權限上來分,類的成員又分為:公有的(public)、私有的(private)和保護的(protected)三類。公有的成員用public來說明,公有部分往往是一些操作(即成員函數),它是提供給用戶的接口功能。這部分成員可以在程序中引用。私有的成員用private來說明,私有部分通常是一些數據成員,這些成員是用來描述該類中的對象的屬性的,用戶是無法訪問它們的,只有成員函數或經特殊說明的函數才可以引用它們,它們是被用來隱藏的部分。保護類(protected)將在以後介紹。
關鍵字public,private和protected被稱為訪問權限修飾符或訪問控制修飾符。它們在類體內(即一對花括號內)出現的先後順序無關,並且允許多次出現,用它們來說明類成員的訪問權限。
其中,<各個成員函數的實現>是類定義中的實現部分,這部分包含所有在類體內說明的函數的定義。如果一個成員函數的類體內定義了,實現部分將不出現。如果所有的成員函數都在類體內定義,則實現部分可以省略。
下面給出一個日期類定義的例子:
class Tdate
{
public:
void SetDate(int y, int m, int d);
int IsLeapYear();
void Print();
private:
int year, month, day;
}; //類的實現部分
void Tdate::SetDate(int y, int m, int d)
{
year = y;
month = m;
day = d;
}
int Tdate::IsLeapYear()
{
return(year%4==0 && year%100!=0) || (year%400==0);
}
void Tdate::Print();
{
cout< }
這裡出現的作用域運算符::是用來標識某個成員函數是屬於哪個類的。
該類的定義還可以如下所示:
class Tdate
{
public:
void SetDate(int y, int m, int d)
{year=y; month=m; day=d;}
int IsLeapYear()
{return(year%4==0 && year%100!=0) || (year%400==0);}
void Print()
{cout< private:
int yeay, month, day;
}
這樣對成員函數的實現(即函數的定義)都寫在了類體內,因此類的實現部分被省略了。如果成員函數定義在類體外,則在函數頭的前面要加上該函數所屬類的標識,這時使用作用域運算符::。
定義類時應注意的事項
1、在類體中不允許對所定義的數據成員進行初始化。
2、類中的數據成員的類型可以是任意的,包含整型、浮點型、字符型、數組、指針和引用等。也可以是對象。另一個類的對象,可以作該類的成員,但是自身類的對象是不可以的,而自身類的指針或引用又是可以的。當一個類的對象用為這個類的成員時,如果另一個類的的定義在後,需要提前說明。
3、一般地,在類體內先說明公有成員,它們是用戶所關心的,後說明私有成員,它們是用戶不感興趣的。在說明數據成員時,一般按數據成員的類型大小,由小至大說明,這樣可提高時空利用率。
4、經常習慣地將類定義的說明部分或者整個定義部分(包含實現部分)放到一個頭文件中。