成员初始化列表-适用场合

2023-11-03

1. 简述

    主要的场合有四类:初始化对象成员,初始化基类的成员,初始化const成员,初始化引用成员。对于const成员和引用成员,比较简单,这两种变量都要求初始化后不能赋值,因此,只能在成员初始化列表中进行初始化,其他地方不行。本文主要介绍初始化对象成员和初始化基类成员这两种情况。  

2. 初始化对象成员

    具体分为两种情况:第一,该对象具有“无参数的构造函数”,使用初始化成员列表,有可能提升性能;第二,该对象只有“有参数的构造函数”,这种情况,必须使用初始化成员列表。   

#include  < iostream >
using   namespace  std;

class  AK_Zero_Parameter {  //  只有默认的无参数构造函数 
}; 
class  AK_One_Parameter {
  
int  m_value;
public :
  AK_One_Parameter(
int  value) {  //  只有一个有参数构造函数 
    m_value  =  value;
  } 
};
class  Guns {
  AK_Zero_Parameter ak_1;
  AK_One_Parameter ak_2;
public :
  
//  ak_1的构造函数,ak_2的构造函数
  Guns( int  value):ak_2(value){}  
  
//  ak_1的构造函数,ak_2的拷贝构造函数 
  Guns(AK_One_Parameter ak_one):ak_2(ak_one) {}
  
//  ak_1的构造函数,ak_2的构造函数,ak_2的赋值函数 
// Guns(AK_One_Parameter ak_one):ak_2(0) {  ak_2 = ak_one; }
};
int  main() { 
   system(
" PAUSE " ); 
   
return   0 ;
}

    其实,Guns的构造过程,首先是构造函数内部调用之前,参考初始化列表,对成员进行初始化工作。顺序根据成员声明的顺序。
    首先,初始化ak_1,ak_1没有在列表中被指定,所以调用了ak_1的“无参数的构造函数”。
    然后,初始化ak_2,ak_2在列表中指定,调用对应的“有参数的构造函数”,如果ak_2也在列表中不指定的话,就必须调用ak_2的“无参数的构造函数”,编译器会在AK_One_Parameter这个类中去寻找,然后会发现找不到“无参数构造函数”,因此会编译失败。
    这里对于ak_1只调用了一次构造函数,并不存在效率提升。效率的提升体现在第二个构造函数与第三个构造函数。
    第二个构造函数,对于ak_2调用了一次拷贝构造函数。
    第三个构造函数,对于ak_2首先调用一次构造函数,然后在构造函数内部,调用了一次赋值函数。

3. 初始化基类的成员

class  Gold_AK: AK_Zero_Parameter,AK_One_Parameter {
public :
  // 初始化基类AK_Zero_Parameter,初始化基类AK_One_Parameter   
  Gold_AK(
int  value):AK_One_Parameter(value) {};
}; 

    在上面的代码中,加入上面的代码。对于子类Gold_AK,其构造过程如下:
    首先,初始化基类AK_Zero_Parameter,由于在初始化列表中,没有任何指示,所以调用其“无参数的构造函数”。
    然后,初始化基类AK_One_Parameter,由于在初始化列表中,给出了明确指示,所以调用其“有参数的构造函数”。如果不在列表中给出指示的话,就会试图调用其无参数的构造函数,而其没有这样的函数,编译失败。所以,当基类只有“有参数的构造函数时”子类的构造函数中,必须使用成员初始化列表对齐进行指定。

4. 总结

    初始化对象成员和初始化基类成员,当只有“有参数的构造函数时”,必须在初始化成员列表中进行指示。其余情况,不是必须的,但是有时候,能够提升性能。
    此外,const成员和引用成员的初始化工作,必须在初始化成员列表中指示。
    初始化的顺序与列表无关,与变量声明的顺序有关,基类子类的顺序有关。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

