构造函数与成员变量初始化

C++自学精简教程 目录(必读)

1 为什么需要定义构造函数?

构造函数主要用来给成员变量初始化。

让类对象有一个良好的开始状态。

2 构造函数初始化成员变量

下面我们来完善上一篇文章中的几个构造函数。

让这些构造函数完成给成员变量初始化的职责。

为此,我们也把成员变量加上来。

构造函数示例

struct Student
{//默认构造函数 default constructorStudent() {};//非默认构造函数,给m_age成员初始化Student(int age):m_age(age) {};//非默认构造函数,给两个成员变量初始化Student(int age, bool sex):m_age(age), m_sex(sex){};//非默认构造函数,给3个成员变量初始化Student(int age, bool sex, string name):m_age(age), m_sex(sex),m_name(name){};private:int m_age;//年龄bool m_sex;//性别string m_name;//姓名
};int main()
{Student stu1;//调用默认构造函数Student stu2(10);//调用带一个整形参数的构造函数Student stu3(10, true);//调用两个参数的那个构造函数Student stu4("DengXiaoPing", 10, true);//调用3个参数的那个构造函数return 0;
}

构造函数的写法

构造函数给成员变量初始化的写法:

类构造函数(构造函数参数列表) : 成员变量1(参数1), 成员变量2(参数2),.... {}//函数体

Student(int age,bool sex):m_age(age),m_sex(sex){};

注意:那个冒号必不可少哦!

调试验证

构造函数真的初始化成员变量了吗?是的。

各个对象使用不同构造函数构造后各自成员变量的值

成员初始化的特点

从上图我们可以看出:

1)成员变量m_name是类类型

如果你在构造函数中通过传入的参数初始化了m_name,m_name就用你初始化的值。

如果你没有在构造函数中初始化m_name,它就调用string的默认构造函数初始化自己。

string 的默认构造函数将自己构造为一个空字符串""。

2)成员变量是基本类型

如果你没有在构造函数中初始化它,它的值是随机的值。

比如,m_age=-858993460, m_sex=true 。

注:至于m_sex为什么还显示了204,我也不清楚,我估计是计算机最小的地址单位是字节,而bool类型只占用了字节的一个位。所以计算机就干脆显示了那个字节里的内容给我们看(我猜的,毕竟这已经不是C++的内容了)。

默认构造函数

3 不定义构造函数成员变量就不初始化了吗?

不定义构造函数,编译器就会替我们合成一个默认构造函数。

默认构造函数对于成员变量是类类型的,调用这个成员变量所在类的默认构造函数初始化;

对于成员变量是基本类型的,C++没有规定(你可以认为是随机值)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/118823.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24.排序,插入排序,交换排序

目录 一. 插入排序 (1)直接插入排序 (2)折半插入排序 (3)希尔排序 二. 交换排序 (1)冒泡排序 (2)快速排序 排序:将一组杂乱无章的数据按一…

(六)k8s实战-存储管理

一、Volumes 1、HostPath 【使用场景:容器目录 挂载到 主机目录】 【可以持久化到主机上】 将节点上的文件或目录挂载到 Pod 上,此时该目录会变成持久化存储目录,即使 Pod 被删除后重启,也可以重新加载到该目录,该目…

【算法题】1761. 一个图中连通三元组的最小度数

题目: 给你一个无向图,整数 n 表示图中节点的数目,edges 数组表示图中的边,其中 edges[i] [ui, vi] ,表示 ui 和 vi 之间有一条无向边。 一个 连通三元组 指的是 三个 节点组成的集合且这三个点之间 两两 有边。 连…

恢复数据的利器:易我数据恢复终身技术版v16.2.0.0

EaseUS Data Recovery Wizard为全球提供数据恢复方案,用于误删数据数据,电脑误删文件恢复,格式化硬盘数据恢复,手机U盘数据恢复等,RAID磁盘阵列数据恢复,分区丢失及其它未知原因丢失的数据恢复,简单易用轻松的搞定数据恢复。 特点描述 - 易我数据恢复中文便携版,无…

Kitchen Hook

双扛厨房排钩:挂刀具

HuggingFace 简介

HuggingFace 简介 0. HuggingFace 简介1. HuggingFace 官网地址2. HuggingFace 标准研发流程3. HuggingFace 工具集4. 编码工具4.1 编码工具介绍4.2 使用编码工具 5. 数据集工具5.1 数据集工具介绍5.2 使用数据集工具 6. 评价指标工具6.1 评价指标工具介绍6.2 使用评价指标工具…

vmware 16增加硬盘容量并在Ubuntu 18.04上边格式化并挂载

参考了《增加 VM虚拟机硬盘容量》 《Linux学习之分区挂载》中有给VMWare 16虚拟机添加一块硬盘的内容,需要先参考添加硬盘。 sudo mkfs.ext4 /dev/sda4给/dev/sda4进行ext4格式化。 sudo mkdir /mountsda4新建一个挂载目录。 sudo mount -t ext4 /dev/sda4 /mo…

