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

C++构造函数和析构函数详解

一、构造函数

1、概念

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名叫做构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象

2、特征

  1. 函数名与类名相同。
  2. 无返回值
  3. 对象实例化时编译器自动调用对应的构造函数
  4. 构造函数可以重载
  5. 如果类中没有显示定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显示定义编译器将不再生成。

下面代码构造函数与缺省参数结合,非常实用!

#include<iostream>
using namespace std;
class date
{
private:int _year;int _month;int _day;
public://函数名与类名相同。无返回值date(int year = 2023, int month = 1, int day = 1){_year = year;_month = month;_day = day;}void Print(){cout << _year << '-' << _month << '-' << _day;}
};int main()
{date a;date _a(1, 2, 3);a.Print();return 0;
}


但此时如果把自己定义的构造函数删除,默认生成构造函数,但是不会自己初始化。

3、默认生成的构造函数,到底有什么用?

处理自定义(回去调用这个成员的默认构造函数),但对于内置类型不确定(看编译器),建议不处理。

比如上面是自定义类型,就会自己调用Stack的默认构造函数

默认构造函数的概念:

  1. 我们不写显示构造函数,编译器默认生成的构造函数,叫默认构造
  2. 无参构造函数也可以叫默认构造
  3. 全缺省也可以叫默认构造

小总结:

内置类型成员不做处理,自定义类型会去调用它的默认构造

所以对于内置类型,还是需要程序员自己去创建构造函数,而对于自定义类型,会自动调用这个成员的默认构造函数,其实还是自己创建的构造函数

  • 内置类型:int/double/……注意指针都是内置类型
  • 自定义类型:class/struct

其实上面的构造函数并不好,对于自定义类型和构造类型区别对待,在C++11中,会支持对内置类型的初始化,在private声明的时候进行初始化。支持声明时给缺省值

总结:

  1. 一般情况下,我们都要自己写构造函数
  2. 内置类型都不处理
  3. 成员都是自定义类型,或者声明时给了缺省值,可以考虑让编译器自己生成构造函数

可以不传参数就调用构造,都可以叫默认构造,这三个函数不能同时存在,只能存在一个

析构函数:

1、概念

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

2、特性

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

3、功能

对象销毁不需要析构函数,对象的销毁靠系统,更本质一点是函数栈帧的销毁,而析构函数的作用是处理动态开辟的空间,比如栈开辟的动态的空间。

我们如果不写析构函数,那系统自动默认生成的析构函数,不会把开辟的指针处理

默认生成析构函数,行为跟构造类似,内置类型成员不做处理,自定义类型成员会去调用他的析构

相关文章:

C++构造函数和析构函数详解

一、构造函数 1、概念 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名叫做构造&#xff0c;但是构造函数的主要任务并不是开空间创建对象&#xff0c;而是初始化对象。 2、特征 函数名与类名相同。无返回值对象实例化时编译器自动调用对应的…...

MySQL数据库干货_16—— SQL99标准中的查询

SQL99标准中的查询 MySQL5.7 支持部分的SQL99 标准。 SQL99中的交叉连接(CROSS JOIN) 示例&#xff1a; 使用交叉连接查询 employees 表与 departments 表。 select * from employees cross join departments;SQL99中的自然连接(NATURAL JOIN) 自然连接 连接只能发生在两…...

LLM大语言模型训练中常见的技术:微调与嵌入

微调&#xff08;Fine-Tuning&#xff09;&#xff1a; 微调是一种用于预训练语言模型的技术。在预训练阶段&#xff0c;语言模型&#xff08;如GPT-3.5&#xff09;通过大规模的文本数据集进行训练&#xff0c;从而学会了语言的语法、语义和世界知识。然后&#xff0c;在微调阶…...

每日一练 | 网络工程师软考真题Day47

阅读以下关于Linux文件系统和Samba效劳的说明&#xff0c;答复以下【问题1】至【问题3】。 【说明】 Linux系统采用了树型多级目录来管理文件&#xff0c;树型结构的最上层是根目录&#xff0c;其他的所有目录都是从根目录生成的。通过Samba可以实现基于Linux操作系统的效劳器和…...

Kafka - 监控工具 Kafka Eagle:实时洞察Kafka集群的利器

文章目录 引言Kafka Eagle简介Kafka Eagle的特点Kafka Eagle的优势使用Kafka Eagle的步骤结论 引言 在现代大数据架构中&#xff0c;Apache Kafka已成为一个不可或缺的组件&#xff0c;用于可靠地处理和传输大规模的数据流。然而&#xff0c;随着Kafka集群规模的不断增长&…...

infercnv hpc东南服务器 .libpath 最终使用monocle2环境安装

