C++中必须用初始化列表的四种情况
初始化列表
- 1. 类成员为const类型
- 2 . 类成员为引用类型
- 3.没有默认构造函数的类类型
- 4. 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数
1. 类成员为const类型
2 . 类成员为引用类型
1.常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面。
2.引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
#include<iostream>
using namespace std;
struct Demo{
const int m_a;
int &m_b;Demo(int a,int& b):m_a(a),m_b(b){}~Demo(){}
};int main(){int m=5;int n=6;Demo a(m,n);cout << a.m_a << endl;cout << a.m_b << endl;
}
3.没有默认构造函数的类类型
因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。
#include<iostream>
using namespace std;class Base{
public:Base(int a):val(a){}void print_val(){cout << "val=" << val << endl;}
private:int val;
};class A{
public:A(int v):p(v),b(v){}void print_val(){cout << "p= " << p << endl;}
private:
int p;
Base b;
};
int main(){int m=5;A b(m);b.print_val();
}
4. 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数
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 << "class A:" << p << endl;}private:int p;
};
int main()
{int m = 45;A b(m);b.print_val();
}
C++中必须用初始化列表的四种情况相关推荐
- python中如何创建一个空列表_Python学习笔记(1):列表的四种创建方法
我的电脑安装的是Anaconda 3开源的Python发行版本,其中是集合3.6版本的Python与可视化编程工具采用的是Spyder. 打开Spyder可视化工具,新建一个空白文件,做好备注为&qu ...
- 【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
文章目录 I . 属性覆盖基本方式 II . 属性覆盖的四种情况 III . 常量 ( val ) / 变量 ( var ) 属性覆盖 IV . 子类初始化时考虑覆盖属性的使用 I . 属性覆盖基本方 ...
- xlsx表格怎么筛选重复数据_excel表格如何筛选重复数据 在Excel表格的两列数据中提取不重复值的四种方法...
excel表格如何筛选重复数据 在Excel表格的两列数据中提取不重复值的四种方法,最近到了季度汇报的时候,掌握一手excel技能在此刻显得多么重要,为了是你的excel看起来更高大上,今天教大家设置 ...
- python中for循环遍历列表的几种方法
列表在使用过程中,经常需要遍历列表的所有元素,对每个元素执行相同的操作.今天介绍python中for循环遍历列表的几种方法. 方法1:使用for循环简单结构遍历 首先我们新建一个城市列表,然后分别展示 ...
- Action中取得request,session的四种方式
Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- 如何在html添加css样式表,网页中添加CSS样式表的四种方式
本文向大家描述一下网页中添加CSS样式表的四种方式,首先让我们来看一下CSS样式表文件的优势,主要体现在两个方面,请看下文详细介绍. CSS样式表文件的优势表现在两个方面: ***,简化了网页的格式代 ...
- java输出值取后两位小数,java中取小数点后两位(四种步骤)
java中取小数点后两位(四种方法) 一 java.text.DecimalFormat df = new java.text.DecimalFormat("#.##"); dou ...
- c#初始化数组的四种方式
//作者:鸟哥 qq1833183060 //初始化数组的四种方式 //参考:https://www.cnblogs.com/afei-24/p/6738128.html //csharp讨论群:11 ...
最新文章
- R语言使用coin包应用于独立性问题的置换检验(permutation tests、响应变量是否独立于组、两个数值变量是独立的吗、两个分类变量是独立的吗)、以及coin包的常用置换检验函数
- 机器学习(MACHINE LEARNING)Sklearn通用学习模式
- 立体神经网络模拟连续不完备系统
- windbg调试cpu占用率高的进程
- 检索数据_1_从表中查询所有行和列
- webpack 读取文件夹下的文件_webpack基本介绍及使用
- 5G网络切片的七种武器(六)
- 群辉 NAS 配置 iSCSI 存储
- poi导出excel文件加密处理
- 涨价不再“嘘声”一片,“爱优腾”集体“想开了”?
- 程序员进阶的五个瞬间,开头就笑了!
- Linux如何制作efi启动盘,教你制作macOS+Ubuntu+WindowsPE超级启动盘(仅支持UEFI)
- 转:极速的关键——斯巴鲁车系四驱系统详解
- 【书虫录】富爸爸穷爸爸
- ubuntu配置IP地址,网关,DNS和路由
- 家暴屡教不改能判刑吗
- i7 11700k和12700k哪个好
- 刷题记录:牛客NC17889新建 Microsoft Office Word 文档
- 一个老程序员写给毕业生们的一些话
- 计算机网络应用基础试题6,职称计算机考试:计算机网络应用基础模拟练习题(6)...