什麼是類別?什麼是對象?對於物件導向的C++語言學習,類別和物件的理解是整個語言學習中核心的基礎。通俗的理解,類別其實就是一個模子,是一個變數類型,物件就是這個類型定義出來的具體的變量,就像int a;這句話,int對應類,a就對應物件。這樣大家應該就好理解了,但要注意的是int是C++的內建型別,並不是真正的類別。
所以,概括的講:類別是物件的抽象和概括,而物件是類別的具體和實例。請大家理解這句話。
那麼C++中的類別長什麼樣子呢?簡單說,C++中類別的其實就是包含函數的結構體!因為C++類別裡面的成員除了可以像C語言的結構體包含基本變數以外,還可以包含函數,前者叫做成員變量,後者叫做成員方法。
關鍵字用class類定義,例如下面定義一個C++的類,學生類:
classStudent{public:intnum;charname[100];intscore;intprint(){cout<<num<<<<name<<<<score;return0;}};
大家可以看到,形式上和C語言的結構體非常像,成員有變數也有函數,今後我們要習慣稱之為屬性和方法了。值得一提的是大家注意觀察還有類別裡還有一個public的東西,它是控製成員存取權限的一個存取控制屬性,除了public以外,還有private 、 protected一共三種。其中private表示私有,被它聲明的成員,僅僅能被該類別裡的成員訪問,外界不能訪問,是最封閉的一種權限;protected比private稍微公開一些,除了類內自己的成員可以訪問外,它的子類別也可以存取(關於子類別的概念我們會在後面詳細展開);而public聲明的成員,則可以被該類別的任何物件訪問,是完全公開的資料。這裡大家簡單理解,之後伴隨程式碼一邊實驗一邊體會。值得提醒的是,類別定義後面還有一個分號,大家注意,不要丟掉!
好了,在認識了類別的基本樣子以後,下面我們再給大家看另一種寫法,我們剛才看的這種寫法,成員函數是寫在類別裡的,如果類別裡的成員函數很多的話,閱讀起來就會亂很多,故此,C++還支援另外一種寫法,就是成員函數只在類別內宣告函數原型,在類別外定義函數體,這樣在類別裡可以看到所有成員函數的列表,像目錄一樣一目了然,規範很多。
在類別中宣告函數原型的方法與一般C語言的函數原型宣告一樣,而在類別外定義函數的方法,則需要類別名稱加上::作用域限定符表示,我們也以剛才的Student類別為例,類外定義的程式碼如下:
classStudent{public:intnum;//學號charname[100];//名字intscore;//成績intprint();//類別內宣告print函數};intStudent::print()//在類別外定義完整的print函數{cout<<num<<<<name<<<<score;return0;}
大家注意print函數在類別裡宣告後,我們在後面又完整的定義了出來,函數頭部分在傳回值和函數名之間用類別名稱加::的方式指明這個函數是屬於哪個類別的。
請大家熟悉以上兩種用法,然後自行上機理解,根據情況選擇。