C++构造函数小结

        在C++的类中,如果没有显示的构造函数,那么系统是会自动生成一个默认的构造函数。但是这个默认构造函数的函数体是空的,不起初始化作用。

        因此,如果想要方便灵活的进行初始化,就需要自己动手写构造函数喽!

        一般来说呢,显示的构造函数有三种方法:(我自己总结的啦,感觉不合理可以指出哦)

        1:简单赋值

<span style="font-size:14px;color:#006600;">       Aclass::Aclass(int a, int b)
      {                         
         x = a;
         y = b; 
       }</span>

            诸如此类

         2:给定默认值

<span style="font-size:14px;"><span style="color:#006600;">       Aclass::Aclass()     或者       Aclass::Aclass(int a = 0, int b = 1) 
       {                               {
         x = 0;                          x = a;
         y = 1;                          y = b;
       }                               }</span>
</span>

              诸如此类

         3:使用成员初始化列表

<span style="font-size:14px;color:#006600;">       Aclass::Aclass():x(0),y(1){ } //给定初始值

       或者

       Aclass::Aclass(int a, int b):x(a),y(b){ }</span>

              诸如此类

注:

        (1)细节问题

         1 这两种方法相比,第二种是更好的选择。原因有两点:特殊情况下的必要性与高效性。

         2 如果在类中显示的定义了构造函数,则系统将不会再提供默认构造函数。此时,如果没有提供相应参数的构造函数,如空参构造,则不允许空参构造。例如若果只有如下构造函数,则Aclass A;时将会报错,而需要写成Aclass A(2, 3); 。

<span style="font-size:14px;color:#006600;">       Aclass::Aclass(int a, int b)
      {                         
         x = a;
         y = b; 
       }</span>
         3 为了解决上述问题,可以对构造函数进行重载,从而满足各种需求。但如果一个类中定义了全部都是默认参数的构造函数后,便不能再定义重载构造函数。

        (2)关于使用成员初始化列表的必要性解释

         1 const数据成员必须在初始化列表中初始化;

         2 引用成员必须在初始化列表中初始化;

         3 若在Aclass类中有Bclass类成员,即:

<span style="font-size:14px;"><span style="color:#006600;">     class Aclass
     { 
     public:
         Bclass B;
         Aclass();
     }
     Aclass::Aclass():B(2){ }</span>
</span>

         4 数组成员不能在初始化列表中初始化;

         5 初始化列表中的执行顺序是根据声明顺序决定的,而不是你书写的顺序呦:

<span style="font-size:14px;"><span style="color:#006600;">     class Aclass
     { 
     public:
         int a;
         int b;
         Aclass();
     }
     Aclass::Aclass():b(0),a(b){ }
</span></span>
          此时并不会得到a = b = 0的效果,因为会先执行a(b),而此时b还没有具体值,因此这里a会得到一个人任意分配的数值。

----------------------------------------------------------------------------萌萌哒分界线---------------------------------------------------------------------------------

          下面是从豆瓣参考到了一段总结而写的,个人认为比较简单明了。基本上注意到const与static的特殊性就没有太大问题啦。

 


















原文地址:http://www.douban.com/note/66957147/

        关于构造函数就说这么多吧。

        如有侵权,敬请告知,立马删除。谢谢微笑

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值