C++中類的概念讓很多新學者都困惑不解,很多書上對這部分也沒有系統的整理,往往顯的章節雜亂無章,概念滿天飛。其實經過仔細的思考,我發現類中的概念還是計較系統的,現在整理如下,順便理一下思路,也為以後的學習做好更好的鋪墊。
總體的思路如以下的順序
1.類的定義---其實就是定義了新的類型,同以前經典的類型如int,char等沒有任何區別。只是這個類定義中不但包含了資料(屬性),而且還有函數(方法)罷了.
2.對象的定義---使用新的類型,產生該類型的一個變數,在OOP中就叫對象或者執行個體。
3.對象的初始化---對象的初始化與一般變數的初始化基本相同,就是讓這個變數內部的資料有值。
4.類內部的資料變數的不同類型----一般變數、待用資料變數、常資料變數、內含另一個類對象的資料變數
5.類內部的成員函數的不同類型----就好像是一般的函數,不過又分為一般函數、靜態函數、常函數等
6.對象的操作---對象進行賦值操作、加法操作、減法操作等,這部分其實就是運算子多載啦!
1。類的定義
1.1類定義的三種寫法:
a。方法寫在類定義的內部(內嵌函式)
b。方法寫在類定義的外部(外聯函數)
c。類的定義寫在外部檔案中
2。對象的定義
2.1對象定義的兩種方法
a。類名 對象名(帶參數與不帶參數)
b。類名 *指標變數=new 類名()
2.2對象定義時的不同位置
a。定義在所有函數的外部--全域對象
b。定義在函數的內部---局部對象
c。定義在函數的內部,但是前面有關鍵字static---靜態局部對象
d。定義堆對象----使用new操作符。
e。定義時前面加有關鍵字const ---常對象
3。對象的初始化
對象的初始化就像一般變數的初始化,一般變數的初始化方法有三種:
a。int a=10;
b。int b;b=10;int a=b;
c。int b;b=10;int a(b);
相對應的對象的初始化也有三種方式
a。不但參數的建構函式的初始化
b。帶參數的建構函式的初始化
c。複製建構函式的初始化---使用一個現有對象來初始化另一個對象。這裡有一個淺拷貝與深拷貝的概念喲!很重要 。
既然對象的初始化時,需要建構函式,當然死亡時,就應該有解構函式了,解構函式的調用順序與建構函式的調用順序永遠相反,為什嗎?看看棧吧!哈哈。
4。類內部的資料變數的不同類型
只要記住以下幾個規律即可
a。待用資料成員,在類定義的下面,main函數的上面一定要初始化。
b。待用資料成員為所有的對象公有,最經典的例子就是對象計數器了。
c。類內如果定義了常資料成員,就是資料成員的前面有關鍵字const,那麼它的初始化必須放在建構函式的初始化列表中,為什嗎?因為常量一出生就要有值,而且不允許修改,沒辦法在建構函式內部賦值呀!明白了吧!
d。類內包含一個另外一個類的對象時,有點麻煩,分開講
1。我稱內部包含的這個類對象為內含類對象。
2。內含類對象的初始化必須放在建構函式的初始化列表中。
3。內含類對象與包含它的類對象的建構函式的順序是:內含類的建構函式--->外部類的建構函式
5。類內部的成員函數的不同類型
a。靜態成員函數在對象還沒有出生的時候已經存在,所以可以通過類名調用,類名::方法名()
b。靜態成員函數嚴禁對類的非待用資料操作
c。常對象、常成員函數
1。常成員函數的定義時,const不能放在前面,而是放在函數定義()的後面,標誌著const限制的是函數裡面的操作,這樣常成員函數在內部就不能改變對象的資料成員了,只能讀取。
2。常對象只能調用常成員函數,一般對象即可以一般函數,而且可以調用常成員函數,但是一般函數的優先順序要高於常成員函數。
6。運算子的重載
a。作為內建函式重載---有一個參數,並且函數不能使用帶有預設值參數的函數
b。作為友元函數重載---有兩個參數