Chinaunix首页 | 论坛 | 博客
  • 博客访问: 892007
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

分类: C/C++

2014-10-23 21:29:31

C++为类中提供类成员的初始化列表。

类对象的构造顺序是这样的:
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
  1.类里面的任何成员变量在定义时是不能初始化的。
  2.一般的数据成员可以在构造函数中初始化。
  3.const数据成员必须在构造函数的初始化列表中初始化。
  4.static要在类的定义外面初始化。   
  5.数组成员是不能在初始化列表里初始化的。
  6.不能给数组指定明显的初始化。  

这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?没有办法,我只好转而求助于静态数据成员或者使用枚举。
到此,我的问题解决。但是我还想趁机复习一下C++类的初始化:
  1.初始化列表:

  1. Demo::Demo() : x(3), y(5)  
  2. {  
  3. }  


  2.类外初始化:int CSomeClass::myVar=3;
  3.const常量定义必须初始化,C++类里面使用初始化列表;
  4.C++类不能定义常量数组。

在C++类中,必须做如下事情:

1.必须对任何const或引用类型成员以及没有默认构造函数的类 类型 的任何成员 显示地使用初始化列表进行初始化;

2.类成员在定义时是不能被初始化的;

3.类的成员初始化顺序与成员变量在构造函数中的位置选后顺序无关,与成员变量在类中定义的先后顺序有关。

例如 : 


  1. class Demo  
  2.  {  
  3.    int first; "white-space:pre">            // 第一个变量  
  4.    int second;"white-space:pre">            // 第二个变量  
  5.    
  6.  public :  
  7.    Demo( int value):second(value),first(second)  
  8.    {  
  9.    }  
  10.  }  
这个初始化列表的顺序是错误的,首先在声明成员变量的时候first要先于second,所以初始化顺序是先初始化first,然后再second。但是初始化列表中first的初始值是second的值,所以这样的初始化顺序是错误的。
阅读(2140) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~