安装不成功就用conda安装 conda install -c bioconda bioconductor-infercnv Installing infercnv There are several options for installing inferCNV. Choose whichever you prefer: Option A: Install infercnv from BioConductor (preferred) From within R, run the…...

【音视频 | Ogg】RFC3533 :Ogg封装格式版本 0(The Ogg Encapsulation Format Version 0)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

Hadoop时代落幕,开源大数据将何去何从?

Hadoop时代落幕&#xff0c;谁是大数据的新宠儿&#xff1f; 1、 1、...

作为一名程序员面临哪些挑战?应该如何应对?

在现今互联网失业潮的大环境下&#xff0c;每一位程序员都面临着被淘汰的风险&#xff0c;但逃避没有用&#xff0c;今天我们就来总结这些挑战与风险&#xff0c;找准自己的方向与定位&#xff0c;做好职业规划&#xff0c;希望这些信息能对大家有所帮助。 一、面临的挑战 老…...

flink的安装与使用(ubuntu)

组件版本 虚拟机&#xff1a;ubuntu-20.04.6-live-server-amd64.iso flink&#xff1a;flink-1.18.0-bin-scala_2.12.tgz jdk&#xff1a;jdk-8u291-linux-x64.tar flink 下载 1、官网&#xff1a;https://flink.apache.org/downloads/ 2、清华镜像&#xff1a;https://mirr…...

容器:软件性能测试的最佳环境

容器总体上提供了一种经济的和可扩展的方法来测试产品在实际情况下的性能&#xff0c;同时还能保持较低的资源成本和开销成本。 软件性能和可伸缩性是我们谈论应用程序开发时经常遇到的话题。一个很大的原因是应用程序的性能和可伸缩性直接影响其在市场上的成功。一个应用程序…...

【Qt控件之QMovie】详解

Qt控件之QMovies 概述公共类型属性公共函数公共槽函数信号静态公共成员示例使用场景 概述 QMovie类是一个方便的类&#xff0c;用于播放具有QImageReader的动画。此类用于显示没有声音的简单动画。如果您想显示视频和媒体内容&#xff0c;请改用Qt多媒体框架Qt Multimedia mul…...

Star History 九月开源精选 |开源 GitHub Copilot 替代

虽然大火了近一年&#xff0c;但是截至目前 AI 唯一破圈的场景是帮助写代码&#xff08;谷歌云旗下的 DORA 年度报告也给 AI 泼了盆冷水&#xff09;。不过对于软件开发来说&#xff0c;生成式人工智能绝对已经是新的标配。 本期 Star History 收集了一些开源 GitHub Copilot …...

【Rabbit MQ】Rabbit MQ 消息的可靠性 —— 生产者和消费者消息的确认,消息的持久化以及消费失败的重试机制

文章目录 前言&#xff1a;消息的可靠性问题一、生产者消息的确认1.1 生产者确认机制1.2 实现生产者消息的确认1.3 验证生产者消息的确认 二、消息的持久化2.1 演示消息的丢失2.2 声明持久化的交换机和队列2.3 发送持久化的消息 三、消费者消息的确认3.1 配置消费者消息确认3.2…...

C++设计模式_25_Interpreter 解析器

