第九章 怎樣使用類和對象

第九章 怎樣使用類和對象數組

 

1.構造函數函數

不須要用戶調用,在創建對象的時候自動執行;this

類內:類名(參數表){初始化語句;}//帶參數類型spa

類名(參數表):數據成員(參數),...{初始化語句;}//使用初始化列表;指針

類名(參數表【參數類型 參數名=初始值....】){初始化語句;}對象

注意:應在聲明構造函數的同時指定默認值;內存

一個類只能有一個默認構造函數,不可同時出現無參構造函數和默認構造函數作用域

類外:  類名::類名(參數表){初始化語句;}table

*說明:模板

構造函數沒有返回值,也沒有類型;

構造函數不能經過對象調用;

能夠用一個對象初始化另一個對象;

2.析構函數(~取反符)

*執行析構函數的狀況——對象釋放

*析構函數的做用不是刪除對象,而是在撤銷對象佔用的內存以前完成一些清理工做

*析構函數只有一個,不能被重載;

*先構造的後析構,後構造的先析構

3.對象數組與對象指針(與普通類型使用相同)

4.指向對象成員的指針

數據成員:

數據類型名 *指針變量名;(若是是公用的成員,能夠直接經過指針在類外進行訪問)

函數成員:

類型名 (類名::*指針變量名)(參數表);

指針變量名 = &類名::成員函數名;

5.公用數據的保護

*常對象:

類名const對象名[(實參表)];或者 const類名 對象名[(實參表)];

說明:對於常對象,只能調用它的常成員函數,而不能調用普通成員函數;

*常成員函數聲明:函數類型 函數名(參數表)const

說明:常成員函數能夠訪問長對象中的數據成員;但仍然不容許修改常對象中數據成員的值

*將常對象中的某個數據成員修改爲可更變的數據成員:mutable

mutable 類型名 變量名;

6.常對象成員

*常數據成員:只能經過構造函數的參數初始化表對常數據成員初始化;

*常函數成員:只能引用文本類的數據成員,不能修改;

類型名 函數名(參數表)const//const在聲明和定義都要使用該關鍵詞

 

形參

實參

合法性

指針所指對象值的可變性

指向非const型變量的指針

const變量的地址

合法

能夠

指向非const型變量的指針

Const變量的地址

非法

/

指向const型變量的指針

Const變量的地址

合法

不能夠

指向const型變量的指針

const變量的地址

合法

不能夠

 

7.對象的常引用

若是不但願函數調用參數的時候,修改參數,能夠把函數形參聲明爲常引用

函數類型 函數名 const 類型名 &);

8.Const型數據的小結

形式

含義

類名 const 變量名

定義了常對象,其值在任何狀況下都不能夠改變

類型名 類名::函數名 const

定義了類內常成員函數,可引用,不可修改

類名 *const 變量名

定義了指向該類對象的常指針,指向的對象不可變

Const 類名 *變量名

定義指向該類的常對象的指針,該對象不可經過指針指向來修改

Const 類名&變量名 = 對象名

定義該類對象的引用,兩種指向同一空間,對象不可修改

 

9.對象的動態創建和釋放

New運算符動態分配空間後,返回一個指向新對象的指針,即內存空間的起始地址

Delete

10.對象賦值和複製

賦值:對象1 = 對象2

複製:類名 對象2(對象1);

  類名 對象2 = 對象1

複製構造函數:參數爲同類的常引用

11.靜態成員

1.靜態數據成員

*若是但願對象中的數據成員是一致的那麼能夠聲明爲靜態數據成員

*靜態數據成員不屬於某一個對象,在爲對象分配空間中不包括靜態數據成員所佔的空間。靜態數據成員是有獨立的存儲空間。

*全部同類的對象都共享類中的靜態成員數據

*聲明形式:static 類型名 變量名

*初始化形式:類型名 類名::變量名 = 初始值;

//不能用參數初始化表對靜態數據成員初始化。

*在類外,靜態數據成員便可用對象名訪問,也可用類名訪問

2.靜態函數成員

*靜態函數成員是類的一部分而不是對象的一部分,因此在類外調用公用的靜態成員函數,要用類名和做用域運算符「::」。

調用形式:類名::函數部分;或者 對象名.函數部分;

*靜態成員函數沒用this指針,所以靜態成員函數不能訪問對象的非靜態數據成員;可是能夠直接訪問本類的靜態成員數據;靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態數據成員(若非要使用非靜態成員,應經過對象名和成員運算符「.」)

說明:公用成員函數能夠引用靜態數據成員和非靜態數據成員

約定:只用靜態成員函數引用今天數據成員,而不引用非靜態數據成員。

12.友元

1.友元函數:

*普通函數聲明爲友元函數:friend 類型名 函數名(參數表);

*類成員函數聲明爲友元函數:friend 類型名 其餘類名::函數名 (參數表);

//這裏使用到類的「提早引用」的聲明(Class 類名;

建議:先完成類的創建在添加友元成員函數

2.友元類:

*friend 類名;

*說明:1友元的關係是單向的;2友元的關係不能傳遞;

13.類模板(功能相同,僅僅是數據類型不一樣)

*聲明:

template < c lass 虛擬類型名1 ,c lass 虛擬類型名2...>

   C lass 類模版名{

類體;

*類模板是類的抽象,類是類模板的具體實現

*使用:

類模板名<實際類型名> 對象名(參數表);

 

*特別注意:在模版外定義成員函數格式有所不一樣

Tempalte <class 虛擬類型名>

函數類型名 函數模版名<虛擬類型名> :: 成員函數名(參數表){函數體;};

*定義對象

類模板名 <實際類型名> 對象名(參數表);

 

 

我的比較分享,歡迎指教;未經容許,請勿轉載;

相關文章
相關標籤/搜索