美文网首页
构造函数初始化列表

构造函数初始化列表

作者: Jowney | 来源:发表于2018-09-18 01:17 被阅读21次

    一、抛砖引玉--抛转

    在写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变量来说,该怎么办?这些难缠的家伙可是声明的时候就需要初始化的,而且不能修改变量的值。

    二、抛砖引玉--引玉

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

    相关文章

      网友评论

          本文标题:构造函数初始化列表

          本文链接:https://www.haomeiwen.com/subject/zvmjnftx.html