c++中在一个类中定义成员类变量,该成员类变量必须要有默认构造函数(可以是自己定义的无参默认构造函数),否则会报错。
那么针对没有默认构造函数的成员类变量怎么定义呢?
在编写c++程序时,会碰到这样的问题:
class B{
int a;
public:
B(int aa):a(aa){}//没有默认构造函数
};
class A{B b(4)};//在这一行,会报错,因为B没有默认构造函数
会产生错误error C2059: syntax error : 'constant'。
但是如果将代码改一下变成:
class B{
int a;
public:
B(){}//自己写的默认构造函数
};
class A{
B b;
};
编译正常!无错误。
于是我们得出一个结论:定义一个成员类对象时,不能在一个类里面创建一个没有默认构造函数的类对象。
但是对于某些情况,必须创建一个没有默认构造函数的成员类对象该怎么办呢?
解决方法如下:
对于上面那段程序我们可以稍作改进:
class A
{
B b;
public:
A():b(4){}
}
这样就没问题了。对成员类对象,要用初始化列表的方法初始化,也就是进入构造函数之前进行初始化,不管这个构造函数是有参还是无参的默认构造函数。