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

【C++语法】类和对象(2)

4.类和对象(2)

文章目录

  • 4.类和对象(2)
    • 类的六个默认成员函数
      • (1)构造函数:
        • 构造函数特点
        • 含有缺省参数的构造函数
        • 构造函数特点(续)
        • 注意事项
        • 构造函数补充

前面总结了有关对象概念,对比 C 与 C++ 编程范式;讲解类定义、访问限定、作用域、实例化;说明类存储大小含内存对齐,即便无成员变量也占 1 字节;还阐述 this 指针特性,它是成员函数隐式形参。忘记了就回去看

类和对象(1)

类的六个默认成员函数

空类并不是什么都没有,在用户没有显式实现的情况下,编译器会默认生成六个成员函数。

在这里插入图片描述

(1)构造函数:

构造函数的函数名与类名相同,在实例化类类型对象时自动调用,并且在对象的生命周期内只调用一次,构造函数的主要作用是初始化对象,而不是创建对象

构造函数特点

1.构造函数的函数名与类名相同
2.没有返回值,不写void
3.构造函数在对象实例化后自动调用
4.支持函数重载(函数重载的规则与之前学的内容一致)可以使用缺省参数

在这里插入图片描述

特别要注意:构造函数虽然是在对象实例化时编译器自动调用该函数。但不可以把构造函数放在private或protect中

在这里插入图片描述

含有缺省参数的构造函数

在这种情况下我们可以在对象实例化时进行传参,注意:这里是传参,并不是将对象进行初始化,要与结构体初始化区分开来,这里传参使用小括号”()”不是用”{ }”

在这里插入图片描述

构造函数特点(续)
  1. 如果用户没有显式定义构造函数,C++编译器会自动生成一个无参的构造函数,但如果用户生成了编译器不再会自动生成

  2. 对于编译器自动生成的构造函数,有如下的作用:
    1>该构造函数不会对编译器内置类型对象(int,float,double,char…)进行处理

    2>该构造函数会对自定义类型调用它的默认构造函数注意默认构造函数与其他的构造函数在使用上有很大的区别,在后面会详细说),如果该自定义类型没有默认的构造函数,编译器会报错

注意事项
  • 如果该自定义类型的构造函数为全缺省参数,编译器不会报错,当构造函数的参数中存在非缺省参数时,编译器会报错

  • 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且一个类中默认构造函数只能有一个。

  • 无参构造函数、全缺省构造函数,我们没写编译器默认生成的构造函数,都可以认为是默认构造函数

在这里插入图片描述

构造函数补充
  1. 一个类中默认构造函数只能有一个
  2. 一定要注意默认构造函数与普通构造函数的区别
  3. 实践中的总结
    • 1>一般情况下,构造函数都需要我们自己去定义。
    • 2>当一个类中没有内置类型成员变量,只有自定义类型变量时,我们可以对这个类不写构造函数,它会逐层调用其他自定义类型成员变量的构造函数

Q:关于编译器生成的默认成员函数,很多人会有疑惑:不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用?对象调用了编译器生成的默认构造函数,但是d对象_year/_month/_day,依l日是随机值。也就说在这里编译器生成的默认构造函数并没有什么用??

A:C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的数据类型,如:int/char…,自定义类型就是我们使用class/struct/union等自己定义的类型,看看下面的程序,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数。

注意:

  1. C++11中针对内置类型成员不初始化的缺陷,又打了补丁,即:内置类型成员变量在类中声明时可以给默认值。
  2. 当我们自己写了构造函数(无论是否为默认的构造函数),编译器就不会自动生成默认的构造函数了要么自己补充,要么使用关键字default强制编译器自动生成
  3. 在定义类中成员变量是进行变量声明并给出缺省值,而不是进行实例化后进行初始化,看起来非常像,但要注意区分。这里是给声明一个默认值(缺省值),当有其他值时不会使用该缺省值,包括构造函数

在这里插入图片描述

相关文章:

  • 深入解析Mlivus Cloud中的Minio模块配置与最佳实践
  • 【家政平台开发(79)】解锁家政新金融:家政平台与金融服务融合之道
  • 丝杆升降机换油周期深度解析:从理论模型到自动化监测的全栈实践​
  • leetcode 283和2460
  • 【fork初体验】
  • 【2025 最新前沿 MCP 教程 03】基础构建模块:工具、资源与提示
  • 提取office最强悍的软件
  • 【白雪讲堂】
  • Python循环语句-while循环(基础语法,基础案例,嵌套应用,嵌套案例)
  • C++栈的模拟实现
  • Tableau 基础表制作
  • Qt Charts 绘制曲线图示例
  • Trae 宝藏功能实测:从 Mcp 搭建天气系统,到 AI 重塑 Excel 数据处理
  • C语言 函数递归
  • Eclipse 插件开发 4 工具栏
  • JAVA JVM面试题
  • 【TypeScript】速通篇
  • 比象AI创作系统,多模态大模型:问答分析+AI绘画+管理后台系统
  • ip-prefix前缀列表
  • 基于PyTorch的图像识别主要依赖于深度学习模型(尤其是卷积神经网络,CNN)对图像特征进行自动学习和分类
  • 传染病防治法修订草案提请三审,拟加强医疗机构疾控能力建设
  • 第152次中老缅泰湄公河联合巡逻执法行动圆满结束
  • 航行警告!黄海南部进行实弹射击,禁止驶入
  • 儒说︱问世间孝为何物
  • 潘功胜:央行将实施好适度宽松的货币政策,推动中国经济高质量发展
  • 陕西省烹饪餐饮行业领军人物黄建军逝世,终年53岁