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

C++初阶学习第四弹——类与对象(中)

  

目录

一.  类的默认成员函数

 二.六种默认成员函数

1、构造函数

1.1 构造函数的作用

1.2 特性

 1.3 默认构造函数

2、析构函数

2.1 析构函数的作用

2.2 析构函数的用法

3、拷贝构造函数

3.1 拷贝构造函数的作用

3.2 特征

3.3 默认拷贝构造函数

三.总结

类与对象(上):C++初阶学习第三弹——类与对象(上)-CSDN博客

一.  类的默认成员函数

如果一个类中什么成员都没有,简称为空类。而默认成员函数就是不用写,编译器会自动生成的函数。任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。

 二.六种默认成员函数

1、构造函数

1.1 构造函数的作用
class Date
{
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};
int main()
{Date a1;a1.Init(2023, 7, 26);Date a2;a2.Init(2024, 7,29 );return 0;
}

对于Date类,可以通过 Init 公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置 信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢? 

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证 每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。

1.2 特性

1. 函数名与类名相同。

2. 无返回值。

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

4. 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。

5.如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,

 构造函数的形式如下:

  class Date{public:// 1.无参构造函数Date(){}// 2.带参构造函数Date(int year, int month, int day){_year = year;
比特就业课
5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦
用户显式定义编译器将不再生成。_month = month;_day = day;}private:int _year;int _month;int _day;};void TestDate(){Date d1; // 调用无参构造函数Date d2(2015, 1, 1); // 调用带参的构造函数// 注意:如果通过无参构造函数创建对象时,对象后面不用跟括号,否则就成了函数声明// 以下代码的函数:声明了d3函数,该函数无参,返回一个日期类型的对象// warning C4930: “Date d3(void)”: 未调用原型函数(是否是有意用变量定义的?)Date d3();}

 1.3 默认构造函数

构造函数在类中实际上是可以自动生成的,当我们不去写默认构造函数时,它就会在类中自动生成,但我们需要注意的是,默认生成的构造函数是无参的,且它会初始化一个随机值

class Date
{
public:void Print(){cout << _year << "-" << _month << "-" << _day << endl;}
private:int _year;int _month;int _day;
};
int main()
{Date d1;d1.Print();return 0;
}

如下图:

2、析构函数

2.1 析构函数的作用

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

2.2 析构函数的用法

1. 析构函数名是在类名前加上字符 ~。:~类名()

2. 无参数无返回值类型。

3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构 函数不能重载

4. 对象生命周期结束时,C++编译系统系统自动调用析构函数。

 如下:

class Stack
{
public:Stack(int capacity=4)   //构造函数{_capacity = capacity;_arr = (int*)malloc(sizeof(int) * _capacity);_size = 0;}~Stack()              //析构函数{free(_arr);_arr = nullptr;_capacity = 0;_size = 0;}
private:int* _arr;int _capacity;int _size;
};
int main()
{Stack s();return 0;
}

对于上面那种需要申请资源的类类型,我们可以把析构函数写出来,对于并没有申请资源的类类型,我们可以不写析构函数,让编译器默认生成

3、拷贝构造函数

3.1 拷贝构造函数的作用

拷贝构造函数的作用就是将一个已经构造好的函数拷贝给另一个函数。

3.2 特征

拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错, 因为会引发无穷递归调用。

拷贝构造函数只有单个形参 ,该形参是对本 类类型对象的引用 ( 一般常用 const 修饰 ) ,在用 已存

在的类类型对象创建新对象时由编译器自动调用 。

class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}Date(const Date& d){_year = d._year;_month = d._month;_day = d._day;}
private:int _year;int _month;int _day;
};
int main()
{Date d1(2024, 7, 27);Date d2(d1);return 0;
}
3.3 默认拷贝构造函数

若未显式定义,编译器会生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按 字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。

注意:类中如果没有涉及资源申请时,拷贝构造函数是否写都可以;一旦涉及到资源申请 时,则拷贝构造函数是一定要写的,否则就是浅拷贝。

 

