一般成员变量的初始化有两种方式:
1、在构造函数体内进行赋值操作
class ABC{
public:
ABC(const std::string& name,const std::string& addres,const std::list<PhoneNumber>& phones);
private:
std::string theName;
std::string theAddress;
std::list<PhoneNumber> thePhone;
};
ABC::ABC(const std::string& name,const std::string& addres,const std::list<PhoneNumber>& phones)
{
theName=name;
theAddress=addres;
thePhone=phones;
}
这里每个成员都是直接赋值操作,因为初值已经有默认构造函数完成了。
2、在类的构造函数中,不再函数体内对变量赋值,而是在参数列表后,跟一个冒号和初始化列表
class ABC{
public:
ABC(const std::string& name,const std::string& addres,const std::list<PhoneNumber>& phones)
: theName(name),theddress(addres),thePhone(phones){}
private:
std::string theName;
std::stringA theddress;
std::list<PhoneNumber> thePhone;
};
使用初始化列表的必要性:1、如果类中有const成员或引用类型的成员,由于const对象和引用类型都只能初始化,不支持赋值,所以这种情况必须使用初始化列表。2、当类中含有其他类作为成员,作为成员的类的赋值操作被禁止了,也必须使用初始化列表。
使用初始化列表不仅可以适用更多的情况,还可以省去构造临时对象,直接完成初始化工作,效率更高。