C++ 类(构造函数的成员初始化列表)
文章概述
- 构造函数的成员初始化列表
构造函数的成员初始化列表
下面的代码分析了什么时候使用成员初始化列表:
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++ 类(构造函数的成员初始化列表)相关推荐
- C++:用成员初始化列表对数据成员初始化
1.在声明类时,对数据成员的初始化工作一般在构造函数中用赋值语句进行. 例如: class Complex{private:double real;double imag;public:Comple ...
- Cpp 对象模型探索 / 成员初始化列表
目录 一.何时必须使用? 二.优势 三.细节探究 一.何时必须使用? 成员变量是 const 类型. 成员变量是引用. 基类中含有带形参的构造函数且不存在默认的构造函数. 成员变量是类对象,该对象含有 ...
- C++中成员初始化列表的使用
C++在类的构造函数中,可以两种方式初始化成员数据(data member). 1,在构造函数的实现中,初始类的成员数据.诸如: class point { private: int x,y; pu ...
- lt;转载自刘佳ID:freedom0203和waretgt; C++中成员初始化列表的使用
刘佳: C++在类的构造函数中,可以两种方式初始化成员数据(data member). 1,在构造函数的实现中,初始类的成员数据.诸如: class point { private: int x,y ...
- C++ 语法之【成员初始化列表】
C++ 语法之[成员初始化列表] 类对象构造过程 定义[成员初始化列表] 必须使用[成员初始化列表]的情况 情况一:const类成员或者被声明为引用的类成员 情况二:初始化成员是对象(包含继承) 情况 ...
- C++成员初始化列表
C++类成员初始化列表 C++类型定义 C++构造函数的初始化列表定义 C++构造函数执行的两个阶段:初始化阶段和计算阶段 为什么使用初始化列表 C++里面哪些东西必须放在初始化列表里面 成员变量的初 ...
- php键顺序初始化,Java类中各成员初始化的顺序
了解Java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识.不说太多,直接看下面的例子 class Father { static{ System. out.println(&quo ...
- java类中各成员初始化的顺序
了解java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识.不说太多,直接看下面的例子 class Father {static{System. out.println(" ...
- 3-6:类与对象下篇——构造函数中的初始化列表、匿名对象和explicit关键字
文章目录 (1)真的是初始化吗 (2)初始化列表 A:概述 B:哪些成员必须在初始化列表进行初始化 (3)注意 (4)匿名对象 (5)explicit关键字 (1)真的是初始化吗 前文中,我们使用构造 ...
最新文章
- matlab 绘制方格网格(二维)
- 如何将两个集合合并_如何将剪切的音频文件进行合并
- input 属性和用法
- 使用Github Pages建独立博客
- 利用passssh,批量远程修改机器密码
- 固态硬盘量产工具_机械硬盘Q1出货量大降,电脑硬盘榜单出炉
- android多语言编码格式,AndroidXml2Xls
- iphone同步助手_iPhone 与安卓手机之间如何进行资料迁移
- Python MD5
- .net网页的生命周期列表
- Windows 安全杂记(一)
- linux下R及Rstudio及Rhadoop安装
- Android 的座位图控件,用于电影票等选座页面的 APP 中
- FormulaR1C1是EXCEL中单元格公式输入方法(补充解说)
- [CodeForces]CodeForces - 1025F Disjoint Triangles
- 如何在12315网上投诉平台把内容复制粘贴到投诉内容那里的解决方法
- python封装exe后其他人能用么_python用tesseract写的图片识别,封装exe后,本机可以用,软件放别的电脑上无法图......
- mumu血压计母亲节“拼团”盛大开幕,百度和厂家创造一个双赢的局面
- OpenCV之阈值化操作总结
- 三、JumpServer堡垒机用户使用手册
热门文章
- 给路由器配置Telnet远程登录
- 开源ssl证书管理系统
- 《恐袭波士顿》之为爱致敬
- 数字化时代到来传统经营模式企业猝不及防
- Spyder安装turtle库
- 用python做一个简单的http服务器。把huya的直播地址用python解出。解后在浏览器中调用openffplayer。
- Vue项目中引入天地图
- 干货 | 加拿大留学计算机专业及编程语言大汇总
- 裁员、转型……“新东方”们现在成绩单如何?
- 供应python少儿编程课_“提供”的“供”的读音是什么?