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

🎁个人主页:我们的五年

🔍系列专栏: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://没有返回值,名字与类名相同//没有返回值也不用写voidData() {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.mzph.cn/bicheng/25715.shtml

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

相关文章

从零开始理解AdaBoost算法:设计思路与算法流程(二)【权值更新与加权表决、数学公式】

设计思路 AdaBoost算法属于Boosting算法家族中的一种&#xff0c;其基本思路是将多个弱分类器组合成一个强分类器。 “强分类器”是指一个分类准确率较高的模型“弱分类器”则是指分类准确率略高于随机猜测的简单模型。 AdaBoost的核心思想是通过 加权 的方式逐步提高分类器…

黑马es学习

es 0. 基础概念0.1 倒排索引0.2 文档、索引0.3 与mysql对比 1 基本操作1.1 mapping 索引库操作1.2 单个文档CRUD 3. DSL查询3.1 查询所有3.2 全文检索3.3 精确查询3.4 复合查询-相关性得分3.5 分页3.6 高亮3.7 总结 2. RestClientmysql与es数据同步es集群去重 黑马视频 官方使…

Docker:利用Docker搭建一个nginx服务

文章目录 搭建一个nginx服务认识nginx服务Web服务器反向代理服务器高性能特点 安装nginx启动nginx停止nginx查找nginx镜像拉取nginx镜像&#xff0c;启动nginx站点其他方式拉取nginx镜像信息通过 DIGEST 拉取镜像 搭建一个nginx服务 首先先认识一下nginx服务&#xff1a; NGI…

04-认识微服务-SpringCloud

04-认识微服务-SpringCloud 1.SpringCloud&#xff1a; 1.SpringCloud是目前国内使用最广泛的微服务框架。官网地址&#xff1a;https://spring.io/projects/spring-cloud 2.SpringCloud集成了各种微服务功能组件&#xff0c;并基于SpringBoot实现了这些组件的自动装配&…

SpringCloud-面试篇(二十四)

&#xff08;1&#xff09;Nacos如何支撑数十万服务注册的压力 小型企业来讲nacos压力没有那么大&#xff0c;但是想阿里&#xff0c;服务的数量可能会达到数万&#xff0c;那麽多的服务。当服务原来越多时&#xff0c;除了服务注册以外&#xff0c;还有服务的定时更新&#x…

自养号测评防关联的关键点解析, 确保店铺权重和买家账号的安全稳定

现在很多大卖都是自己管理几百个账号&#xff0c;交给服务商不是特别靠谱。你不知道服务商账号质量怎么样&#xff0c;账号一天下了多少你也不清楚&#xff0c;如果下了很多单万一封号被关联了怎么办&#xff0c;你也不知道服务商用什么卡给你下单&#xff0c;用一些低汇率和黑…

一个简单好用的 C# Easing Animation 缓动动画类库

文章目录 1.类库说明2.使用步骤2.1 创建一个Windows Form 项目2.2 安装类库2.3 编码2.4 效果 3. 扩展方法3.1 MoveTo 动画3.2 使用回调函数的Color动画3.3 属性动画3.4 自定义缓动函数 4.该库支持的内置缓动函数5.代码下载 1.类库说明 App.Animations 类库是一个很精炼、好用的…

Django ORM的QuerySet:解锁数据库交互的魔法钥匙

用到此篇文章知识的几篇文章&#xff1a; Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django API开发实战&#xff1a;前后端分离、Restful风格与DRF序列化器详解 文章目录 前言一、什么是QuerySet&#xff1f;二、QuerySet 的用途三…

Dell服务器根据GPU温度调整风扇转速

前言 dell服务器自动风扇是根据CPU温度来调速的&#xff0c;我跑AI的时候cpu温度不高但是GPU温度很高导致显卡卡死PVE虚拟机直接挂起无法运行&#xff0c;我看了下也没有基于显卡温度调速的脚本&#xff0c;于是我就自己写了一个 基于ipmi工具 乌班图等linux先安装ipmi apt …

