c++ 构造函数与析构函数(详解)

news2024/11/18 21:50:50

目录

目录:

        1:构造函数

        2:析构函数


        前言:我们知道c++使用起来是比c语言方便的,那么为啥比他使用起来简单,这里我们就不得不提及我们c++中默认成员函数了,是它们默默的承担了所有。

        下面让我们先来学习前两个默认成员函数:构造函数与析构函数

       1:构造函数

         构造函数并不是来开辟空间创建对象的函数,而是用来对对象进行初始化的函数,它的作用类似于我们平常所使用的Init函数

        首先我们先来介绍构造函数的定义,然后在深入细节。

        1:函数名与类名相同。

        2:无返回值(并不是前面加void)。

        3:对象实例化时编译器会自动调用对应的构造函数。

        4:构造函数可以形成函数重载。

        5:当我们没有定义构造函数的时候,c++编译器会自动生成一个无参的默认构造函数,这个默认成员函数并没有什么实际的作用,但是当我们定义了构造函数编译器就不会生成默认构造函数了。

        6:编译器生成的默认构造函数并不只是编译器生成的那么简单,c++对于类型有两种分类,一种是内置类型,一种是自定义类型,当我们使用自定义类型去定义成员变量的时候,编译器会自动调用该对象的默认构造函数,而对于内置类型(int char 指针)编译器并不会处理,但是关于内置类型c++11打了一个补丁,可以给内置类型使用缺省值的语法。

        7:对于默认构造函数其实并不是只有编译器默认生成的,还有全缺省参数,无参的构造函数,总的来说就是:只要构造函数没有形参,那么就可以把他当成默认成员函数,他们三种构造函数只能存在一种函数。

        下面我们来通过代码与画图来分析上面的定义:

        我们先通过Date类来介绍构造函数的定义,以及使用时要注意的点。

        先上一个简单的代码

       

class Date
{
public:
	Date()
	{
		cout << "Date函数的构造函数" << endl;
		_year = 2023;
		_month = 10;
		_day = 27;
	}

private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1;//实例化出对象,并开辟空间

	return 0;
}

        从这个例子中我们也能证明语法1,2,3的存在。当对象实例化的时候编译器会自动调用成员函数,不需要人为的去调用。

        这是我们定义的默认成员函数,那么当我们没写的时候编译器会生成什么样的默认成员函数呢?

        语法5:

        接下来我们来看看语法4函数的证明:

        

        在这里我们需要注意的是,当构成函数重载时,默认的构造函数只能出现一种,并且在使用默认构造函数的时候我们需要注意的是,当我们想要使用具有形参的构造函数的时候,我们应该按照如下图所示的样例来调用此需要传实参的默认构造函数。

        

        语法7的样例  只能出现一种默认的构造函数,并且编译器所形成的默认构造函数,是当我们没有定义构造函数时才会出现的。

        

        接下来我们来学一学有点绕的第6个语法。

        对于自定义类型来说,编译器会去调用它的默认构造,自定义类型编译器并不会做什么实际的操作。

        

        到这里我们就将我们的构造函数给讲解完毕了,我们首先需要知道如何定义构造函数,并且知道一些想应的规则。

        下面让我们来讲解另外一个重要的函数,析构函数。

   2:析构函数

         析构函数与构造函数的功能相反,其实与我们在c语言中使用的Destroy函数的用法一样,在对象作用域销毁的时候会自动调用析构函数,是完成对对象中资源进行清理工作

        语法定义:

        1:函数名与类名相同并且在函数名前面加~(取反)符号,也说明了与构造函数相反。

        2:无返回值类型,无函数的形参.

        3:对象在销毁时编译器会自动调用它的析构函数。

        4:不能构成函数的重载.

        5:当我们没有定义析构函数的时候编译器会自动形成一个析构函数同样这个析构函数并不会起到什么作用。

        6:对于自定义类型来说当对象销毁的时候,自定义类型的变量会自动调用它的析构函数,对于内置类型成员并不会做什么处理。

        下面我们通过代码来讲解语法的意思:

        语法1

        

        语法2不能有函数的形参,如果有语法会报错

        

        又因为析构函数没有形参,所有它也就没有函数重载的特性。

                当对象销毁时,编译器会自动调用它的析构函数。

        如下图

        

        我们自己并没有去调用。

        对于自定义类型的对象,默认情况下会调用它的析构函数,还是使用MyQueue这个类。

        

        讲到这里我们的析构函数的语法也就讲解完毕了,感谢大家的耐心观看,如果博主有什么错误的地方希望大家指点。

        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript基础知识18——逻辑运算符之短路运算

