類和物件
想象一個廚房……在這個廚房裡,你會擁有各種電器(爐子、冰箱、微波爐、水壺等)。這些電器構成了廚房,沒有它們,它就只是另一個房間。C++ 的工作方式基本上是相同的。廚房就是你的類,而所有其他電器都是類的成員。
定義類的通用
語法是:
1 2 3 4
|
class classIdentifier
{
classMembersList
};
|
**缺少分號會導致語法錯誤!
類的成員分為三類:
私有 (private)、
公有 (public)、
保護 (protected),這三者的統稱是
成員訪問限定符。
關於類的
私有和
公有成員的一些事實
(*)-- 預設情況下,所有成員都被宣告為私有。
(*)-- 如果一個成員是
私有的,你無法在類外部訪問它(示例 1 將對此進行說明)
(*)-- 一個
公有的成員可以在類外部訪問(示例 1 將對此進行說明)
如何選擇公有和私有?
假設我們想定義一個類來實現程式中的一天時間。我們稱這個
類為 clockType。此外,我們使用 3 個變數如下:
1 2 3
|
int hr;
int min;
int sec;
|
我們還希望執行以下功能:
1. 設定時間
2. 獲取時間
3. 列印時間 //嗯,我們需要讀取它,對吧?
4. 時間增加 1 秒
5. 時間增加 1 分鐘
6. 時間增加 1 小時
7. 比較兩個時間是否相等
從上面可以看出,
clockType 類有 10 個成員變數。
好了,你已經走到這一步了,然後呢?這如何幫助解決公有和私有的困境?決定將哪些成員設為公有或私有取決於成員的性質。經驗法則是:
*如果一個成員需要在類外部訪問,將其宣告為公有。
*任何不應被使用者直接訪問的成員都應宣告為私有。
例如,使用者應該能夠設定時間和列印時間,所以它們應該是公有的。另外,增加時間和比較時間的功能也應該宣告為公有。為了防止直接操作成員變數 hour、minute、second,我們將它們設為私有。
**請記住,如果使用者可以直接訪問這些成員,我們還需要 setTime 函式做什麼?
你的程式碼現在看起來應該像這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
class clockType
{
public:
void setTime(int,int,int);
void getTime(int&,int&,int&) const;
void printTime() const;
void IncrementSeconds();
void IncrementMinutes();
void IncrementHours();
bool equalTime(const clockType&) const;
private:
int hr;
int min;
int sec;
};
|
(*)--
const 關鍵字指定這些函式不能修改 clockType 類的變數的成員變數。
物件宣告
到目前為止,我們一直在使用“類變數”這個詞,在技術 C++ 術語中,它被稱為
物件。
宣告類物件的
語法是:
clockType myClock; // 宣告一個物件,myClock
訪問類成員
物件訪問類成員的
語法是:
類物件名.成員名 // . (點) 被稱為點運算子
好了,我知道這些術語都挺枯燥的,你想看程式碼而不是讀一篇論文(所以你選擇了 C++ 而不是拉丁語),但跟上這些術語很重要,因為很多人在這裡會卡住。好了,說夠了,讓我們展示一些程式碼。
示例 1 (程式碼片段)
以下程式碼片段將向您展示訪問是如何工作的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
//Declaring our objects
clockType myClock;
clockType yourClock;
//Accessing
myClock.setTime(5,2,30)// values 5,2,30 passed as parameters to function setTime
myClock.printTime();
yourClock.setTime(x,y,z); //x,y,z are variables of type int.
if(myClock.equalTime(yourClock))
.
.
//Some code in here
.
.
//Illegal Statements
myClock.hr =10;
myClock.min = yourClock.min;
/*Illegal because hr and min are private variables and cannot be accessed by the objects*/
|
本教程到此結束,讓所有這些內容消化一下。接下來我們將著手實現成員函式,並提供 clock 原始碼的完整示例,並解釋我所做的每一步。
</.X.>