【C++类和对象中篇】(构造函数和析构函数)

news2024/9/19 10:46:56

🎁个人主页:我们的五年

🔍系列专栏:C++课程学习

🎉欢迎大家点赞👍评论📝收藏⭐文章

 

 

目录

 🍩1.默认成员函数的概念:

🍩2.构造函数:

2.1特性:

2.2编译器自己生成的构造函数:

🍩3.析构函数:

3.1概念:

3.2特性:


 

 前言:
在类和对象中篇,我们会讲解类的默认成员函数。类的默认成员函数总共有6个,但是最重要4个的是:构造函数,析构函数,拷贝构造函数,赋值运算符重载。本篇我们也是先来讲解前面两个函数:构造函数和析构函数。

 🍩1.默认成员函数的概念:

当我们定义一个类,而没有显式实现,编译器就会按照它自己的规则生成6个默认成员函数。如果显式实现了,那编译器就不会自己生成。

所以就是是一个空类,里面最起码也是有6个默认成员函数的。

//空类

class Data{

};

🍩2.构造函数:

2.1特性:

构造函数是特殊的函数,主要的任务不是开辟空间创建对象,而是初始化对象。

构造函数:

1.函数名和类名相同。

2.没有返回值。(不要写void)

3.实例化对象的时候,编译器自动调用。

4.构造函数可以重载。(无参时,不要写括号)

#include<iostream>
using namespace std;

