构造函数(包括默认构造函数) ,析构函数的使用与特性

news/2025/2/1 11:45:41/

文章目录

  • 一、构造函数
  • 二、默认构造函数(也是构造函数)
    • 默认构造函数的种类:
    • 1.无参类型
    • 2.全缺省类型
    • 3.编译器自动生成的
    • 4.汇总
  • 三、析构函数


一、构造函数

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,**并且在对象整个生命周期内只调用一次。 需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并 不是开空间创建对象,而是初始化对象

特性:

  1. 函数名与类名相同。
  2. 无返回值。
  3. 对象实例化时编译器自动调用对应的构造函数。
  4. 构造函数可以重载。

我们先来看显示构造函数
在我们定义了一个对象的同时,编译器已经自己完成了初始化
若有参数且不是全缺省类型我们就要在建立对象的时候传参数
在这里插入图片描述

二、默认构造函数(也是构造函数)

如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。

默认构造函数的种类:

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

1.无参类型

在这里插入图片描述

2.全缺省类型

在这里插入图片描述

3.编译器自动生成的

因为自己生产这里就不好展示了,当我们不写任何构造函数的时候,编译器会自动生成一个构造函数。
在这里插入图片描述

4.汇总

什么是内置与自定义类型?
1.内置类型/基本类型:语言本身定义的基础类型:int double char float等
2. 自定义类型:用struct/class/unio定义的变量等

我们一般简单点认为,不需要传参的就是默认构造函数

无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。在这里插入图片描述

这里要注意编译器生成的构造函数
1.对内置类型不做处理。
2.其中的自定义类型会去调用他的默认构造

什么情况下用默认构造函数呢?
1.一般情况下有内置类型成员就需要自己写构造函数,不能让编译器生成。
2. 全部都是自定义类型成员可以考虑让编译器自己生成。

三、析构函数

析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

析构函数是特殊的成员函数,其特征如下:

  1. 析构函数名是在类名前加上字符 ~。
  2. 无参数无返回值类型。
  3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载
  4. 对象生命周期结束时,C++编译系统系统自动调用析构函数。

在这里插入图片描述
我们看一下运行过程:
在这里插入图片描述
在这里插入图片描述
和构造函数相同若使用者不写也会生成默认析构函数

默认析构函数功能:
内置类型成员不做处理。
自定义类型成员会去调用它的默认析构函数(只能是默认的)

在这里插入图片描述


http://www.ppmy.cn/news/68872.html

相关文章

汇编五、伪指令与汇编程序结构

1、伪指令 1.1、概念 (1)伪指令是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有对应机器码,只用于汇编过程中为汇编程序提供汇编信息,帮助编译器编译。 1.2、ASM51提供的伪指令 伪指令分为如下几类。 1.2.1、…

SpringSecurity 一文彻底掌握

文章目录 前言一、SpringSecurity Web方案🍓Test Controller 测试请求控制器🤣SpringSecurity 基本原理🌍代码底层流程:重点看三个过滤器FilterSecurityInterceptor 方法级的权限过滤器ExceptionTranslationFilter 异常过滤器User…

golang web学习随便记6-模板引擎

以下代码是几乎最简单的一个模板&#xff0c;{{ . }} 表示执行模板时将嵌入的数据 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"><title>Go Web 编程</title> <…

C语言200行代码实现简易三子棋

前言 三子棋应该是是我们最早接触到的棋类游戏&#xff0c;用C语言实现三子棋对初学者来说是一种不错的锻炼 编写三子棋只需要用到数组、函数和生成随机数的知识&#xff0c;所以比较适合成为编程学习者编写的第一个小游戏。 一.代码实现 第一部分是源码复制就可以使用&…

C++基础篇:05 静态成员与单例模式

1 静态成员 1.1 什么是静态成员 被static修饰的成员变量、成员函数都称为静态成员 1.2 普通成员的特点 普通成员变量&#xff1a;每个类对象中都独有一份成员变量&#xff0c;相互之间没有任何关联 普通成员函数&#xff1a;都隐藏着一个this指针 1.3 静态成员的特点 静态成…

深入探究C++中的仿函数和迭代器——提升你的STL技能

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

一分钟图情论文:《公共图书馆法》视域下的馆员知识与能力体系探究

一分钟图情论文&#xff1a;《公共图书馆法》视域下的馆员知识与能力体系探究 在公共服务体系建设过程中&#xff0c;图书馆建设是十分关键地一环&#xff0c;在图书馆建设过程中又以图书馆员队伍的建设首当其冲。在当今复杂的信息环境下&#xff0c;我们该如何培养图书馆员&a…

Mybatis二级缓存详解

目录 二级缓存 MyBatis的缓存机制整体设计以及二级缓存的工作模式 二级缓存的划分 使用二级缓存&#xff0c;必须要具备的条件 一级缓存和二级缓存的使用顺序 二级缓存实现的选择 MyBatis自身提供的二级缓存的实现 二级缓存的作用 二级缓存的作用域 二级缓存应用场景…