默认构造函数
来源:互联网 发布:dat文件导入数据库 编辑:程序博客网 时间:2024/05/16 18:38
关于默认构造函数两个常见的误解:
1.任何一个class,如果没有定义默认构造函数(default constructor) ,编译器都会为其合成一个默认构造函数
2.编译器合成的默认构造函数,会设定会明确设定数据成员的默认值
编译器不是总会为class合成默认构造函数,只是在编译器需要时才合成,注意:是编译器需要,而不是程序需要。
那在什么情况下,编译器会合成默认构造函数呢?
在没有显示声明任何构造函数时,下面4种情况编译器会合成默认构造函数
1.类的对象成员带有默认构造函数
因为需要在类的构造函数中调用对象成员的默认构造函数,所以这时编译器会合成默认构造函数,
如果有多个对象成员,会按照声明顺序依次调用其默认构造函数,而且他们的调用是在程序显示的初始化基本数据成员(如int)之前。
2.基类带有默认构造函数
因为需要在子类的构造函数中调用基类的默认构造函数,所以此时编译会合成一个构造函数
3.带有虚函数的类,声明或继承了一个虚函数
带有虚函数的类对象,编译器都会为其安插一个vptr的指针,指向vtbl,以实现多态机制,
在构造这样的对象时,vptr需要设置初始值(即:虚函数表),
所以此时,如果没有显示定义任何构造函数,编译器会为其合成一个默认构造函数。
4.在继承链中有一个或多个虚基类
构造对象时,编译器会为对象安插一个指向虚基类的指针,所以需要合成一个默认构造函数,并初始化这个虚基类指针。
其他情形,编译器不会合成默认构造函数。
0 0
- 默认构造函数
- 使用默认构造函数
- C++ 默认构造函数
- 关于默认构造函数
- C++ 默认构造函数
- 默认构造函数
- 默认构造函数
- 默认构造函数
- 关于默认构造函数
- 默认构造函数
- C++ 默认构造函数
- C++ 默认构造函数
- 默认构造函数
- C++默认构造函数
- 创建默认构造函数
- 默认构造函数
- 默认构造函数
- C++ 默认构造函数
- org.apache.jasper.JasperException: The Struts dispatcher cannot be found的解决方法
- 超级高铁时速可达1200公里 2020年或可实现
- 移动应用技术开发大作业——Android平台个人简历
- python2.7 模块全局__metaclass__
- mysql 设置密码
- 默认构造函数
- 注解之@RequestMapping和@RequestBody
- PAT-B 1045. 快速排序
- 任意类型排序
- 笔记
- 《Linux驱动》混杂设备与设备节点
- 实时 Java 社区论坛:Sym
- 线性结构栈----动态实现
- on my zsh 安装