class Data {
public:
	//没有返回值,名字与类名相同
	//没有返回值也不用写void
	Data() {
		cout << "Data()" << endl;
	}
	Data(int year, int month, int day) {
		cout << "Data(int year, int month, int day)" << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Data a;
	//Data a();   如果是无参的构造函数,不用写括号,写了()就变成函数声明了
	Data b(2024, 6, 10);
	return 0;
}

但是如果我们没有显式定义构造函数,编译器是会自动生成一个构造函数的。

2.2编译器自己生成的构造函数:

编译器自己生成的构造函数对内置类型(int  char int*)不做处理。其他的类,调用他们的构造函数。

下面的代码就是,我们定义一个Data,里面有其他的类A,那么实例化Data的时候,就回去调用A的构造函数

#include<iostream>
using namespace std;

class A {
public:
	A() {
		cout << "A()" << endl;
	}
};
class Data {

private:
	int _year;
	int _month;
	int _day;
	A a;
};
int main()
{
	Data a;
	return 0;
}

不管是内置类型,还是自定义类型。最终都是落到内置类型这一层面,所以如果成员类也没有写构造函数,那相当于所有的数据都没有进行舒适化。这样看来,好像编译器自己生成的构造函数一无是处。其实并不是这样的,如果我们定义的类里面的成员都是自定义类型,而且这些自定义类型我们都是自己写了显式构造函数的,那么我们就不要写构造函数,用编译器的就行。

#include<iostream>
using namespace std;
class A {
public:
	A() {
		_x = 1;
	}
private:
	int _x;
};
class Data {
private:
	A a;
	A b;
};
int main()
{
	Data a;
	return 0;
}
注意:C++11 中针对内置类型成员不初始化的缺陷,又打了补丁,即:内置类型成员变量在
类中声明时可以给默认值
#include<iostream>
using namespace std;
class Data {
private:
	int _year = 1900;
	int _month = 1;
	int _day = 1;
};
int main()
{
	Data a;
	return 0;
}

无参的构造函数,全缺省的构造函数,编译器自己生成的构造函数,都是默认构造函数。并且默认构造函数只能有一个,因为有多个,调用的时候就不知道去调用哪一个了。

🍩3.析构函数:

3.1概念:

上面的构造函数不是去创造对象,而是去完成对象的初始化。析构函数也不是去完成对象的销毁,而是去完成资源的清理。

3.2特性:

析构函数也是特殊的成员函数,所以与普通的函数还是有一定的区别的。

1.名称是在类的名称前面加上~。

2.没有返回值,也没有参数。

3.因为没有参数,所以不能去重载。

4.生命结束的时候,会自动调用其析构函数。如果没有显式实现的时候,编译器也是会去生成析构的函数的,默认的析构函数对内置类型不做处理,但是对自定义类型会去调用他们的自己的析构函数。如果有其他的资源,比如动态申请了内存,那么就要自己去写析构函数。

#include<iostream>
using namespace std;
class Time {
public:
	Time() {
		cout << "Time()" << endl;
	}
	~Time() {
		cout << "~Time()" << endl;
	}
};
class Data {
private:
	int _year = 1900;
	int _month = 1;
	int _day = 1;
	Time a;
};
int main()
{
	Data a;
	return 0;
}

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

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

相关文章

刚刚❗️德勤2025校招暑期实习测评笔试SHL测评题库已发(答案)

&#x1f4e3;德勤 2024暑期实习测评已发&#xff0c;正在申请的小伙伴看过来哦&#x1f440; ㊙️本次暑期实习优先考虑2025年本科及以上学历的毕业生&#xff0c;此次只有“审计及鉴定”“税务与商务咨询”两个部门开放了岗位~ ⚠️测评注意事项&#xff1a; &#x1f44…

字节面试:CPU100% 如何处理?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的线上问题的场景题&#xff1a; 1.CPU100%&#xff0c;你是怎么处理的&…

写给大数据开发的,要给领导汇报什么?

上篇&#xff1a;写给大数据开发&#xff0c;如何去掌握数据分析 就像说经济学家不炒股一样&#xff0c;有些数据开发不喜欢讲数据&#x1f4ca;&#xff0c;就很离谱…自己不讲数据&#xff0c;不相信数据&#xff0c;别人也不敢用了&#xff5e; 所以找上级汇报&#xff0…

【上海大学计算机组成原理实验报告】七、程序转移机制

一、实验目的 学习实现程序转移的硬件机制。 掌握堆栈寄存器的使用。 二、实验原理 根据实验指导书的相关内容&#xff0c;实验箱系统的程序转移硬件机制在于&#xff0c;当LDPC有效时&#xff0c;如果此时DUBS上的值就是转移的目标地址&#xff0c;则此目标地址被打入PC&am…

LabVIEW电池测试系统

1. 背景 随着电动汽车、可再生能源等领域的迅速发展&#xff0c;电池作为能源储存和释放的核心组件&#xff0c;其性能评估变得尤为重要。电池的充放电性能、容量、循环寿命等参数直接影响着设备的工作性能和使用寿命。因此&#xff0c;设计一套全面、准确的电池测试系统对于提…

王学岗鸿蒙开发(北向)——————(十)子组件修改父组件的内容与 动画

子组件修改父组件的内容 使用类似Android的回调&#xff0c;父组件传递给子组件一个函数 import { MyComment } from ./component/MyComment import { MyContent } from ./component/MyComtent import { MyTitleComponent } from ./component/MyTitleComponentEntry Componen…

安卓逆向经典案例——XX牛

安卓逆向经典案例——XX牛 按钮绑定方式 1.抓包 2.查看界面元素&#xff0c;找到控件id 通过抓包&#xff0c;发现点击登录后&#xff0c;才会出现Encrpt加密信息&#xff0c;所以我们通过控件找到对应id&#xff1a;btn_login 按钮绑定方法——第四种 public class LoginA…

把文件从一台linux机器上传到另一台linux机器上

文章目录 1&#xff0c;第一种情况1.1 先测试2台机器是否可以互相通信1.2 对整个文件夹里面的所有内容进行传输的命令1.3 检查结果 2&#xff0c;第二种情况2.1&#xff0c;单个文件传输的命令 1&#xff0c;第一种情况 我这里有2台linux机器&#xff0c; 机器A&#xff1a;19…

uni-app uni-swipe-action 滑动操作状态恢复

按照uni-app官方文档的写法 当前同一条滑动确认之后 页面列表刷新 但是滑动的状态还在 入下图所示&#xff1a; 我们需要在滑动确认之后 页面刷新 滑动状态恢复 那么我们就来写一下这部分的逻辑&#xff1a; 首先&#xff0c;配置一下:show"isOpened[item.id]" chan…

基于JSP的医院远程诊断系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; JSP Servlet JSPBean 工具&#xff1a; IDEA/Eclipse、Navica…

ChatTTS - 用于对话场景的文本转语音

大家好&#xff0c;我是小麦&#xff0c;今天给大家分享一款免费&#xff0c;可用于对话场景的文本转语音工具。 阅读感悟 不知道大家在日常的学习、工作中是否有这样的一个情况&#xff0c;当我们阅读完一篇文章&#xff0c;很快就能读完&#xff0c;但印象不会很深&#xf…

Python学习打卡:day01

day1 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 1、Python 软件&#xff08;PyCharm&#xff09; 安装&#xff1a;在 Linux 环境下安装 Pycharm 插件&#xff1a;汉化、翻译 设置字体大小 常用快捷…

Django ListView 列表视图类

ListView是Django的通用视图之一&#xff0c;它用于显示一个对象列表。这个视图将所有的对象作为一个上下文变量传递给模板。 1&#xff0c;创建应用 python manage.py startapp app3 2&#xff0c;注册应用 Test/Test/settings.py Test/Test/urls.py 3&#xff0c;添加模型 …

车联网安全入门——CAN总线模糊测试

文章目录 车联网安全入门——CAN总线模糊测试介绍主要特点使用场景 模糊测试&#xff08;Fuzz Testing&#xff09;CAN 总线模糊测试&#xff08;CAN Packet Fuzzing&#xff09;主要步骤工具和软件主要目标 Can-Hax安装使用获得指纹模糊测试 SavvyCAN 总结参考 车联网安全入门…

深入理解 C++ 智能指针

文章目录 一、引言二、 原始指针的问题1、原始指针的问题2、智能指针如何解决这些问题 三、智能指针的类型四、std::shared_ptr1、shared_ptr使用2、shared_ptr的使用注意事项3、定制删除器4、shared_ptr的优缺点5、shared_ptr的模拟实现 五、std::unique_ptr1、unique_ptr的使…

端午节到了,祝大家粽子甜甜,生活美满!愿粉丝们心想事成,健康平安,阖家幸福!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

java+Vue +Spring boot技术开发的UWB高精度定位技术系统源码 uwb定位系统+基站定位

javaVue Spring boot技术开发的UWB高精度定位技术系统源码 uwb定位系统基站定位 系统采用UWB高精度定位技术&#xff0c;可实现厘米级别定位。UWB作为一种高速率、低功耗、高容量的新兴无线局域定位技术&#xff0c;目前应用主要聚焦在室内高精确定位&#xff0c;例如在工业自动…

ABAP - SAP与企业微信集成

最近接到一个SAP直接给企业微信推送消息的需求&#xff0c;说实话之前一直没接触过&#xff0c;脑袋空空的&#xff0c;最终通过在百度搜索案例成功解决了&#xff0c;百度虽然一直被诟病&#xff0c;但却无法否认它的神奇。实现效果 实现思路&#xff1a;从需求出发&#xff0…

游戏服务器工程实践一:百万级同时在线的全区全服游戏

我应该有资格写这篇文章&#xff0c;因为亲手设计过可以支撑百万级同时在线的全区全服类型的游戏服务器架构。 若干年前我在某公司任职时&#xff0c;参与研发过一款休闲类型的游戏&#xff0c;由 penguin 厂独代。研发的时候&#xff0c;p 厂要求我们的游戏服务器要能支撑百万…

IO进程线程(十一)进程间通信 消息队列

文章目录 一、IPC(Inter-Process Communication)进程间通信相关命令 &#xff1a;&#xff08;一&#xff09;ipcs --- 查看IPC对象&#xff08;二&#xff09;获取IPC键值&#xff08;三&#xff09;删除IPC对象的命令&#xff08;四&#xff09;获取IPC键值的函数1. 函数定义…