**问题:**创建一个对象,而对象中的某些属性没有被初始化。在使用该类的这些属性时,会导致错误。
**解决:**确保每一个构造函数都将每一个成员初始化。
初始化和赋值的区别是什么?
1.对于基本数据类型,差别不大。例如:
int a = 12;
a = 13;
2.对于自定义类
初始化类对象,通过初始化列表实现。初始化的过程为,分配内存空间,在内存空间中填充数据。
赋值类对象,通过传参数到构造函数中,并在构造函数中对类属性进行赋值。赋值的过程为,用构造函数,在进入函数体之后,进行的是对己构造好的类对象赋值,又调用个拷贝赋值操作符才能完成(如果并未提供,则使用编译器默认的按成员赋值行为)。
class Student
{
private:
string m_strName;
int m_iAge;
public:
Student(string strName, int iAge)
{
m_strName = strName; // 赋值
m_iAge = iAge;
}
~Student() {}
};
class Teacher
{
private:
string m_strName;
int m_iAge;
public:
Teacher(string strName, int iAge) :m_strName(strName), m_iAge(iAge)
{
// 初始化
}
~Teacher() {}
};
3.结论
尽量使用初始化列表,对每一个属性初始化。