当前位置: 首页 > news >正文

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

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.lryc.cn/news/151863.html

相关文章:

  • 使用Go env命令设置Go的环境
  • 目标检测YOLO实战应用案例100讲-道路场景下目标检测与分割模型的压缩研究与实现(续)
  • b站手机缓存文件转MP4
  • 一个集成的BurpSuite漏洞探测插件1.2
  • [FMMPEG] parse与 demuxer
  • 【Bug】Ubuntu 有线设置打不开无反应
  • 迈向无限可能, ATEN宏正领跑设备切换行业革命!
  • Ubuntu18.04:ORB-SLAM3使用数据集构建地图和保存点云地图
  • 找到自制电子杂志的方法了,快来看看?
  • Django请求的生命周期
  • Kotlin 中 OkHttp 使用及解析
  • 【C++代码】用栈实现队列,用队列实现栈--代码随想录
  • 肖sir__linux详解__001
  • 【Android Framework系列】第12章 RecycleView相关原理及四级缓存策略分析
  • P1886 滑动窗口 /【模板】(双端队列)+双端队列用法
  • 网络渗透day6-面试01
  • Docker 及 Docker Compose 安装指南
  • Gitlab创建一个空项目
  • C语言-内存分布(STM32内存分析)
  • Linux上配置NAT
  • springboot实现简单的消息对话
  • 「Tech初见」Linux驱动之blkdev
  • ssh配置(二、登录服务器)
  • pytorch异常——RuntimeError:Given groups=1, weight of size..., expected of...
  • 【FPGA项目】沙盘演练——基础版报文收发
  • 【C++技能树】继承概念与解析
  • 计算机网络 第二节
  • 无涯教程-机器学习 - 矩阵图函数
  • Redis 高可用与集群
  • 修改文件名后Git仓上面并没有修改