哈喽&#xff0c;大家好&#xff0c;我是雷工。 本节学习JavaScript基础知识——逻辑运算符中的短路运算&#xff0c;以下为学习笔记。 规则&#xff1a; 1、如果是&&运算&#xff0c;只要遇到false&#xff0c;就立即短路&#xff0c;不会再执行了&#xff0c;直接返回…

在声明和定义的一些小坑

1、静态成员变量的初始化 静态成员变量声明在 .h 头文件文件中&#xff0c;初始化应该在 .cpp 源文件中 就会出现"找到一个或多个多重定义的符号",下面的错误 class MyString{public:typedef char* iterator;typedef const char* const_iterator;iterator begin();…

复古风再现:探索70年代风格的室内设计在当今的复兴之路

20 世纪 70 年代的室内设计趋势正在卷土重来。大地色调、有趣的多色概念&#xff0c;以及低矮的软家具&#xff0c;都是当前的流行趋势。今年 2 月&#xff0c;许多室内设计师也表达了类似的观点&#xff0c;他们都在追捧备受诟病的棕色。当时的设计风趣、性感&#xff0c;但又…

YOLO目标检测——红外车辆行人数据集【(含对应voc、coco和yolo三种格式标签+划分脚本+训练教程】

实际项目应用&#xff1a;智能驾驶、智能监控、军事应用监控通过红外传感器采集车辆和行人的红外图像&#xff0c;然后使用目标检测算法对图像进行处理和分析&#xff0c;以识别道路上的车辆和行人。数据集说明&#xff1a;&#xff0c;真实场景的高质量图片数据&#xff0c;数…

Win11安装ise14.7~不需要虚拟机了~

之前一直无法在win11上安装ise14.7&#xff0c;网上搜索也无果&#xff0c;所有一直vmware虚拟机使用。直到最近看了水木上jesce的回复&#xff0c;试了下果然可以直接安装使用的。 步骤如下即可&#xff1a; 1.安装时切勿勾选最后一项&#xff0c;Enable WebTalk to send so…

Stable DiffusionAI绘画作品展示

参考链接&#xff1a; https://chat.xutongbao.top/

C语言实现图形界面创建按钮

文章目录 其他章节创建按钮指定按钮显示的文本 按钮样式 其他章节 开始之前&#xff0c;需要学习以下章节&#xff1a; 创建窗口 窗口过程函数 创建按钮 要在窗口上显示一个按钮&#xff0c;我们可以在窗口过程函数中处理 WM_CREATE 消息&#xff0c;在该消息中创建按钮并设…

我是如何走上测试管理岗的

最近有小伙伴问了一个问题&#xff1a;他所在的测试团队规模比较大&#xff0c;有 50 多个人&#xff0c;分成了 4 ~ 5 个小组。这位同学觉得自己的技术能力在团队里应该属于比较不错的&#xff0c;但疑惑的是在几次组织架构调整中&#xff0c;直属领导一直没有让他来管理一个小…

优先级反转,优先级继承和优先级天花板协议

优先级反转 优先级反转是RTOS&#xff08;实时操作系统&#xff09;会遇到的一个问题&#xff0c;简单来说就是由于调度原因&#xff0c;让原本优先级较高的任务慢于优先级较低的任务完成&#xff0c;比如下面这种情况&#xff0c;任务1、2、3的优先级依次升高&#xff0c;其中…

Jetpack:019-Jetpack的导航二(传递数据)

文章目录 1. 知识回顾2. 使用方法2.1 通过参数传递数据2.2 获取参数中的数据2.3 共享导航控制器 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中导航相关的内容&#xff0c;本章回中 继续介绍导航相关的内容。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧…

注意力机制、Transformer模型、生成式模型、目标检测算法、图神经网络、强化学习、深度学习模型可解释性与可视化方法等详解

采用“理论讲解案例实战动手实操讨论互动”相结合的方式&#xff0c;抽丝剥茧、深入浅出讲解注意力机制、Transformer模型&#xff08;BERT、GPT-1/2/3/3.5/4、DETR、ViT、Swin Transformer等&#xff09;、生成式模型&#xff08;变分自编码器VAE、生成式对抗网络GAN、扩散模型…

Go学习第十二章——Go反射与TCP编程

Go反射与TCP编程 1 反射1.1 基本介绍1.2 快速入门1.3 注意事项和细节说明1.4 最佳实践 2 Tcp Socket编程2.1 基本介绍2.2 入门案例2.3 服务器监听2.4 服务器接受客户端消息 1 反射 1.1 基本介绍 **反射&#xff1a;**在编译时静态类型语言中实现动态特性的一种机制。 Go语言…

.NET 控制台NLog 使用

前言 我们需要一个日志Log去记录日常发生的信息&#xff0c;这样方便以后出现问题的时候回去找报错的日志 NLog NLog 是Log的.net 移植版本&#xff0c;.net 将很多别的已经成熟的第三方库进行了移植。 NLog使用 NLog 官网文档 NLog .net core 官方文档 NLog详细教程-2022/…

Python武器库开发-高级特性篇(七)

高级特性篇(七) 装饰器 装饰器是给现有的模块增添新的小功能&#xff0c;可以对原函数进行功能扩展&#xff0c;而且还不需要修改原函数的内容&#xff0c;也不需要修改原函数的调用。这也称为元编程&#xff0c;因为程序的一部分试图在编译时修改程序的另一部分。Python中的…

通达信涨停回马枪选股公式,涨停回调不破起涨点

在编写涨停回马枪选股公式之前&#xff0c;我们需要先深入了解如何编写涨停公式。在前面的文章《创业板、科创板也适用的通达信涨停指标公式怎么写&#xff1f;》中介绍了涨停指标公式的编写方法&#xff0c;然而这种方法偶尔还是会有漏网之鱼。因此借此机会&#xff0c;我们将…

【C++】多态 ② ( 面向对象中 “ 多态 “ 的真正需求 | 面向对象 “ 多态 “ 实现 - virtual 修饰函数 | 代码示例 )

文章目录 一、多态实现1、面向对象中 " 多态 " 的真正需求2、面向对象 " 多态 " 实现 - virtual 修饰函数 二、代码示例 - 多态实现1、代码示例2、执行结果 一、多态实现 1、面向对象中 " 多态 " 的真正需求 在上一篇博客 【C】多态 ① ( 类型兼…

2017-2022年中国地方ZF数据开放指数数据/历年开放数林指数数据集(省域指数、城市指数)

2017-2022年中国地方ZF数据开放指数数据/历年开放数林指数数据集&#xff08;省域指数、城市指数&#xff09; 1、时间&#xff1a;2017-2021年 2、指标&#xff1a;地方、准备度指数、准备度排名、平台层指数、平台层排名、数据层指数、数据层排名、利用层指数、利用层排名…

【Linux】部署单体项目以及前后端分离项目(项目部署)

一、简介 以下就是Linux部署单机项目和前后端分离项目的优缺点&#xff0c;希望对你有所帮助。 1、Linux部署单机项目&#xff1a; 优点&#xff1a; 简化了系统管理&#xff1a;由于所有服务都在同一台机器上运行&#xff0c;因此可以简化系统管理和维护。提高了性能&#x…

三大电商平台(淘宝/京东/阿里巴巴)封装商品详情API接口附代码实例|参数解析

接口的特点 Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔) Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化 Java接口中只能包含publi…

[PyTorch][chapter 58][强化学习-1]

前言&#xff1a; RL(Reinfocement Learning) 强化学习 是机器学习&#xff0c;深度学习一个重点。 后面20章将重点结合一些例子回顾一下经典的强化学习算法。 这里重点介绍一下机器学习中的强化学习算法&#xff0c;以及Gym 工具 目录&#xff1a; 简介 强化学习基本要素 …