类名::构造函数名(参数表): 成员变量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; }程序的输出结果是:
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有