关于类成员的初始化和赋值的区别:
使用初始化列表初始化成员
class Stu
{
public:
Stu(int num, int ag, string na) : number(num), age(ag), name(na){}
private:
int number;
int age;
string name;
};
特别是在类成员是const 或者引用类型时,必须使用初始化列表进行初始化,不能使用赋值操作。
使用赋值操作
class Stu
{
public:
Stu(int num, int ag, string na)
{
number = num;
age = ag;
name = na;
}
private:
int number;
int age;
string name;
};
C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前。赋值的这个版本首先调用defualt构造函数为name设初值(number和age是内置类型,不能获得默认的初值)然后立刻再对其赋予新值。defalut构造函数做的一切因此浪费了,而成员初始化列表避免了这个问题,因此效率较高。
类的默认函数都有哪些:
class Empty { };
等价于:
class Empty
{
public:
Empty() {.........}
Empty(const Empty& rhs) {........} //默认复制构造函数
~Empty() {........}
Empty& operator= (const Empty& rhs) {.......} // 赋值操作符
};
如果不想使用类的默认复制构造函数和默认赋值操作符函数,则要显示声明这些函数,并将它们设为private类型:
class Empty
{
public:
private:
Empty(const Empty& rhs);
Empty& operator= (const Empty& rhs);
};