class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year;int _month;int _day;
};
int main()
{Date d1(2024, 7, 27);Date d2(d1);d2.Print();return 0;
}

 

三.总结

希望给大家带来一定的帮助,下节我会接着讲解关于类和对象—中阶的内容

感谢大佬们的支持

相关文章:

C++初阶学习第四弹——类与对象(中)

目录 一. 类的默认成员函数 二.六种默认成员函数 1、构造函数 1.1 构造函数的作用 1.2 特性 1.3 默认构造函数 2、析构函数 2.1 析构函数的作用 2.2 析构函数的用法 3、拷贝构造函数 3.1 拷贝构造函数的作用 3.2 特征 3.3 默认拷贝构造函数 三.总结 类与对象&…...

【计算机网络】期末实验答辩

注意事项&#xff1a; 1&#xff09;每位同学要在下面做过的实验列表中选取三个实验进行答辩准备&#xff0c;并将自己的姓名&#xff0c;学号以及三个实验序号填入共享文档"1&#xff08;2&#xff09;班答辩名单"中。 2&#xff09;在答辩当日每位同学由老师在表…...

一步步教你学会如何安装VMare虚拟机(流程参考图)

前言&#xff1a;一步步教你安装VMare虚拟机&#xff08;此版本为17.5。2版本&#xff09;。 1、安装 2、确认协议 3、选择位置存放 4、选择第二个 5、都不选。 6、都选提供便捷操作 7、点击许可证&#xff0c;将密钥输入&#xff08;可以在网络寻找自己版本的密钥&#xff…...

WebGoC题解(14) 151.(2017dloi小乙)第5题 巧克力甜度(sweet)

题目描述 妈妈买了n颗甜度不同的巧克力&#xff0c;规定小C只能吃最大甜度之和是S。 例如&#xff1a;有5颗巧克力&#xff0c;s6&#xff0c;每个的甜度分别为&#xff1a; 4 2 3 1 1&#xff0c;那么小C最多可以吃3颗。 请问你能帮小C计算一下最多能吃多少颗巧克力吗? 输入格…...

深入探索PHP框架:Symfony框架全面解析

1. 引言 在现代Web开发领域&#xff0c;PHP作为一种广泛使用的服务器端脚本语言&#xff0c;其框架的选择对于项目的成功至关重要。PHP框架不仅能够提高开发效率&#xff0c;还能确保代码的质量和可维护性。本文将深入探讨Symfony框架&#xff0c;这是一个功能强大且灵活的PHP…...

内卷的利与弊

“内卷”原指一类文化模式达到了某种最终的形态以后&#xff0c;既没有办法稳定下来&#xff0c;也没有办法转变为新的形态&#xff0c;而只能不断地在内部变得更加复杂的现象。经网络流传&#xff0c;很多大学生用其来指代非理性的内部竞争或“被自愿”竞争。现指同行间竞相付…...

用Java手写jvm之实现查找class

写在前面 完成类加载器加载class的三阶段&#xff0c;加载&#xff0c;解析&#xff0c;初始化中的加载&#x1f600;&#x1f600;&#x1f600; 源码 。 jvm想要运行class&#xff0c;是根据类全限定名称来从特定的位置基于类加载器来查找的&#xff0c;分别如下&#xff1a;…...

【React】组件:全面解析现代前端开发的基石

文章目录 一、什么是组件&#xff1f;二、组件的类型三、组件的生命周期四、状态管理五、属性传递六、组合与继承七、最佳实践 在现代前端开发中&#xff0c;React 已成为开发者构建用户界面的首选框架之一。React 的强大之处在于其组件化设计&#xff0c;允许开发者将 UI 拆分…...

java学习--包装类

包装类 Boolean的关系图 Character关系图 其他关系图 包装类和基本数据转换 Debug进入之后可以看到底层代码如下 例题&#xff1a; 三元运算符是一个整体返回的数的类型看其中所含类型最高的那个是谁就会转成哪个 想要掌握这个这个知识&#xff0c;就要多看源码&#xff0c;直接…...

