比如成员变量是某个类的对象,该对象有无参数的默认构造函数,那么在当前类的构造函数中就不用初始化了,比如
class Animal
{
private:
int id;
public:
Animal()
{}
~Animal()
{}
}
class Dog
{
private:
int sex;
Animal animal;
public:
Dog()//animal也不用初始化,因为他也有默认无参构造函数
{}
~Dog()
{}
}
?? 情况一:需要初始化的数据成员是对象的情况(这里包含了继承情况下,通过显示调用父类的构造函数对父类数据成员进行初始化);??数据成员是对象,并且这个对象只有含参数的构造函数,没有无参数的构造函数;
?? 情况二:需要初始化const修饰的类成员;
?? 情况三:需要初始化引用成员数据;
1、普通成员变量,在初始化列表中或者构造函数中初始化,不能在定义时初始化
2、静态成员变量,必须在类外初始化
3、引用变量必须在初始化列表中进行初始化,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
4、const变量必须在初始化列表中进行初始化
5、static const变量必须在类中定义时初始化?
拓展-初始化列表
????????以冒号开头,后跟一系列以逗号分隔的初始化字段;
在程序中常常需要对变量赋初值,即对其初始化。
那么,怎样使他们得到初值呢?有人试图在声明类时对数据成员初始化。如
class Time
{
hour=0;
minute=0;
sec=0;
};
这是错误的。
因为类并不是一个实体,而是一种抽象类型,并不占存储空间,显然无处容纳数据。
如果一个类中所有成员都是公用的,则可以在定义对象时对数据成员进行初始化。如:?
class Time
{
pubic:
hour;
minute;
sec;
};
Time t1={14,56,30};
这种情况和结构体变量的初始化是类似的,在一个花括号内顺序列出各公用数据成员的值,两个值之间用逗号分隔。
如果是private私有的,或protected的数据成员,需要构造函数来处理对象的初始化;
程序用户只须在定义对象的同时指定数据成员的初值就好