effective C++之关于类成员的初始化,及默认构造函数、默认赋值构造函数和赋值函数

关于类成员的初始化和赋值的区别:

       使用初始化列表初始化成员

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);

};

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值