• 构造函数的初始化列表


     1 /**
     2   *有些成员必须在构造函数初始化列表中进行初始化。对于这样的成员,在构造函数体重对它们赋值不起作用。
     3   *没有默认构造函数的类类型的成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化
     4   *列表中进行初始化
     5   */
     6 class ConstRef
     7 {
     8     public:
     9         ConstRef(int ii);
    10     private:
    11         int i;
    12         const int ci;
    13         int &ri;
    14 };
    15 
    16 //错误做法
    17 ConstRef::ConstRef(int ii)
    18 {
    19     i = ii;     //OK
    20     ci = ii;   //error:cannot assign to a const
    21     ri = i;    // assigns to ri which was not bound to an object
    22 }
    23 //正确做法
    24 ConstRef::ConstRef(int ii): i(ii), ci(i), ri(ii)
    25 {
    26 
    27 }
     1 /**
     2   * 注意:
     3   *      1、每个成员在构造函数初始化列表中只能指定一次
     4   *      2、构造函数的初始化列表仅指定用于初始化成员的值,并不指定这些初始化执行的次序。
     5   *         成员被初始化的次序就是定义成员的次序。第一个成员首先被初始化,然后是第二个,以次类推
     6   */
     7   
     8 //下边的代码并不能达到预期效果
     9 class X
    10 {
    11     int i;
    12     int j;
    13 public:
    14     // run-time error: i is initialized before j
    15     X(int val):j(val), i(j){}         // i 先被初始化,之后才是 j
    16 };
  • 相关阅读:
    HNOI2003 消防局的设立
    APIO2007 风铃
    SDOI2006 保安站岗
    消息传递
    [POI2008]STA-Station
    JLOI2015 城池攻占
    BOI2004 sequence
    Monkey King
    APIO2012 Dispatching
    HTML meta 文本 格式排版 链接图表 列表 表单 frame后台布局实例
  • 原文地址:https://www.cnblogs.com/dongsheng/p/3325862.html
Copyright © 2020-2023  润新知