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

构造函数初始化列表

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

二、抛砖引玉--引玉

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

相关文章

  • [C++之旅] 11 初始化列表

    [C++之旅] 11 初始化列表 初始化列表的特性 初始化列表先于构造函数执行 初始化列表只能用于构造函数 初始化...

  • 4.0 C++远征:构造函数初始化列表

    构造函数初始化列表 1.默认构造函数 在实例化对象时不用传参的函数,叫做默认构造函数。 2.初始化列表 代码示范:...

  • 面向对象(C++) 之 封闭类

    ★封闭类:包含成员对象的类 ●封闭类构造函数的初始化列表定义封闭类的构造函数时,添加初始化列表:类名::构造函数(...

  • C++ - 封闭类

    封闭类 封闭类构造函数的初始化列表 定义封闭类的构造函数时,添加初始化列表:类名::构造函数(参数表):成员变量1...

  • 类的基础语法

    1. 构造函数 单参数构造函数,需要加explicit, 避免隐式转换 初始化列表初始化列表可以用来对于 cons...

  • 构造函数的初始化

    构造函数的初始化和其他函数一样,有自己的形参、名字和逻辑,但不同的是构造函数可以有初始化列表。 省略构造函数初始化...

  • 2020-09-15 构造函数初始化列表

    使用初始化列表的构造函数,其显式地对成员进行初始化 未使用初始化列表的构造函数,其通过赋值来对成员进行初始化(此赋...

  • 构造函数涉及到的一些问题

    构造函数不同形式 默认的构造函数' 构造函数初始化列表; 拷贝构造函数; 复制运算符,如果类不允许复制,把拷贝构造...

  • C++初始化列表

    本文主要说明成员初始化列表的注意事项。 I、上帝视角看初始化列表 构造函数可以有两种构造形式,一是在构造函数体内对...

  • C++ class类初始化

    默认构造函数法 生成对象的方式: 构造函数初始化列表 生成对象的方式:

网友评论

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

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