Python Django功能强大的扩展库之channels使用详解

概要 随着实时 web 应用程序的兴起,传统的同步 web 框架已经无法满足高并发和实时通信的需求。Django Channels 是 Django 的一个扩展,旨在将 Django 从一个同步 HTTP 框架转变为一个支持 WebSockets、HTTP2 和其他协议的异步框架。它不仅能够处理传统的 HTTP 请求,还可以处…...

推荐3款将相片变为动漫风格的免费AI工具推荐

toonme ToonMe是一款功能强大的在线和移动端应用&#xff0c;专门用于将照片转换成卡通风格图像。该工具利用先进的AI技术&#xff0c;能够快速识别照片中的面部特征&#xff0c;并进行智能处理&#xff0c;生成高清晰度的卡通肖像。 功能特点 ToonMe通过其内置的人工智能算法…...

【职业学习】高效工作法

文章目录 01 时间拳击02 非同步沟通03 批量处理04. 80/20法则05. 一次只做一件事 01 时间拳击 时间拳击&#xff08;Time Boxing&#xff09;核心是给每项任务创造一个时间限制&#xff0c;然后在固定的时间段内专注地完成这个任务。 不同于传统的待办事项清单&#xff1a;8点…...

【iOS】Tagged Pointer

目录 前言什么是Tagged Pointer&#xff1f;引入Tagged Pointer技术之前引入Tagged Pointer之后总结 Tagged Pointer原理&#xff08;TagData分析&#xff09;关闭数据混淆MacOS分析NSNumberNSString iOS分析 判断Tagged PointerTagged Pointer应用Tagged Pointer 注意点 Tagge…...

Mysql explain 优化解析

explain 解释 select_type 效率对比 MySQL 中 EXPLAIN 语句的 select_type 列描述了查询的类型,不同的 select_type 类型在效率上会有所差异。下面我们来比较一下各种 select_type 的效率: SIMPLE: 这是最简单的查询类型,表示查询不包含子查询或 UNION 操作。 这种查询通常是…...

wget下载github文件得到html文件

从github/gitee下载源文件&#xff0c;本来是22M下载下来只有11k 原因&#xff1a; Github会提供html页面&#xff0c;包括指定的文件、上下文与相关操作。通过wget或者curl下载时&#xff0c;会下载该页面 解决方式&#xff1a; github点击Code一栏的raw按钮&#xff0c;获得源…...

【es】elasticsearch 自定义排序-按关键字位置排序

一 背景 要求es查询的结果按关键字位置排序&#xff0c;位置越靠前优先级越高。 es版本7.14.0&#xff0c;项目是thrift&#xff0c;也可以平替springboot&#xff0c;使用easyes连接es。 二 easyes使用 配easyes按官方文档就差不多了 排序 | Easy-Es 主要的一个问题是easy…...

堆的相关知识点

目录 大小堆 堆的实现 堆的创建 堆的销毁 交换 向上调整 向下调整 弹出首个元素 取出首个元素 判空 堆插入 大小堆 大堆&#xff1a;最上面的数字是最小的&#xff0c;越往下越大 小堆&#xff1a;最上面的数字是最大的&#xff0c;越往下越小 堆的复杂程度&#…...

【Sass】常用全局sass高级函数,可使用原子化CSS减轻代码量,方便快速开发

文章目录 前言一、安装二、样式custom.scssflex.scsscolor.scssmargin-padding.scssorther 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 针对style的预编译器为scss 转载自git前端知识库 原博主是B站up程序员郑清&#xff0c;可以看他的v3教程…...

MYSQL 第四次作业

任务要求&#xff1a; 具体操作&#xff1a; 新建数据库&#xff1a; mysql> CREATE DATABASE mydb15_indexstu; Query OK, 1 row affected (0.01 sec) mysql> USE mydb15_indexstu; Database changed 新建表&#xff1a; mysql> CREATE TABLE student( ->…...

depcheck 前端依赖检查

