十-----對象和類
- 程序員使用私有成員函數來處理不屬於公有接口的實現細節
- 內聯函數定義部分加上
inline
,聲明部分不須要
- 在OOP中,調用成員函數被稱爲發送消息 "send message"
- 自定義構造函數的參數名不能與類成員名相同,爲了使得參數名更直觀,一般在數據成員名前加前綴
m_
,或者加後綴_
,以免混亂
- 沒有定義構造函數時,編譯器會自動提供默認構造函數;可是一旦定義了非默認構造函數,就必須再手動定義一個默認構造函數
- 默認構造函數有兩種定義方法,一種是無參,另外一種是有參,但全部參數都有默認值。一般,無論有無參數,都應該用默認值初始化全部的參數。即無參的默認構造函數也應該在函數體內賦予數據成員默認值。兩種定義方法不能同時使用
//構造函數隱式與顯示調用
class food = class( "Ok",30,4.76 );
class food( "Ok",30,4.76 );
class *ptr = new class( "Ok",30,4.76 );
//默認構造函數隱式與顯示調用
class good;
class good = class( );
class *pre = new class;
- 析構函數無參
- 若是構造函數使用了
new
,析構函數必須調用delete
- 只要類方法不修改調用對象,就應該申明爲
const
void show( ) const;
- this指針
const Stock & Stock :: topval ( const Stock & s ) const
{
if (s.total_val > total_val)
return s;
else
return *this;
}
//第一個const表示返回類型爲const引用
//第二個const表示函數不能修改顯示調用的對象
//第三個const表示函數不能修改隱式調用的對象
- 對象數組
const int STKS = 3;
Stock food [STKS] = {
Stock("NanoSmart", 12, 20.0),
Stock( ),
Stock("Monolithic Obelisks", 130, 3.25)
};
//訪問
food[0], food[1], food[2]
- 要使用做用域爲類的常量,即常量由全部對象共享。
直接在數據成員中定義const
變量是不可行的,此時並無實例化
有兩種方法,一:枚舉; 二:static靜態數據類型
private:
enum{ ok = 100 };
private:
static const int ok = 100;