成员初始化列表-适用场合 的相关文章

  • Python:Using TensorFlow backend.

    声明 先说个故事吧 有一个农夫想制作一套农具 就买来一些工具 但是有了工具依然不会用 就去找别人帮忙 有一个人教给农夫一套方法 农夫高兴地就回家了 结果农夫发现 用这个人给的方法 跟自己的工具不匹配 然后就跟别人说这个人害人不浅 为什么要说
  • 医疗图像三维重建方法小结(python+VTK+ITK+Mayavi)

    医疗图像三维重建forpython 环境简介 方法 方法一 Poly3DCollection matplotlib 方法二 VTK ITK 方法三 Mayavi之contour3d 最终方法Mayavi TVTK 环境简介 语言是pytho
  • 如果让你自己设计一个分布式架构的中间件系统,该怎么做?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 1 Master Slave架构 2 异步日志持久化机制 3 检查点机制 定时持久化全量数据 4 引入检查点节点 5 总结 思考 这篇文章 给大家来聊一个生产级
  • git cherry-pick 拣选命令——重放提交

    git cherry pick 拣选命令 重放提交 语法 描述
  • (二)基于演示介绍一些技术要点

    1 解决方案目录结构 2 各模块的依赖关系图 3 基于以上的架构的Web端访问数据库的方式 4 从实体类成员到界面控件的转换 实体类 gt 数据表 根据实体类字段数据类型以及Attribute来决定表字段名 类型 主外键 进而形成完整的数据
  • 织梦搜索结果页文档标题标红引起样式错乱解决方法

    在搜索结果页模板search htm中 dede list dede list 里凡是有 alt field title 和 title field title 把里面的 field title 标题标签改成 field title fun
  • 记录字节跳动前端面试,四轮技术面

    一面 笔试题 多刷字节题库 多考js编程题 两道算法题 基本时lotcode简单中等题 1 如果后端传给前端一个很大的数 前端会怎么处理 该怎么处理 分析 不能直接渲染 因为会使页面加载过慢 不利于用户体验 方法 采用懒加载 分页 前端维护
  • MySQL字段约束条件,外键约束条件,表关系

    目录 字符编码与配置文件 统一字符编码 存储引擎 修改存储引擎的方式 自定义选项存储引擎 不同存储引擎产生的表文件有几个 MERGE InnoDB Archive BLACKHOLE blackhole与memory存取数据的特征 Blac
  • Cookie 和 Session 归纳

    首先介绍下基本概念 cookie是服务器通知客户端让其保存健值对的一种形式 客户端有了cookie之后 每次请求就会发送给服务器 每个cookie最大是4kb 服务器创建cookie 1Cookie cookie new Cookie 创建
  • Jacoco代码覆盖率测试

    欢迎光临我的博客查看最新文章 https river106 cn 1 简介 JaCoCo Java Code Coverage 是一个开源的覆盖率工具 它针对的开发语言是java 其使用方法很灵活 可以嵌入到Ant Maven中 很多第三方
  • linux下nginx重启命令

    linux下的nginx重启命令常见以下3种 systemctl restart nginx service nginx restart usr sbin nginx s reload
  • 高职教育应对ChatGPT应用的策略

    一 完善顶层设计 提升技术水平 在推广ChatGPT平台的过程中 高职院校需要关注技术本身的问题 这就需要在国家和地方政府的引导下 引入更完善的技术顶层设计 提高人工智能在高职教育中的运用水平 具体来说 一方面需要出台更加高效的法规来确保我
  • Flink CDC 单线程读取 mysql binlog 同步到 Elasticsearch 的压力测试

    硬件环境 MySQL 服务器2核1G Flink 服务器2核4G Elasticsearch 服务器2核8G 软件版本 MySQL 5 7 35 Flink 2 12 1 14 2 Elasticsearch 7 1 0 flink sql
  • Github上传代码菜鸟超详细教程

    最近需要将课设代码上传到Github上 之前只是用来fork别人的代码 这篇文章写得是windows下的使用方法 第一步 创建Github新账户 第二步 新建仓库 第三部 填写名称 简介 可选 勾选Initialize this repos
  • 二分法(二)找到目标值开始位置和结束位置NUSOJ2677

    题目 现在给定一个升序排列的数组num t个目标值 现在你要做的便是找到目标值在数组中的开始位置和结束位置 如果数组中不存在该值 则返回 1 1 输入m Input 第一行输入一个n n 1 lt n lt 1e6 代表数组num长度 第二
  • 如何搭建一个完整的Vue3.0 + ts 的项目

    如何搭建一个完整的Vue3 0 ts 的项目 相信9月18日尤大大的关于Vue3 0的发表演讲大家一定有所关注 现在Vue3 0 也已经进入RC阶段 最终产品的候选版本 如果没有问题则可发布成为正式版本 所以Vue3 0的学习是我们必然的趋
  • matlab无人机路径规划,一种新的优化算法,天牛群算法,比蚁群算法效果好,收敛快

    matlab无人机路径规划 一种新的优化算法 天牛群算法 比蚁群算法效果好 收敛快 在tsp qap二次规划以及三维路径规划上有很好的效果 ID 51100647321750445tbNick id4mr
  • CSDN周赛58期后记,及往期题目记录

    本期周赛没什么bug 体验比较丝滑 提出表扬 咱也不能老吐槽不是 当然 丝滑的根本原因是题目比较水 尤其是最后一道 莫名其妙的键盘 两周前的 56 期刚刚考过 当真是莫名其妙而又迫不及待地又考了一遍 是怕大家背得不够熟吗 而从难度上看 这道
  • go语言安装环境

    go语言安装环境 1 安装包下载 2 安装 最好不要有中文路径 3 测试环境 cmd中输入 go version 回车 4 经典代码 保存文件名 hello go package main import fmt 包含println func
  • c++拆分string型字符串存到vector中

    对数据进行拆分放到vec中 void split string const std string str std vector

