文章概述

  1. 构造函数的成员初始化列表

构造函数的成员初始化列表

下面的代码分析了什么时候使用成员初始化列表:

class A
{private:int a;public:A(int a){this->a = a;}int getA(){return a;}
};class B
{private:A a;public://这里报错是因为创建B对象的时候,也会创建A对象;A对象中只有一个有参数的构造函数,没有无参数构造函数//B()//{// //}//这种情况就用成员初始化列表B():a(10){}int getBA(){return a.getA();}
};int main()
{B p;cout << p.getBA() << endl;return 0;
}

我们总结一下,上面的代码得出的结论:
如果一个类成员,它本身是一个类成员或者是结构。而且这个类成员只有一个带参数的构造函数时,没有默认的构造函数。这时候对这个类成员初始化时,必须调用这个成员带参数的构造函数。如果没有初始化列表,那就无法完成,会报错。
再来一个代码熟悉一下:

class A
{private:int a;public:A(int a){this->a = a;}int getA(){return a;}
};class B
{private:A a;int x;public://成员初始化列表B():a(10),x(5){}int getBA(){return a.getA();}int getX() { return x; }
};int main()
{B p;cout << p.getX() << endl;cout << p.getBA() << endl;return 0;
}

除了上面的那种情况,还有一种情况也会使用成员初始化列表:

class B
{private:const int a;public:B():a(5){}int getA(){return a;}
};int main()
{B p;cout<<p.getA();return 0;
}

通过这个例子,我们也看到的是类的成员变量中有const时,则必须用成员初始化列表赋值。


我们分析一下下面代码构造函数的执行顺序:

class A
{private:int a;public:A(int a){this->a = a;cout << "创建A对象" << this->a << endl;}int getA(){return a;}~A(){cout << "释放对象" << this->a<< endl;}
};class B
{private:A a;A b;public:B():b(8),a(5){cout << "创建B对象" << endl;}~B(){cout << "释放对象" << endl;}
};int main()
{B p;return 0;
}

该代码的输出结果:

结论: 首先会执行组合对象中A的构造函数;如果组合对象有多个(A a,b),按照定义的顺序调用构造函数,不是按照初始化列表的顺序。构造函数的对象与析构函数的调用顺序刚好相反。

C++ 类(构造函数的成员初始化列表)相关推荐

  1. C++:用成员初始化列表对数据成员初始化

    1.在声明类时,对数据成员的初始化工作一般在构造函数中用赋值语句进行.  例如: class Complex{private:double real;double imag;public:Comple ...

  2. Cpp 对象模型探索 / 成员初始化列表

    目录 一.何时必须使用? 二.优势 三.细节探究 一.何时必须使用? 成员变量是 const 类型. 成员变量是引用. 基类中含有带形参的构造函数且不存在默认的构造函数. 成员变量是类对象,该对象含有 ...

  3. C++中成员初始化列表的使用

    C++在类的构造函数中,可以两种方式初始化成员数据(data member). 1,在构造函数的实现中,初始类的成员数据.诸如: class point { private:  int x,y; pu ...

  4. lt;转载自刘佳ID:freedom0203和waretgt; C++中成员初始化列表的使用

    刘佳: C++在类的构造函数中,可以两种方式初始化成员数据(data member). 1,在构造函数的实现中,初始类的成员数据.诸如: class point { private:  int x,y ...

  5. C++ 语法之【成员初始化列表】

    C++ 语法之[成员初始化列表] 类对象构造过程 定义[成员初始化列表] 必须使用[成员初始化列表]的情况 情况一:const类成员或者被声明为引用的类成员 情况二:初始化成员是对象(包含继承) 情况 ...

  6. C++成员初始化列表

    C++类成员初始化列表 C++类型定义 C++构造函数的初始化列表定义 C++构造函数执行的两个阶段:初始化阶段和计算阶段 为什么使用初始化列表 C++里面哪些东西必须放在初始化列表里面 成员变量的初 ...

  7. php键顺序初始化,Java类中各成员初始化的顺序

    了解Java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识.不说太多,直接看下面的例子 class Father { static{ System. out.println(&quo ...

  8. java类中各成员初始化的顺序

    了解java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识.不说太多,直接看下面的例子 class Father {static{System. out.println(" ...

  9. 3-6:类与对象下篇——构造函数中的初始化列表、匿名对象和explicit关键字

    文章目录 (1)真的是初始化吗 (2)初始化列表 A:概述 B:哪些成员必须在初始化列表进行初始化 (3)注意 (4)匿名对象 (5)explicit关键字 (1)真的是初始化吗 前文中,我们使用构造 ...

最新文章

  1. matlab 绘制方格网格(二维)
  2. 如何将两个集合合并_如何将剪切的音频文件进行合并
  3. input 属性和用法
  4. 使用Github Pages建独立博客
  5. 利用passssh,批量远程修改机器密码
  6. 固态硬盘量产工具_机械硬盘Q1出货量大降,电脑硬盘榜单出炉
  7. android多语言编码格式,AndroidXml2Xls
  8. iphone同步助手_iPhone 与安卓手机之间如何进行资料迁移
  9. Python MD5
  10. .net网页的生命周期列表
  11. Windows 安全杂记(一)
  12. linux下R及Rstudio及Rhadoop安装
  13. Android 的座位图控件,用于电影票等选座页面的 APP 中
  14. FormulaR1C1是EXCEL中单元格公式输入方法(补充解说)
  15. [CodeForces]CodeForces - 1025F Disjoint Triangles
  16. 如何在12315网上投诉平台把内容复制粘贴到投诉内容那里的解决方法
  17. python封装exe后其他人能用么_python用tesseract写的图片识别,封装exe后,本机可以用,软件放别的电脑上无法图......
  18. mumu血压计母亲节“拼团”盛大开幕,百度和厂家创造一个双赢的局面
  19. OpenCV之阈值化操作总结
  20. 三、JumpServer堡垒机用户使用手册

热门文章

  1. 给路由器配置Telnet远程登录
  2. 开源ssl证书管理系统
  3. 《恐袭波士顿》之为爱致敬
  4. 数字化时代到来传统经营模式企业猝不及防
  5. Spyder安装turtle库
  6. 用python做一个简单的http服务器。把huya的直播地址用python解出。解后在浏览器中调用openffplayer。
  7. Vue项目中引入天地图
  8. 干货 | 加拿大留学计算机专业及编程语言大汇总
  9. 裁员、转型……“新东方”们现在成绩单如何?
  10. 供应python少儿编程课_“提供”的“供”的读音是什么?