什么是類?什么是對象?對于面向?qū)ο蟮腃++語言學(xué)習(xí),類和對象的理解是整個(gè)語言學(xué)習(xí)中核心的基礎(chǔ)。通俗的理解,類其實(shí)就是一個(gè)模子,是一個(gè)變量類型,對象就是這個(gè)類型定義出來的具體的變量,就像int a;這句話,int對應(yīng)類,a就對應(yīng)對象。這樣大家應(yīng)該就好理解了,但需要注意的是int是C++的內(nèi)置類型,并不是真正的類。
所以,概括的講:類是對象的抽象和概括,而對象是類的具體和實(shí)例。請大家理解這句話。
那么C++中的類長什么樣呢?簡單說,C++中類的其實(shí)就是包含函數(shù)的結(jié)構(gòu)體!因?yàn)镃++類里面的成員除了可以像C語言的結(jié)構(gòu)體那樣包含基本變量以外,還可以包含函數(shù),前者叫做成員變量,后者叫做成員方法。
關(guān)鍵字用class類定義,比如下面定義一個(gè)C++的類,學(xué)生類:
class Student { public: int num; char name[100]; int score; int print() { cout<<num<<" "<<name<<" "<<score; return 0; } };
大家可以看到,形式上和C語言的結(jié)構(gòu)體非常像,成員有變量也有函數(shù),今后我們要習(xí)慣稱之為屬性和方法了。值得一提的是大家注意觀察還有類里還有一個(gè)public的東西,它是控制成員訪問權(quán)限的一個(gè)存取控制屬性,除了public以外,還有private、protected一共三種。其中private表示私有,被它聲明的成員,僅僅能被該類里的成員訪問,外界不能訪問,是最封閉的一種權(quán)限;protected比private稍微公開一些,除了類內(nèi)自己的成員可以訪問外,它的子類也可以訪問(關(guān)于子類的概念我們會在后面詳細(xì)展開);而public聲明的成員,則可以被該類的任何對象訪問,是完全公開的數(shù)據(jù)。這里大家簡單理解,之后伴隨代碼一邊實(shí)驗(yàn)一邊體會。值得提醒一下的是,類定義后面還有一個(gè)分號,大家注意,不要丟掉!
好了,在認(rèn)識了類的基本樣子以后,下面我們再給大家看另一種寫法,我們剛才看的這種寫法,成員函數(shù)是寫在類里的,如果類里的成員函數(shù)很多的話,閱讀起來就會亂很多,故此,C++還支持另外一種寫法,就是成員函數(shù)僅在類內(nèi)聲明函數(shù)原型,在類外定義函數(shù)體,這樣在類里可以看到所有成員函數(shù)的列表,像目錄一樣一目了然,規(guī)范很多。
在類中聲明函數(shù)原型的方法與一般C語言的函數(shù)原型聲明一樣,而在類外定義函數(shù)的方法,則需要類名加::作用域限定符表示,我們還以剛才的Student類為例,類外定義的代碼如下:
class Student { public: int num;//學(xué)號 char name[100];//名字 int score;//成績 int print();//類內(nèi)聲明print函數(shù) }; int Student::print()//在類外定義完整的print函數(shù) { cout<<num<<" "<<name<<" "<<score; return 0; }
大家注意print函數(shù)在類里聲明后,我們在后面又完整的定義了出來,函數(shù)頭部分在返回值和函數(shù)名之間用類名加::的方式指明這個(gè)函數(shù)是屬于哪個(gè)類的。
請大家熟悉以上兩種用法,然后自行上機(jī)理解,根據(jù)情況選擇。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程