搭建vauditdemo靶场mysql为NO问题

一、问题 在搭建vauditdemo时&#xff0c;遇到如下显示问题&#xff1a; mysql版本检测为NO 二、解决 查找该方面问题时&#xff0c;并没有找到解决方法 然后换mysql版本换了五六个也没有解决问题 问了AI后给的答复有一条为将mysql改为mysqli 修改保存后解决问题 步骤如…

二分【1】二分查找框架 查找指定元素

目录 二分查找 基本思想 几种情况汇总 一。严格递增序列 1.查找本身 2.查找第一个大于等于自己的 3.查找第一个大于自己的 4.严格递减序列 二。有重复元素 1.取其中第一个出现的 2.取其中最后一个出现的 二分查找 基本思想 几种情况汇总 一。严格递增序列 1.查找本身…

作业-day-240607

思维导图 C编程 要求&#xff1a; 搭建一个货币的场景&#xff0c;创建一个名为 RMB 的类&#xff0c;该类具有整型私有成员变量 yuan&#xff08;元&#xff09;、jiao&#xff08;角&#xff09;和 fen&#xff08;分&#xff09;&#xff0c;并且具有以下功能&#xff1a;…

模板显式、隐式实例化和(偏)特化、具体化的详细分析

最近看了<The C Programing Language>看到了模板的特化&#xff0c;突然想起来<C Primer>上说的显式具体化、隐式具体化、特化、偏特化、具体化等概念弄得头晕脑胀&#xff0c;我在网上了找了好多帖子&#xff0c;才把概念给理清楚。 看着这么多叫法&#xff0c;其…

上位机图像处理和嵌入式模块部署(f407 mcu vs h750)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在目前工业控制上面&#xff0c;f103和f407是用的最多的两种stm32 mcu。前者频率低一点&#xff0c;功能少一点&#xff0c;一般用在低端的嵌入式设…

C语言详解(文件操作)1

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

通过在idea上搭建虚拟hadoop环境使用MapReduce做词频去重

idea上的MapReduce ​ 一般在开发中&#xff0c;若是等到环境搭配好了再进行测试或者统计数据&#xff0c;数据处理等操作&#xff0c;那会很耽误时间&#xff0c;所以一般都是2头跑&#xff0c;1波人去在客户机上搭建环境&#xff0c;1波人通过在idea上搭建虚拟hadoop环境&am…

Vue3父组件如何访问子组件属性和方法

本篇内容主要是父组件如何访问子组件的属性和方法 文章目录 子组件 //son.vue代码const list (info) >{console.log(info) }const name ref("XXXX")//子组件向父组件暴露了一个方法&#xff0c;然后父组件就可以去使用子组件里面的一些属性和方法了 //子组件向…

奇安信停服,国内还有什么可用的高防么?

这里写自定义目录标题 背景DDOS怎么办&#xff1f;方案推荐总结 背景 继前段时间百度云加速通知免费服务&#xff0c;6月底奇安信也将停止服务&#xff0c;到时候国内将几乎不存在免费好用的高防CDN了&#xff1b;类似的事情还有阿里云和腾讯云的一年期免费SSl证书也都停止供应…

C++:SLT容器-->deque

C:SLT容器-->deque 1. 构造函数2. deque 赋值操作3. deque 大小操作4. deque 插入和删除5. deque 容器数据存取6. deque 排序操作 双端数组&#xff0c;可以对头部和尾部进行插入删除操作 需要导入头文件#include <deque> 1. 构造函数 deque deqT; // 默认构造函数 de…

vue-2 组件传值

组件关系分类 父子关系非父子关系 父子通信流程 父组件通过props将数据传递给子组件 给子组件以添加属性的方式传值子组件内部通过 props 接收模板中直接使用 props 接收的值 父组件 Parent.vue <template><div class"parent" style"border: 3px s…