第十章 對象和類

C++跟C相比最重要的改進就是提供了類,這本書到了第十章終於講這個了。。。而且還是最基礎的基礎,可見C++博大精深啊,路漫漫其修遠兮,吾只能慢慢一點一點求索啊 


1. 過程性編程和麪向對象編程

學習類肯定得知道爲什麼有類,類是爲了面向對象的編程,區別於老一代面向過程的編程。過程性編程就是首先考慮要遵循的步驟,然後考慮如果一步一步表示這些數據。但是實際情況往往不是一步一步來的,一會跳到這一會跳到那,所以就需要更智能的編程思路,這就是基於對象的編程:首先建立描述要操作的對象,然後定義對象之間的操作,這些構成了程序的各種接口,之後用戶根據各自接口來完成最後的程序。


這兩者之間的區別看起來很容易,但實質上是兩種編程思想的區別,所以要在之後的學習中不斷體會。


2. 抽象和類

前面說了面向對象編程首先是要建立描述要操作的對象,這一步叫做抽象。抽象是可以描述一個具體的對象,也可以是描述一個操作,也可以說是描述一個問題。C++把各種實際的東西抽象成類,也叫用戶定義類型(於內置類型相對應)。


書中舉了一個把某人持有的某種股票抽象成類的例子。首先我們得必須記錄“某人”,可能是他的全名,ID,地址等,同時也得記錄“某種股票”, 包括它的當前價格,某人持有的股票數量等。之後我們得定義一系列操作,包括獲得股票,增持,賣出股票,顯示股票等等。這樣的一個類必須有兩個部分組成:

類聲明,以數據成員的方式描述數據部分(某人,某種股票),以成員函數(被稱爲方法)的方式描述共有接口 (接口就是用戶或者程序訪問或者使用這個類的連接口)

類方法:描述如何實驗類成員函數


類用關鍵字class聲明,如上面的股票類可以這樣

class Stock {

private:

string someone;

double shares;

...

public:

void acquire(someone, someshares, share_price);

void sale(..)

void show(...)

...

};


一般這樣的類聲明可以放在一個頭文件中,成員函數可以直接寫在下面,也可以另開一個cpp文件寫。

類聲明很像struct,但多了private,public 關鍵字,也可以包含函數。


聲明瞭一個類,就可以聲明一個類的對象,比如男人是一個類,這個類被聲明之後,就可以用它來聲明一個男人的對象Tom

上述stock類可以這樣聲明它的對象:

Stock sally;

這樣sally.someone就可以是名字,sally.sale(...) 就描述sally.someone賣了股票,以多少錢

private和public關鍵字描述對類成員的房屋控制。如果是private,表示這是對象的私有成員,外部不能調用修改,而只能通過public下的共有成員來訪問或者修改。訪問控制還有一個關鍵字叫protected,十三章會講


這裏涉及到另外一個概念,叫封裝,就是將實現細節放在一起並將它們與抽象分開。封裝可以是多種方式,比如把數據設爲private,比如將方法的實現細節設爲private,也可以是把public的方法放在不同的文件中


我們現在在類裏面聲明瞭方法,那怎麼在類外面或者另外一個文件中描述這個類方法呢,比如上例

void Stock:: sale(...)

{ ...}

注意這裏要用::來表示sale方法是Stock類的一個成員。 方法則可以任意類的成員,比如Stock的sale()就可以調用Stock的任何成員變量,不論private與否


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章