C++类与对象:初始化列表(赋值和初始化的区别)

2023-11-04

使用初始化列表的情况

  1. 成员变量是const类型
  2. 成员变量是引用类型
  3. 成员变量的自定义类型(且该类型构造函数是非默认构造)

初始化与赋值的区别

初始化:对一个不存在的变量进行定义并赋值int a=10;

  • 1要定义2要赋值,缺一不可;

赋值:对一个已经存在变量进行赋值int a; a=10;

  • 对同一变量初始化只能进行一次,赋值可以有多次

构造函数体内部是赋值

定义一个const常量,该类型需要在定义时初始化,如果不初始化就会报错
所以类内定义的const成员变量也需要初始化,当在构造函数的函数体中初始化_a,运行后报错;
在这里插入图片描述

  • 说明构造函数体内部是赋值,并不是对成员变量初始化
  • 要对成员变量进行真正的初始化就需要用到初始化列表,
  • 除了拷贝构造函数(拷贝构造也是构造的一种),其它成员函数都没有初始化列表。

初始化列表

每个成员变量在初始化列表处只能出现一次

  • 初始化列表可以认为是 对象成员变量定义的地方
  • 用户不定义编译器会自动生成
  • 成员变量在类中声明次序 是其在初始化列表中的初始化顺序(谁先声明先在列表处初始化谁)
    与其在初始化列表中的先后次序无关

例:a2的值就是随机值
在这里插入图片描述

const成员变量初始化:

const不能修饰构造函数,拷贝构造函数,析构函数,运算符重载;
因为它们函数本身就要对成员变量进行操作

在这里插入图片描述
也可以直接在90行对const成员赋值,这样自动生成的初始化列表就会使用该默认值作为常量的初始值

自定义类型成员初始化

初始化_t就必须在Date类对象的构造函数的初始化列表处调用Time类构造函数初始化_t,
如果是默认的,则编译通过(因为调用不需要传参);
调用Time类构造函数则需要在Date类构造函数的初始化列表调用
在这里插入图片描述

整个代码执行顺序如上标号

  • 先初始化对象d
  • d内部 有自定义Time类型对象_t,所以也需将_t初始化,
    但是在定义对象传参的时候并没有时间类的参数;
  • 如果用户定义的Time类构造函数不是默认的
    且还不加_t(1,1,1)语句,编译器就不知道如何调用Time类构造初始化对象剩余的参数
  • _t(1,1,1)语句就是为了调用Time类的非默认构造函数,初始化_t对象

成员变量的缺省值

是给初始化列表使用的
在这里插入图片描述

赋值优先级:
初始化列表值>参数缺省值?成员变量缺省值(这俩要分情况,day就是先用参数值,自动生成的month就是用成员变量值)

临时变量

在这里插入图片描述

总结

  • 类中的成员是自定义类型,则初始化自定义类型的成员时,是在类中的初始化列表调用自定义类型的构造函数

  • 编译器自动生成的初始化列表会使用成员变量的缺省值
    所以说自动生成的初始化列表都是_year(6),括号里是带默认值的

  • _year(year)这样子是指定使用形参列表的缺省值

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

C++类与对象:初始化列表(赋值和初始化的区别) 的相关文章

