博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【c++】必须在类初始化列表中初始化的几种情况
阅读量:7054 次
发布时间:2019-06-28

本文共 1400 字,大约阅读时间需要 4 分钟。

转自:http://www.cnblogs.com/kaituorensheng/p/3477630.html

 

1. 类成员为const类型

2. 类成员为引用类型

#include 
using namespace std;class A{ public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout << "hello:" << i << " " << j << endl;} private: const int i; int p; int &j;};int main(int argc ,char **argv){ int pp = 45; A b(pp); b.print_val();}

究其因

const对象或引用只能初始化但是不能赋值。构造函数的函数体内只能做赋值而不是初始化,因此初始化const对象或引用的唯一机会是构造函数函数体之前的初始化列表中。

从无到有叫初始化,初始化(调用拷贝构造函数)创建了新对象;赋值(调用赋值操作符)没有创建新对象,而是对已有的对象赋值。

 

3. 类成员为没有默认构造函数的类类型

#include 
using namespace std;class Base{ public: Base(int a) : val(a) {} private: int val;};class A{ public: A(int v) : p(v), b(v) {} void print_val() { cout << "hello:" << p << endl;} private: int p; Base b;};int main(int argc ,char **argv){ int pp = 45; A b(pp); b.print_val();}

原因同样是创建对象时,要初始类成员的每一个成员

 

4. 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数

#include 
using namespace std;class Base{ public: Base(int a) : val(a) {} private: int val;};class A : public Base{ public: A(int v) : p(v), Base(v) {} void print_val() { cout << "hello:" << p << endl;} private: int p;};int main(int argc ,char **argv){ int pp = 45; A b(pp); b.print_val();}

 

转载于:https://www.cnblogs.com/x_wukong/p/5216897.html

你可能感兴趣的文章
svn 常用指令 及 常见问题记录
查看>>
修改全志A10, A20的Nand分区大小
查看>>
python class和class(object)用法区别
查看>>
ejs标签
查看>>
我的友情链接
查看>>
Linux/Unix批量处理产生
查看>>
XFS和RAID6性能优化
查看>>
corosync+pacemaker 实现高可用集群(三)
查看>>
linux下的java开发环境
查看>>
Bootstrap使用记录
查看>>
从一场场大型网站灾难过后的BUG:根
查看>>
Linux系统下怎样利用nc命令来监控检测服务器的端口使用情况
查看>>
git命令总结
查看>>
tomcat高访问jvm配置
查看>>
谢烟客---------二进制安装MariaDB,管理关系型数据库的基本组件
查看>>
JS 判断手机浏览器
查看>>
Xcode WorkSpace静态库多项目依赖
查看>>
【C语言】 实现memset
查看>>
JS 流程设计器
查看>>
blog小记
查看>>