构造函数后加冒号是初始化表达式:
有四种情况下应该使用初始化表达式来初始化成员:
1:初始化const成员
2:初始化引用成员
3:当调用基类的构造函数,而它拥有一组参数时

4:当调用成员类的构造函数,而它拥有一组参数时。

在程序中定义变量并初始化的机制中,有两种形式,一个是我们传统的初始化的形式,即赋值运算符赋值,还有一种是括号赋值,如: 
   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)

{

}

转自:http://blog.csdn.net/kaixinbingju/article/details/9094289

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; :是初始化列表方式,具体见

最新文章

  1. EndNote(三)之中文引文导入方式
  2. nginx,控浏览器缓存,前端优化方案
  3. smb:unrecognized service
  4. struts2 action 3中书写方式
  5. cordova local notification plugin
  6. 怎样在java代码中调用执行shell脚本
  7. PERCONA-TOOLKIT 工具的安装与使用2
  8. SQL 练习题
  9. NAND FLASH特性说明
  10. php中实现快排与冒泡排序
  11. WP8关于对地图开发的改进
  12. cookie,sessionstorage,localstorage区别
  13. js验证身份证号码
  14. iptables 命令详解
  15. ApplicationDomain
  16. idou老师教你学Istio 17 : 通过HTTPS进行双向TLS传输
  17. JavaScript中==和===的区别(面试题目)
  18. js备忘录3
  19. 20135239益西拉姆 Linux内核分析 进程的描述和进程的创建
  20. C#中图片透明【转】

热门文章

  1. JEECG中datagrid方法自定义查询条件
  2. datagrid,treegrid携带参数刷新示例
  3. Securecrt emacs/vi 代码无法高亮、无颜色
  4. js的一些代码&hellip;
  5. C语言 函数参数不确定时 需要用到va_start和va_end函数
  6. RhinoMock初探
  7. 并行开发系列 Plinq等
  8. ny14 会场安排问题
  9. IDEA开发工具常用快捷键总结
  10. VMware中Linux启动时***Host SMBus controller not enabled的解决方法