c++函数后⾯加⼀个冒号的含义
c++ 函数后⾯加⼀个冒号的含义
①冒号后⾯跟的是赋值,这种写法是C++的特性
  A( int aa, int bb ):a(aa),b(bb)
  {
  }
  相当于
  A( int aa, int bb )
  {
    a=aa;
    b=bb;
  }
② C++构造函数后⾯的冒号
  构造函数后加冒号是初始化表达式,有四种情况下应该使⽤初始化表达式来初始化成员:
  1:初始化const成员
  2:初始化引⽤成员
  3:当调⽤基类的构造函数,⽽它拥有⼀组参数时
  4:当调⽤成员类的构造函数,⽽它拥有⼀组参数时。
  在程序中定义变量并初始化的机制中,有两种形式,⼀个是我们传统的初始化的形式,即赋值运算符赋值,还有⼀种是括号赋值,如:
int函数啥意思
  int a=10;
    char b='r';//赋值运算符赋值
  int a(10);
    char b('r');//括号赋值
  以上定义并初始化的形式是正确的,可以通过编译,但括号赋值只能在变量定义并初始化中,不能⽤在变量定义后再赋值,冒号初始化是给数据成员分配内存空间时就进⾏初始化,就是说分配⼀个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进⼊函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执⾏。对于在函数中初始化,是在所有的数据成员被分配内存空间后才进⾏的。这样是有好处的,有的数据成员需要在构造函数调⼊之后函数体执⾏之前就进⾏初始化如引⽤数据成员,常量数据成员和对象数据成员。
  class student
  {
    public :
      student ()
    protected:
      const int a;
      int &b;
  }
  student ::student (int i,int j)
 {
   a=i;
   b=j;
  }
  在student类中有两个数据成员,⼀个是常量数据成员,⼀个是引⽤数据成员,并且在构造函数中初始化了这两个数据成员,但是这并不能通过编译,因为常量初始化时必须赋值,它的值是不能再改变的,与常量⼀样引⽤初始化也需要赋值,定义了引⽤后,它就和引⽤的⽬标维系在了⼀起,也是不能再被赋值的。所以C ++":"后初始化的机制,使引⽤和常量数据成员变为可能的,Student类的构造函数应为:
  student ::student(int i,int j):a(i),b(j)
  {
  }
② C++中⼀个构造函数后⾯加个冒号
⽐如这个例⼦:
  #include<iostream.h>
  class A
  {
  public:
  int x;
  A(int a=0){x=a};
  };
  class B1:publicA
  {
  public;
  int y1;
  B1(int a=0,int b=0):A(b)  //就是这句
    { y1=a; }
  };
  请问那句后⾯的 :A(b)  代表什么啊,为什么要跟个B1基类的构造函数?
  答:A(b)实际上是做的是⽤b初始化A的成员x;即x=b; 是初始化列表⽅式。