随机推荐

  • 竞赛知识点4【搜索】

    文章目录 复习 栈和队列的概念 树 1 1 深度优先搜索 dfs 1 1 1 概念 1 1 2 例题 1 输出n个数的全排列 2 输出n个数中选m个的组合 3 N皇后 8皇后的升级版 4 马踏棋盘 1 1 3 DFS大体框架 1 1 4 剪
  • Springboot-MDC+logback实现日志追踪

    一 MDC介绍 MDC Mapped Diagnostic Contexts 映射诊断上下文 该特征是logback提供的一种方便在多线程条件下的记录日志的功能 某些应用程序采用多线程的方式来处理多个用户的请求 在一个用户的使用过程中 可能
  • Linux 安装cento

    在虚拟机中安装CentOS7 http www centoscn com image text setup 2014 0723 3341 html CentOS 7 下 ifconfig command not found 解决办法 htt
  • localStorage.setItem()使用

    localStorage setItem 使用
  • python自测100题

    如果你在寻找python工作 那你的面试可能会涉及Python相关的问题 通过对网络资料的收集整理 本文列出了100道python的面试题以及答案 你可以根据需求阅读测试 python基础 Q1 什么是Python Python是一种面向对
  • Scala学习第一天(十三):映射(可变/不可变Map;Map基本操作)

    学习目标 映射 不可变Map 可变Map Map基本操作 映射 Map可以称之为映射 它是由键值对组成的集合 在Scala中 Map也分为 不可变Map 可变Map 不可变Map 语法 val var map Map 键 gt 值 键 gt
  • Spring @ComponentScan 自定义扫描规则

    Spring ComponentScan 组件中扫描规则使用场景 package org example cap2 config import org springframework context annotation Bean impo
  • Apache Beam简介及相关概念

    文章目录 一 简介 二 基本概念 1 Pipelines 2 PCollection 3 Transforms 4 ParDo 5 Pipeline I O 6 Aggregation 7 User defined functions UD
  • H5 手机键盘兼容

    文章目录 键盘弹起页面表现 ios表现 安卓表现 监听软键盘弹起和收起 ios监听focus blur事件 安卓还可见监听页面高度 获取软键盘高度 通过window visualViewport异步获取 唤起软键盘始终让焦点元素滚动到可视区
  • SQL执行计划的十大参数

    调用分析指令分析sql再进行对应的调优 explaion select 十个参数 id 编号 select type 查询类型 table 表 type 索引类型 possible keys 预测可能用到的索引 key 实际使用的索引 ke
  • css实现垂直居中6,CSS实现水平、垂直居中的6种方式

    1 块级元素和行内元素 2 水平居中和垂直居中 3行内元素的水平居中 1 table 2 设置line height 3 text align center 4 margin 0 auto 5 绝对定位 6 flex弹性盒模型 7 calc
  • Http协议、get和post请求整理

    1 什么是GET 和 POST GET 和 POST 其实都是 HTTP 的请求方法 除了这 2 个请求方法之外 HTTP 还有 HEAD PUT DELETE TRACE CONNECT OPTIONS 这 6 个请求方法 所以HTTP的
  • VMware16 Pro的安装及VMware配置CentOS7虚拟机(快照使用)

    VMware16 Pro下载安装 1 进入官网下载 VMware官网 2 选择资源栏目 点击产品下载 3 找到VMware Workstation Pro进行下载 搜索框搜索 vmware workstation 16 pro for wi
  • mysql中双引号和单引号有什么区别

    mysql中双引号和单引号有什么区别 前2天看到有人问 mysql中双引号和单引号有什么区别 希望大家可以关注下公众号 支持一下 鞠躬感谢 我就直接po代码和截图了 如下 select from employees where last n
  • vue3 + vite npm 组件库开发(一)

    1 创建项目 创建一个普通的vite vue3 项目即可 我这里创建的是ts的项目 js也可 根据自己的使用习惯 2 配置项目 根目录下创建packages目录作为组件的开发包 目录下index ts 作为整个组件库的出口文件 导出组件 i
  • “目标检测“+“视觉理解“实现对输入图像的理解

    提出了GLIPv2 一种基于VL的理解模型 它服务于localization任务 例如 目标检测 实例分割 和视觉语言 VL 理解任务 例如 VQA 图像字幕 论文地址 https arxiv org pdf 2206 05836 pdf
  • 如何利用ProcessOn 做资产管理流程图

    资产管理 是一家公司最重要的管理活动 好的资产管理可以让资源最优化利用 实现资产价值的最大化 可以帮助组织管理和降低风险 同时当需要决策的时候 对资产数据进行分析和评估 也可以帮助做出更明智的决策 如优化资产配置 更新技术设备等 一 资产流
  • 笔记24-1(C语言进阶 程序环境和预处理)

    目录 注 推荐书籍 程序的翻译环境和执行环境 编译和链接 翻译环境 编译 预处理 编译 汇编 链接 运行环境 执行环境 注 本笔记参考 B站up 鹏哥C语言 推荐书籍 程序员的自我修养 程序的翻译环境和执行环境 在ANSI C的任何一种实现
  • 可以同情弱者,别同情弱势!

    大家好 我是北妈 0 最近北妈在重刷 天道 里面提到了一个强势文化 弱势文化的概念 我觉得对生活和职场 感情都有些指导作用 我看影评和各种文章讨论这个的概念比较多 毕竟大家都喜欢谈格局 强弱 今天讨论下如何成为强者 强者是不是应该鄙视弱者
  • C++类与对象:初始化列表(赋值和初始化的区别)

    标题 使用初始化列表的情况 初始化与赋值的区别 构造函数体内部是赋值 初始化列表 const成员变量初始化 自定义类型成员初始化 成员变量的缺省值 临时变量 总结 使用初始化列表的情况 成员变量是const类型 成员变量是引用类型 成员变量