介绍 depcheck 是一款用于检测项目中 未使用依赖项 的工具。 depcheck 通过扫描项目文件&#xff0c;帮助你找出未被引用的依赖&#xff0c;从而优化项目。 优势&#xff1a; 简单易用: 仅需几个简单的命令&#xff0c;就能够扫描并列出未使用的依赖项&#xff0c;让你快速了…...

2026年DLL修复工具深度测评:免费解决DLL缺失的可行方案

电脑运行办公软件、打开大型游戏时&#xff0c;经常弹出XXX.dll 缺失、无法找到入口点、无法加载动态链接库等报错窗口&#xff1f;相信绝大多数 Windows 用户都遇到过这种糟心情况&#xff1a;好好的程序突然打不开&#xff0c;游戏双击没任何反应&#xff0c;重装软件不起作用…...

如何利用The Incredible PyTorch离线文档:深度学习者的终极学习宝典

如何利用The Incredible PyTorch离线文档&#xff1a;深度学习者的终极学习宝典 【免费下载链接】the-incredible-pytorch The Incredible PyTorch: a curated list of tutorials, papers, projects, communities and more relating to PyTorch. 项目地址: https://gitcode.…...

CodePush-Server安全配置最佳实践:保护你的热更新服务

CodePush-Server安全配置最佳实践&#xff1a;保护你的热更新服务 【免费下载链接】code-push-server CodePush service is hot update services which adapter react-native-code-push and cordova-plugin-code-push - 热更新 项目地址: https://gitcode.com/gh_mirrors/co/…...

开发者知识管理工具CodingIT:架构设计与应用实践

1. 项目概述&#xff1a;一个面向开发者的“一站式”知识管理工具最近在整理个人技术笔记和项目文档时&#xff0c;我发现自己陷入了典型的“信息碎片化”困境&#xff1a;代码片段散落在Gist、笔记软件、本地文件甚至聊天记录里&#xff1b;项目文档要么是简陋的README&#x…...

NS-USBLoader完整指南:Switch文件管理、RCM注入与游戏传输的一站式解决方案

NS-USBLoader完整指南&#xff1a;Switch文件管理、RCM注入与游戏传输的一站式解决方案 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://…...

透明背景图片制作方法,一个小程序就能搞定!

最近&#xff0c;我被一个问题烦透了——每次需要制作透明背景图片时&#xff0c;总要在各种工具之间折腾半天。直到我发现了一个神器&#xff0c;才彻底改变了我的工作流程。今天&#xff0c;我就来分享一下我用过的所有透明背景图片制作方法&#xff0c;以及为什么我现在最常…...

IJTAG标准解析:片上仪器统一管理与SoC调试自动化实践

1. 项目概述&#xff1a;当芯片内部“仪器”需要统一调度最近在整理一些老资料时&#xff0c;翻到了2012年EE Times上的一篇旧闻&#xff0c;讲的是ASSET公司发布了一份关于IEEE P1687 IJTAG标准的入门教程。虽然时间过去十多年&#xff0c;但文中提到的“片上仪器”标准化管理…...

ChatGPT Plus值不值得买?——从服务器响应延迟、上下文长度、并发请求上限到插件可用性,11维硬指标逐项打分

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT Plus值不值得买&#xff1f; ChatGPT Plus 以 $20/月的订阅费提供 GPT-4 级别响应、优先访问高峰时段、更长上下文窗口&#xff08;最高 32K tokens&#xff09;及图像/文件解析能力。但是否值…...

微信聊天记录永久保存:免费开源工具WeChatExporter完整使用指南

微信聊天记录永久保存&#xff1a;免费开源工具WeChatExporter完整使用指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾担心珍贵的微信聊天记录会随着手机更…...

ARM设备运行x86_64程序:Box64高效兼容方案深度解析

ARM设备运行x86_64程序&#xff1a;Box64高效兼容方案深度解析 【免费下载链接】box64 Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux devices 项目地址: https://gitcode.com/gh_mirrors/bo/box64 你是否曾在AR…...