C++_第十三章_成员初始化列表语法(十二中最后)

目录

成员初始化列表语法

01)问题的提出:
  对于一个Queue类的声明(不存在问题,注意在类中声明一个常量):
  class Queue
  {
  private:
    int items;
    const int qsize; //常量
  pubilc:
    Queue(int qs); //构造函数
    ...
  };
  Queue类构造函数的定义(存在问题,因为不能给常量qsize赋值):
  Queue::Queue(int qs)
  {
    items = 0;
    qsize = 0; //不合法!
  }
02)解决的方法:使用成员初始化列表
  Classy::Classy(int n,int m) : mem1(n), mem2(0), mem3(n*m+2)
  {
    ...
  }
  以上将n的值赋给mem1,将0赋给mem2,将n*m+2的值赋给mem3。从概念上说,这些初始化构造是在对象创建时完成的,此时还未执行
  大括号中的任何代码。请注意一下几点:
  A 成员初始化列表只能用于构造函数
  B 必须用这种格式来初始化非静态const数据成员
  C 必须用这种格式来初始化引用数据成员
  D 不能讲成员初始化列表用于构造函数之外的其他类方法
  E 成员初始化列表的括号方式也可以用于常规舒适化,可以将下述代码:
      int games = 162;
      double talk = 2.71828;
      替换为:
      int games(162);
      double talk(2.71828);
03)C++11的类内初始化:
  class Classy
     {
      int mem1 = 10;
   const int mem2 = 20;
  };
  与在构造函数中使用成员初始化列表等价:
  Classy::Classy() : mem1(10), mem2(20) { ... }
  也可以将初始值替换为其他的数值:
  Classy::Classy(int n) : mem1(n) { ... } //此时mem1=n, mem2=20

猜你喜欢

转载自www.cnblogs.com/YiYA-blog/p/10853825.html