C++:构造函数与析构函数

目录

构造函数

构造函数的概念

析构函数的作用

自定义构造函数与默认构造函数

自定义构造函数

默认构造函数

调用自定义构造函数

析构函

自定义析构函数和默认构造函数

自定义构造函数

默认析构函数


构造函数

构造函数的概念

我们通常的函数是都需要有返回值的,但是有这样一类函数不需要返回值,而且函数名必须与类名相同(类中的特有的函数),这就是构造函数。

析构函数的作用

由于我们使用类时,通常会忘记进行对成员变量进行初始化,这个问题时常困扰着祖师爷,所以构造函数应运而生,构造函数在类中承担着初始化成员变量的作用;

自定义构造函数与默认构造函数

自定义构造函数

我以日期类举例子,看招:

#include<iostream>
using namespace std;
class data
{
public:
	data()//构造函数
	{
		_year = 1;
		_month = 1;
		_day = 1;
	}
private:
	int _year;
	int _month;
	int _day;
};

一为函数名与类名相同,二为函数没有返回值,三在类中,三者俱全,是为构造函数。构造函数对成员变量进行初始化。
什么?没有传参怎么访问成员变量?在类中成员变量就相当于类中的全局变量,在类中函数访问成员变量不需要传参;

默认构造函数

自定义构造函数是我们自己定义的,但有时候我们甚至连构造函数都忘了写,这时不用着急,在C++中编译器会自动在类中产生一个构造函数,称为默认构造函数;
默认构造函数会自动产生并调用,操作对象是所有的成员变量,但是默认构造函数初始化的值与编译器有关,不同的编译器会有不同的随机值;所有成员变量初始化的是同一个随机值;
这时VS2022调用默认构造函数初始化的值:
VS自动初始化为了0,但是在其他别人的编译器上可能是其他的数;

调用自定义构造函数

构造函数在调用时是无法使用,成员访问符来调用的,与此不同,看代码:

#include<iostream>
using namespace std;
class date
{
public:
	date(int a=1, int b=2)
	{
		_a = a;
		_b = b;
	}
	void print()
	{
		cout << _a << " " << _b << endl;
	}
private:
	int _a;
	int _b;
}s;
int main()
{
	date s1(5,66);
	s1.print();
	return 0;
}

对构造函数进行缺省处理,会自动初始化为默认值,同时我们也可以方便的给出初始化值,像date s1()这样。
需要注意的是,如果自己写了构造函数,编译器就不会自动生成了,像这样:

#include<iostream>
using namespace std;
class date
{
public:
	date(int a, int b)
	{
		_a = a;
		_b = b;
	}
	void print()
	{
		cout << _a << " " << _b << endl;
	}
private:
	int _a;
	int _b;
}s;
int main()
{
	date s1(5,6);
	s1.print();
	return 0;
}

构造函数没有全缺省,那么我们就必须在定义s1时进行手动初始化,否则会报错。 

析构函

析构函数与构造函数的作用是相反的,析构函数是用来对部分的成员变量进行清理的;例如我们在类中有成员变量在堆区开辟了空间,我们如果忘记最后进行delete,那么就会造成内存泄漏。析构函数就解决了这个问题;

自定义析构函数和默认构造函数

自定义构造函数

下来写个构造函数叭,一看便知:

#include<iostream>
using namespace std;
class data
{
public:
	~data()
	{
		cout << "~data()" << endl;
	}
private:
	int* a;
	int b;
	int c;
}s;

int main()
{}

析构函数与构造函数差不多,在函数名上有所区别,析构函数的名字必须是~类名,如上的~data,没有返回值,在类结束时会自动调用;通常进行释放在堆区的成员变量; 

默认析构函数

与默认构造函数一家,都是因遗忘而诞生的,类中必有析构函数,你不写,编译器自己写,对部分成员进行清理。


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

共享单车数据分析与需求预测项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 项目背景 自动自行车共享系统是传统自行车租赁的新一代&#xff0c;整个会员、租赁和归还过程都变得自动化。通过这些系统&#xff0c;用户可以…

Jupyter的下载与安装

1.下载&#xff1a; 在anaconda的指定环境中 conda install nb_conda_kernels 2.打开 在anaconda指定环境中使用命令&#xff1a; jupyter notebook 3.输入指令后&#xff0c;会显示如下&#xff0c;根据显示地址打开 3. 在右边的new按钮处&#xff0c;选择相应环境&…

DTU如何用VPN

在工业物联网的应用中&#xff0c;数据传输单元&#xff08;DTU&#xff09;作为关键的通信设备&#xff0c;承担着现场设备与远程服务器之间的数据传输任务。然而&#xff0c;在某些情况下&#xff0c;由于网络环境的限制或安全需求&#xff0c;我们需要通过虚拟私人网络&…

SpringCloud系列(13)--Eureka服务名称修改和服务IP显示

前言&#xff1a;在上一章节中我们把服务提供者做成了集群&#xff0c;而本章节则是一些关于服务信息的配置&#xff0c;这部分知识对集群整体影响不大&#xff0c;不过最好还是掌握&#xff0c;毕竟万一有用到的地方呢 1、修改服务的名称 有时候我们想要修改服务的名称&#…

【深度学习】DDoS-Detection-Challenge aitrans2024 入侵检测,基于机器学习(深度学习)判断网络入侵