随机推荐

  • 关于IDEA无法启动常见的几个问题

    IDEA无法启动 常见的问题及解决办法 第一种 无法启动 大多是因为javaagent 那一行 这种比较简单 出现这种问题 大都是因为编辑vmoptions时出错造成的 这种只需要删除idea 的配置文件就行 一般默认在C盘 例如 C Us
  • Python requests“Max retries exceeded with url” error

    今天写python网络爬虫的时候遇到一个问题 报错的具体内容如下 HTTPConnectionPool host dds cr usgs gov port 80 Max retries exceeded with url ltaauth s
  • 机器学习——朴素贝叶斯、后验概率最大和极大似然

    朴素贝叶斯没有参数估计 给堆数据直接求 属于生成模型 不用优化模型求最佳参数 这区别于判别模型 我遇到的困惑 1 后验概率最大 和 极大似然 这二者有什么区别和联系吗 2 朴素贝叶斯和EM这二者有什么区别和联系吗 答案 1 朴素贝叶斯是根据
  • 怎么维护自己的电脑?

    方向一 我的电脑介绍 我使用的是一台来自知名品牌的笔记本电脑 它具有高性能的核心配置 如快速处理器 大容量内存和高性能显卡 以及宽敞的存储空间 我选择这台电脑主要是因为它的出色性能和可靠性 能够满足我在学习和工作中的需求 方向二 我的日常维
  • 数据分析Power BI数据建模教程(四)——如何创建计算度量值和计算表

    Power BI 是基于云的商业数据分析和共享工具 它能帮您把复杂的数据转化成最简洁的视图 通过它 您可以快速创建丰富的可视化交互式报告 即使在外也能用手机端 APP 随时查看 甚至检测公司各项业务的运行状况 只需它仪表板的一个界面就够了
  • 使用yum安装nginx,几步完成,超级简单!(亲测)

    1 安装yum utils工具包 sudo yum install yum utils 2 设置yum存储库 进入 etc yum repos d目录 cd etc yum repos d 创建nginx repo文件 vim nginx
  • AMIS + httplib 快速搭建前后端

    AMIS httplib 快速搭建前后端 1 简介 1 1 AMIS简介 1 2 httplib开源库 2 快速使用 2 1 AMIS环境搭建 2 2 创建一个登陆页面 2 3 利用httplib搭建简单的后端 2 4 运行 尾声总结 1
  • 基于python手动画出spectrogram(语谱图)

    Spectrogram是基于STFT变换得到的 非常有助于分析信号的时频特性 在语音信号处理中常被称为 语谱图 python中有一些写好的模块可以直接将时域的信号转化成spectrogram 但这并不利于对其原理的理解 而且横纵左边的转换也
  • Vue中token刷新及续期的功能实现

    在vue中如何实现token续期 刷新token 原因 最近公司项目有一个视频播放的功能 然后由于在测试环境登录时token过期时间较短导致一直在当前页面播放视频会出现token过期的现象 然后用户刷新会触发axios响应拦截器的操作退出系
  • Day01.二分查找、移除元素

    Day01 二分查找 移除元素 0704 二分查找 题目链接 0704 二分查找 思路 二分查找 仅对有序数组有效 每次需要数组的中间值 与目标值比较大小 如果中间值比目标值大 说明目标值位置在left与mid中间 区间缩小一半 同理 如果
  • 蓝桥杯试题联系

    题目 你有一架天平 现在你要设计一套砝码 使得利用这些砝码可以称出任意 小于等于 N 的正整数重量 那么这套砝码最少需要包含多少个砝码 注意砝码可以放在天平两边 输入格式 输入包含一个正整数 N 输出格式 输出一个整数代表答案 样例输入 7
  • 2D离散傅里叶变换及逆变换的matlab实现

    积分线性变换可以将信号或图像在更适合的域内表达 并且使得解决相关问题更容易 在图像分析中最常用的积分显示变换是傅里叶变换 离散余弦变换与小波变换 1d傅里叶变换由傅里叶 Fourier 提出 1d傅里叶变换将函数f x 变换到频率域F t
  • android 屏幕适配框架,Android屏幕适配

    为什么要进行Android屏幕适配 由于Android系统的开放性 任何用户 开发者 OEM厂商 运营商都可以对Android进行定制 于是导致 1 Android系统碎片化 小米定制的MIUI 魅族定制的flyme 华为定制的EMUI等等
  • 组合式 API - 生命周期钩子

    选项式 API Hook inside setup beforeCreate Not needed gt setup created Not needed gt setup beforeMount onBeforeMount mounted
  • 适配器设计模式

    目录 前言 适配器原理与实现 适配器模式的应用场景 1 封装有缺陷的接口 2 统一多个类的接口设计 3 替换依赖的外部系统 4 兼容老版本接口 5 适配不同格式的数据 代理 桥接 装饰器 适配器 4 种设计模式的区别 参考资料 前言 适配器
  • 【C++】拷贝构造函数(深拷贝,浅拷贝)详解

    一 什么是拷贝构造函数 首先对于普通类型的对象来说 它们之间的复制是很简单的 例如 int a 100 int b a 而类对象与普通对象不同 类对象内部结构一般较为复杂 存在各种成员变量 下面看一个类对象拷贝的简单例子 1 include
  • TypeScript从入门到放弃(一)

    先点赞后关注 防止会迷路 寄语 长风破浪会有时 直挂云帆济沧海 本文已收录至https github com likekk Blog欢迎大家star 共同学习 共同进步 如果文章有错误的地方 欢迎大家指出 后期将在将github上规划前端学
  • linux上的常用的一些操作

    Ubuntu 上安装程序 rpm 命令 https www cnblogs com ftl1012 p rpm html 查看硬盘分区和使用情况 df h 转载于 https www cnblogs com zach0812 p 11507
  • 拒绝拷贝,研读官方文档-小话Mysql锁

    实践出真知 跟着官方文档跑Demo 参考文档 由于中文站是机译 阅读拗口 更推荐阅读英文文档 Mysql官网文档 英文站 Mysql官网文档 中文站 范围 行锁 表锁 独占锁S 排他锁X 意向排他IX 意向独占IS 现状吐槽 自我理解 一针
  • 成员初始化列表-适用场合

    1 简述 主要的场合有四类 初始化对象成员 初始化基类的成员 初始化const成员 初始化引用成员 对于const成员和引用成员 比较简单 这两种变量都要求初始化后不能赋值 因此 只能在成员初始化列表中进行初始化 其他地方不行 本文主要介绍