程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 講講c++ Session 5:成員對象(Member objects)和封閉類(Enclosing class)

講講c++ Session 5:成員對象(Member objects)和封閉類(Enclosing class)

編輯:C++入門知識

講講c++ Session 5:成員對象(Member objects)和封閉類(Enclosing class)


成員對象: 一個類的成員變量是另一個類的對象
封閉類:包含成員對象的類


舉個栗子:

class Tyre { 
private:
int radius; 
int width; 
public:
Tyre(int r, int w):radius(r), width(w) { }
};
class Engine { 
};



class Car {
// 這個類就是所謂的封閉類
//其中包括成員對象Engine和Tyre
private:
int price; 
Tyre tyre;
Engine engine;
public:
Car(int p, int tr, int tw);
};
Car::Car(int p, int tr, int w):price(p), tyre(tr, w){
};
int main(){
Car car(20000,17,225);
return 0;
}


規范:
1、出現成員對象時,該類的構造函數要包含對成員的初始化。如果構造函數的成員初始化列表沒有對成員對象初始化時,則使用成員對象的缺省構造函數。
2、建立一個類的對象時,應先調用其構造函數。但是如果這個類有成員對象,則要先執行成員對象自己所屬類的構造函數,當全部成員對象都執行了自身類的構造函數後,再執行當前類的構造函數。


例如:
class Tyre {
public:
Tyre() { cout << "Tyre contructor" << endl; }
~Tyre() { cout << "Tyre destructor" << endl; }
};
class Engine {
public:
Engine() { cout << "Engine contructor" << endl; }
~Engine() { cout << "Engine destructor" << endl; }
};
7
class CCar {
private:
Engine engine;
Tyre tyre;
public:
Car( ) { cout << “Car contructor” << endl; }
~Car() { cout << "Car destructor" << endl; }
};
int main(){
Car car;
return 0;
}


其輸出為:
Engine contructor
Tyre contructor
Car contructor
Car destructor
Tyre destructor
Engine destructor


根據規范可知,調用順序和編譯器順序是不一樣的,因此輸出也不同。


【參考Tips】
#include
using namespace std;
class Date
{ 
public:
Date( ){ cout<<"This is Date"<
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved