一:何时必须使用成员初始化列表
class A(){
public:
int x;
int y;
A():x(0),y(0){}
// A(){
// x = 0;
// y = 0;
// }
// 抛开效率和代码风格,代码优雅。来说两者实现的是同一个功能。
}
1. 如果形参是一个引用那么必须使用成员初始化列表
class A(){
public:
int x;
int y;
int &z;
A(int &tmpvalue):x(0),y(0),z(tm pvalue) {
// z = tmpvalue 语法错误 tmpvalue未提供初始值设定
}
}
2. const
class A(){
public:
int x;
int y;
const int z;
A(int &tmpvalue):x(0),y(0),z(tmpvalue){}
}
3. 如果继承一个基类,并且基类中有构造函数,构造函数有参数
class Base{
public:
Base(int z,int c){}
}
class A: public Base{
int x;
int y;
A(int tmpvalue):x(0),y(0),Base(tmpvalue,tmpvalue){}
}
4. 成员函数是类类型,并且这个类也有带参数构造函数
class Base{
public:
Base(int z,int c){}
}
class A{
Base b;
int x;
int y;
A(int tmpvalue):x(0),y(0),b(tmpvalue,tmpvalue){}
}