類名::建構函式名(參數列): 成員變數1(參數列), 成員變數2(參數列), ...
{
...
}
:
和{
之間的部分就是初始化列表。初始化列表中的成員變數既可以是成員物件,也可以是基本型別的成員變數。對於成員物件,初始化列表的“參數列”中存放的是建構函式的引數(它指明了該成員物件如何初始化)。對於基本型別成員變數,“參數列”中就是一個初始值。#include <iostream> using namespace std; class CTyre //輪胎類 { private: int radius; //半徑 int width; //寬度 public: CTyre(int r, int w) : radius(r), width(w) { } }; class CEngine //引擎類 { }; class CCar { //汽車類 private: int price; //價格 CTyre tyre; CEngine engine; public: CCar(int p, int tr, int tw); }; CCar::CCar(int p, int tr, int tw) : price(p), tyre(tr, tw) { }; int main() { CCar car(20000, 17, 225); return 0; }第 9 行的建構函式新增了初始化列表,將 radius 初始化成 r,width 初始化成 w。這種寫法比在函數體內用 r 和 w 對 radius 和 width 進行賦值的風格更好。建議對成員變數的初始化都使用這種寫法。
#include<iostream> using namespace std; class CTyre { public: CTyre() { cout << "CTyre constructor" << endl; } ~CTyre() { cout << "CTyre destructor" << endl; } }; class CEngine { public: CEngine() { cout << "CEngine constructor" << endl; } ~CEngine() { cout << "CEngine destructor" << endl; } }; class CCar { private: CEngine engine; CTyre tyre; public: CCar() { cout << "CCar constructor" << endl; } ~CCar() { cout << "CCar destructor" << endl; } }; int main() { CCar car; return 0; }執行結果:
#include <iostream> using namespace std; class A { public: A() { cout << "default" << endl; } A(A &a) { cout << "copy" << endl; } }; class B { A a; }; int main() { B b1, b2(b1); return 0; }程式的輸出結果是: