十-----物件和類
十-----物件和類
- 程式員使用私有成員函式來處理不屬於公有介面的實現細節
- 行內函數定義部分加上 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;