构造函数初始化列表

2018-09-18  本文已影响21人  Jowney

一、抛砖引玉--抛转

在写C++类的时候你应该有一个疑问!C++中, 类的成员变量在定义的时候为什么不直接初始化?为什么?为什么?为什么?

class Stu          //声明一个学生类 
{
  private:          //私有成员关键字 
   char Name[32] = "张三";  //姓名 
   int  ID = 1;        //学号 
   int  Score = 001; //成绩
};  

因为Java是自动挡汽车,C++是手动挡汽车。在java里这样写是没毛病的,因为Java已经默默地为我们做了许多事情。但是在C++里面这样搞是要出问题的。解析如下↓↓↓↓↓↓↓↓↓

class Stu          //声明一个学生类
{
  private:          //私有成员关键字
     char Name[32];  //姓名
     int  ID;        //学号
     int  Score;     //成绩
  public:           //外部成员关键字
     Stu()           //无参构造函数
     {
       strcpy(Name,"无");
       ID=0;
       Score=0;
      }
};

这个类在没有被实例化之前它就只是一个类一个模板,在栈中或堆中没有与它相关的内存,当实例化这个类的时候奇妙的事情就要发生了。
当实例化Stu类时,第一步会声明该类的三个全局变量(注意这个时候Stu类还没分配内存,所以你在写Stu类时直接初始化这三个变量,肯定会报错啊!),紧接着就会调用Stu类中的构造函数。
构造函数是干嘛的?
■ 给创建的对象建立一个标识符;
■ 为对象数据成员开辟内存空间;
■ 完成对象数据成员的初始化。
注意第二条,“为对象数据成员开辟内存空间”,也就是调用该方法后,Stu就被实例化了,同时三个变量也被分配了内存空间,也就是说三个变量就算不在构造方法中初始化,它们也会强制初始化(但是具体的值是多少,代表什么意思我还没仔细考虑过)。也就是说,紧接着如果构造函数的函数体里面中有全局变量的赋值操作的话,也不能是算是头茬了。。。这个时候就有一个很大的问题,对于引用,const变量来说,该怎么办?这些难缠的家伙可是声明的时候就需要初始化的,而且不能修改变量的值。

二、抛砖引玉--引玉

这个时候“构造函数初始化列表”就派上作用了,听听这名字“构造函数”、“初始化列表”,一听就知道用来干嘛的,给变量分配内存空间的同时初始化。。。牛叉。。。想的真周到。。。

上一篇下一篇

猜你喜欢

热点阅读