gitlab升级

1.下载需要的版本 wget -c https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.7.6-ce.0.el7.x86_64.rpm --no-check-certificate gitlab-ce-15.4.6-ce.0.el7.x86_64.rpm gitlab-ce-15.7.6-ce.0.el7.x86_64.rpm gitlab-ce-15.9.7-ce.0.el7.x86_64.rpm g…

可扩展的Blender插件开发汇总

成熟的 Blender 3D 插件是令人惊奇的事情。作为 Python 和 Blender 的新手,我经常发现自己被社区中的人们创造的强大的东西弄得目瞪口呆。坦率地说,其中一些包看起来有点神奇,当自我怀疑或冒名顶替综合症的唠叨声音被打破时,很容易想到“如果有人能做出可以做xxx的东西就好…

JS踩坑: for let 和 for var的区别

最近踩了一个js的坑 踩坑代码 如下两段代码&#xff0c;看起来没什么区别&#xff0c;但是实际运行效果却不一样 for (let i 0; i < 10; i) {console.log("for:" i);setTimeout(() > {console.log("setTimeout:" i);}, 1000); }输出&#xff1…

openGauss学习笔记-55 openGauss 高级特性-全密态数据库

文章目录 openGauss学习笔记-55 openGauss 高级特性-全密态数据库55.1 连接全密态数据库55.2 创建用户密钥55.3 创建加密表55.4 向加密表插入数据并进行查询 openGauss学习笔记-55 openGauss 高级特性-全密态数据库 全密态数据库意在解决数据全生命周期的隐私保护问题&#xf…

git学习笔记 | 版本管理 - 分支管理

文章目录 git学习笔记Git是什么仓库常见的命令commit 备注规范在文件下设置git忽略文件 .gitignore 版本管理git log | git reflog 查看提交日志/历史版本版本穿梭 git resetgit reset HEAD <file> git checkout -- fileName 丢弃工作区的修改git revertGit恢复之前版本的…

裸露土方智能识别算法 python

裸露土方智能识别算法通过opencvpython网络模型框架算法&#xff0c;裸露土方智能识别算法能够准确识别现场土堆的裸露情况&#xff0c;并对超过40%部分裸露的土堆进行抓拍预警。此次算法用到的Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非常流…

Visual Studio(2022)生成链接过程的.map映射文件以及.map映射文件的内容说明

微软的官方说明 /MAP&#xff08;生成映射文件&#xff09; | Microsoft Learn 设置步骤 1. 右键项目属性, 连接器 -> 常规 -> 启用增量链接&#xff0c;设置为否。如下图&#xff1a; 2. 连接器 -> 调试 生成调试信息 设置为 生成调试信息 (/DEBUG) 生成程序数据库…

风险评估

风险评估概念 风险评估是一种系统性的方法&#xff0c;用于识别、评估和量化潜在的风险和威胁&#xff0c;以便组织或个人能够采取适当的措施来管理和减轻这些风险。 风险评估的目的 风险评估要素关系 技术评估和管理评估 风险评估分析原理 风险评估服务 风险评估实施流程

AutoSAR CP 飞阅TIME

目录 什么是autosar autosar 做了什么 Foundation、CP、AP CLASSIC PLATFORM &#xff08;CP&#xff09; ADAPTIVE PLATFORM 基于autosar 开发 SWC Port Runnables RTE BSW MCAL CDD I/O Hardware Abstraction Communication Hardware Abstraction Memory Har…

C#基础知识点记录

目录 课程一、C#基础1.C#编译环境、基础语法2.Winform-后续未学完 课程二、Timothy C#底层讲解一、类成员0常量1字段2属性3索引器5方法5.1值参数&#xff08;创建副本&#xff0c;方法内对值的操作&#xff0c;不会影响原来变量的值&#xff09;5.2引用参数&#xff08;传的是地…

财务部发布《企业数据资源相关会计处理暂行规定》

导读 财务部为规范企业数据资源相关会计处理&#xff0c;强化相关会计信息披露&#xff0c;根据《中华人民共和国会计法》和相关企业会计准则&#xff0c;制定了《企业数据资源相关会计处理暂行规定》。 加gzh“大数据食铁兽”&#xff0c;回复“20230828”获取材料完整版 来…

【Java核心知识】JUC包相关知识

文章目录 JUC包主要内容Java内置锁为什么会有线程安全问题Synchronize锁Java对象结构Synchronize锁优化线程间通信Synchronize与wait原理 CAS和JUC原子类CAS原理JUC原子类ABA问题 可见性和有序性为什么会有可见性参考链接 显式锁Lock接口常用方法显式锁分类显式锁实现原理参考链…