第九章 怎樣使用類和對象數組
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 虛擬類型名>
函數類型名 函數模版名<虛擬類型名> :: 成員函數名(參數表){函數體;};
*定義對象
類模板名 <實際類型名> 對象名(參數表);
我的比較分享,歡迎指教;未經容許,請勿轉載;