当了次教练&#xff0c;做了个比赛的Stage1&#xff0c;https://github.com/AItransCompetition/DDoS-Detection-Challenge&#xff0c;得了100分。 一些记录&#xff1a; 1、提交的flowid不能重复&#xff0c;提交的是非入侵的数量和数据flowid,看check.cpp可知。 2、Stage…

redis底层数据结构之ziplist

目录 一、概述二、ziplist结构三、Entry结构四、为什么ZipList特别省内存五、ziplist的缺点 redis底层数据结构已完结&#x1f44f;&#x1f44f;&#x1f44f;&#xff1a; ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️red…

Docker的资源控制管理——Cgroups

目录 引言&#xff1a; 一、CPU资源控制 1、简介 2、cgroup的四大功能&#xff1a; ①资源限制&#xff1a; ②优先级分配&#xff1a; ③资源统计&#xff1a; ④任务控制&#xff1a; 3、设置cpu使用率上限 4、查看CPU默认配置&#xff1a; 5、CPU压力测试 6、设…

H264编码标准中游程编码应用介绍

H264编码标准 H.264编码标准&#xff0c;也被称作MPEG-4 AVC&#xff08;Advanced Video Coding&#xff09;&#xff0c;是一种被广泛使用的数字视频压缩标准。它由国际电信联盟&#xff08;ITU-T&#xff09;和国际标准化组织&#xff08;ISO&#xff09;共同开发&#xff0…

C++核心编程——4.5 运算符重载

4.5.0 运算符重载概念 对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 4.5.1 加号运算符重载 作用&#xff1a;实现两个自定义数据类型相加的运算 class Person { public:Person() {};Person(int a, int b){this->m_A a;this…

Bayes判别:统计学中的经典分类方法

在统计和机器学习领域&#xff0c;Bayes判别是一个基于概率理论的强大工具&#xff0c;用于解决分类问题。它基于Bayes定理&#xff0c;通过计算和比较后验概率来进行决策。这种方法在处理不确定性和不完整数据时表现尤为出色&#xff0c;因此在医学诊断、邮件过滤、语音识别等…

《十》Qt各种对话框之QFontDialog

QFontDialog 在介绍 QFontDialog 对话框之前&#xff0c;我们先简单介绍一下 QFont 字体类。QFont 主要用于控制文本显示的字体&#xff0c;字体主要有四大属性&#xff1a;①字体家族 family 决定字体外观家族&#xff0c;比如宋体、楷体等&#xff1b; ②字号 pointSize &am…

css文字和span在一行对不齐

1.需求背景 父盒子中有两个span&#xff0c;但是span中的文字对不齐。如下图&#xff0c;明显右边的文字偏高 处理后的效果&#xff08;已经对齐&#xff0c;图中标记的是基本的div结构&#xff09;&#xff1a; 2.该问题出现的原因&#xff1a; span1设置的高度比span2内…

thsi指针用法总结

1 c类对象中的变量和函数是分开存储的 2 所以对象共用一份成员函数&#xff0c;类的大小是指非静态的成员变量&#xff1b; this 完成链式操作 const 修饰成员函数

【Java 解析全国详细地址】Java 利用正则表达式完美解析全国省市区地址

这里写自定义目录标题 Java使用正则解析省市区/县 具体地址问题场景上demo运行结果 Java使用正则解析省市区/县 具体地址 问题场景 OCR识别营业执照 获取详细地址并拆分 上demo import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import j…

使用API有效率地管理Dynadot域名,自查账户信息

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

日本岛津电子天平UW UX 系列series 精密电子天平Shimadzu使用说明

日本岛津电子天平UW UX 系列series 精密电子天平Shimadzu使用说明

2024春季春日主题活动策划方案

2024解冻派对“春日浪漫”主题活动策划方案-32P 方案页码&#xff1a;32页 文件格式&#xff1a;pptx 方案简介&#xff1a; 春来一季&#xff0c;新生欢喜 花香丨微风丨阳光 活动唤起【春日浪漫记忆】&#xff01; 年轻人不一样的派对活动 可以与朋友/小朋友/家人互动…

MT3030 天梯赛

跟MT3029战神小码哥类似&#xff0c;都是贪心堆。注意开long long 这里的堆顶为战斗力最小的&#xff0c;便于贪心的反悔操作。先按容忍度从大到小排序&#xff08;q中总容忍度取决于最小的容忍度&#xff09;&#xff0c;再向q中存数&#xff0c;存到不能容忍之后再把堆顶踢出…

最简单也最复杂的德语动词,柯桥德语培训

德语人一定遇到过这个难题&#xff1a;ie组合到底发什么音&#xff1f; 说起haben&#xff0c;大家可能第一感觉是“这么简单的动词也要讲&#xff1f;不就是‘拥有’的意思吗&#xff1f;” 没错&#xff0c;haben的基本含义是“拥有&#xff0c;包含”&#xff0c;但是在某些…

Vue3后台管理系统推荐

目录 项目概述 &#x1f35f; 项目展示 功能特点 &#x1f957; 结语 &#x1f4a8; 项目概述 &#x1f35f; 基于Vue 3框架与Element-Plus UI组件库技术精心构建的后端管理模板。该模板系统已成功实现一个基础的权限管理模块&#xff0c;宗旨在于为追求高效二次开发的开发…