Interpreter 解析器被归为“领域规则”模式。Interpreter模式比较适合简单的文法表示,应用场景是比较有限的,解决问题的思路和场景都是一样的。 文章目录 1. “领域规则”模式1.1 典型模式2. 动机( Motivation)3. 代码演示Interpreter 解析器模式4. 模式定义5. 结构( Structu…...

能源化工过程-故障诊断数据集初探-田纳西-伊斯曼过程数据集

1. 田纳西-伊斯曼过程(TE)数据集简介 整个TE数据集由训练集和测试集构成,TE集中的数据由22次不同的仿真运行数据构成,TE集中每个样本都有52个观测变量。d00.dat至d21.dat为训练集样本,d00_te.dat至d21_te.dat为测试集样本。d00.dat和d00_te.dat为正常工况下的样本。d00.d…...

【Linux】安装配置解决CentosMobaXterm的使用及Linux常用命令以及命令模式

目录 Centos的介绍 centos安装配置&MobaXterm 创建 安装 ​编辑 配置 ​编辑 MobaXterm使用 Linux常用命令&模式 常用命令 vi或vim编辑器 三种模式 命令模式 编辑模式 末行模式 拍照备份 Centos的介绍 CentOS&#xff08;Community Enterprise Op…...

一台服务器安装两个mysql、重置数据库用于测试使用

文章目录 一、切数据库数据存储文件夹已经存在数据库数据文件夹新建数据库数据文件夹 二、安装第二个mysql安装新数据库初始化数据库数据启动数据库关闭数据库 三、mysqld_multi单机多实例部署参考文档 一、切数据库数据存储文件夹 这个方法可以让你不用安装新的数据库&#x…...

JS动态转盘可手动设置份数与概率(详细介绍)

这个案例是我老师布置的一项作业&#xff0c;老师已详细讲解&#xff0c;本人分享给大家&#xff0c;详细为你们介绍如何实现。 我们转盘使用线段来实现 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title>&l…...

在k8s中,etcd有什么作用?

在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;etcd 是一个关键的组件&#xff0c;它扮演着集群状态存储的角色&#xff0c;具有以下作用&#xff1a; 分布式键值存储&#xff1a;etcd 是一个分布式键值存储系统&#xff0c;用于存储整个 Kubernetes 集群的配置信息、…...

AI大模型大师:2026年AI技术全景,从入门到精通的完整学习指南!人工智能领域大模型学习路径

人工智能领域大模型学习路径 一、基础阶段&#xff1a;构建核心知识框架&#xff08;1-2个月&#xff09; 数学与编程基础 数学&#xff1a;掌握线性代数&#xff08;矩阵运算、特征值分解&#xff09;、概率论&#xff08;贝叶斯定理、分布函数&#xff09;、微积分&#x…...

OpenClaw学习路径:从Phi-3-mini-128k-instruct对接到复杂自动化编排

OpenClaw学习路径&#xff1a;从Phi-3-mini-128k-instruct对接到复杂自动化编排 1. 为什么选择OpenClawPhi-3-mini组合 去年我在整理学术文献时&#xff0c;每天要花3小时重复操作&#xff1a;下载PDF→提取关键段落→归类到不同主题文件夹→生成摘要。直到发现OpenClaw这个能…...

U8/修改采购入库单辅计量单位

SELECT cAssUnit,Inventory.cSTComUnitCode,* --UPDATE rdrecords01 SET cAssUnit Inventory.cSTComUnitCode FROM rdrecords01 LEFT JOIN Inventory ON rdrecords01.cInvCode Inventory.cInvCode...

WPF新手村教程(七)—— 终章(MVVM架构初见杀)

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时&#xff0c;输出结果中包含大量由集群自动生成的元数据&#xff08;如 managedFields、resourceVersion、uid 等&#xff09;。这些信息在实际复用 yaml 清单时需要手动清理&#xff0c;增加了额外的工作量。 使用 ku…...

DeFi(去中心化金融)核心概念

**DeFi&#xff1a;重塑金融未来的去中心化革命** 在传统金融体系中&#xff0c;银行、交易所等中介机构掌控着资金流动与金融服务。随着区块链技术的崛起&#xff0c;一种全新的金融模式——去中心化金融&#xff08;DeFi&#xff09;正在颠覆这一格局。DeFi通过智能合约和去…...

NVIDIA Profile Inspector配置问题全方位解决方案

NVIDIA Profile Inspector配置问题全方位解决方案 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 问题定位&#xff1a;识别配置故障的关键信号 在使用NVIDIA Profile Inspector&#xff08;一款NVIDI…...

深入解析CyberpunkSaveEditor:赛博朋克2077存档编辑的终极指南

深入解析CyberpunkSaveEditor&#xff1a;赛博朋克2077存档编辑的终极指南 【免费下载链接】CyberpunkSaveEditor A tool to edit Cyberpunk 2077 sav.dat files 项目地址: https://gitcode.com/gh_mirrors/cy/CyberpunkSaveEditor 想要彻底掌控《赛博朋克2077》的游戏体…...

新手零代码入门:用快马ai一键生成vmware虚拟机图文安装教程

新手零代码入门&#xff1a;用快马AI一键生成VMware虚拟机图文安装教程 最近在学网络安全和Linux系统&#xff0c;第一步就是要搭建虚拟机环境。作为完全没接触过虚拟化技术的小白&#xff0c;我原本以为安装VMware会很复杂&#xff0c;结果发现用InsCode(快马)平台的AI功能&a…...

备战蓝桥杯效率翻倍:用快马平台一键生成算法测试脚手架

最近在备战蓝桥杯&#xff0c;发现很多时间都花在了重复搭建测试环境和编写输入输出代码上。为了提高效率&#xff0c;我用InsCode(快马)平台做了一个通用算法测试脚手架&#xff0c;分享下这个能提升备赛效率的实用工具。 项目设计思路 这个脚手架的核心目标是减少重复劳动。蓝…...

创新流复用架构:OBS Multi RTMP插件技术方案与商业价值实现

创新流复用架构&#xff1a;OBS Multi RTMP插件技术方案与商业价值实现 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp OBS Multi RTMP插件通过创新的流复用架构&#xff0c;解决了多平…...