类名::构造函数名(参数表): 成员变量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号
广州松河信息科技有限公司 版权所有