物件成員特點總結:
(1)例項化物件a時,如果物件a有物件成員b,那麼先執行物件b的建構函式,再執行a的建構函式。
(2)如果物件a中有物件成員b,那麼銷毀物件a時,先執行物件a的析構函式,再執行b的析構函式。
(3)如果物件a中有物件成員b,物件b沒有預設建構函式,那麼物件a必須在初始化列表中初始化物件b(
原因:因為例項化a時,會先執行b的建構函式,再執行a的建構函式,如若物件b沒有預設建構函式,即需要給b的建構函式傳遞引數才能呼叫,但是此時a的建構函式還沒有執行,因此它還拿不到a建構函式的引數,所以先呼叫b的建構函式這個過程將無法進行。而初始化列表會先於建構函式的執行對物件成員進行初始化,因此不必再擔心b的建構函式拿不到引數而無法執行的問題。因此如果b沒有預設建構函式,那麼物件a必須在初始化列表中初始化物件b.
)類a和b的關係就好比是汽車和零部件的關係,例項化類a就相當於產生汽車的過程,肯定要先生產零部件再組裝生成汽車,因此構造的時候先構造物件成員類b,再構造類a。
銷毀物件就跟銷毀汽車的過程類似,必須先銷毀汽車才能取其零部件,因此先呼叫類a的析構函式銷毀類a,再銷毀其物件成員類b。
具體由下面的**演示,可直接run。
#include
using namespace std;
class coordinate
~coordinate()
public:
int m_ix;
int m_iy;
};class line
執行結果如下:
coordinate() 1,2coordinate() 3,4
line()
(1,2)
(3,4)
~line()
~coordinate() 3,4
~coordinate() 1,2
C 學習之物件成員指標篇
所謂物件成員指標就是讓乙個類的物件的指標作為另外乙個類的成員變數,物件成員就是讓乙個類的物件成為另乙個類的成員變數。下面以 舉例說明 公用座標類 class coordinate 1 物件成員 如下 class line 2 物件成員指標 如下 class line 初始化有兩種方式 1 line ...
c 之物件成員
class line 線段類物件呼叫了下面的點類的物件來構成他 coordinate coordinate int x,int y void line setb int x,int y void line printinfo cout p printinfo delete p p null retu...
C 之常物件,常物件成員
一.常物件 1.常物件定義 time const t1 1,2,3 或者const time t1 2.常物件不能呼叫該物件的非const型的成員函式 系統主動呼叫的構造析構函式除外 3.常成員函式的宣告方法,後面加個const即可 void get time const 4.常物件不能修改物件內的...