再探C++——默认成员函数
目录
一、构造函数
二、析构函数
三、赋值运算符
四、拷贝构造
如果一个类中没有成员,我们称为空类。空类,也存在6个默认的类成员函数。
默认成员函数:用户不显示地写,编译器会默认生成的函数叫做默认成员函数。
6个默认成员函数:
构造函数:完成对象初始化 析构函数:完成对象清理拷贝构造:用同类对象构造新类 赋值重载:把一个对象赋给另一个对象
取地址重载:很少涉及
一、构造函数
在C语言中,一个数据结构的模拟首先要完成初始化,就拿栈举例子:
初始化要确定top,确定开辟的空间,和数组的初始容量。如果没有完成这一初始化会出现诸多问题,为了防止遗忘类的初始化,引入构造函数。
在类的创建时,自动调用,用来进行初始化。
1.特性:
1)名称与类名相同,没有返回值。
2)不是开空间创建对象,是在实例化后自动调用。
3)可以重载
拿日期类举例子
.构造函数可以是重载 重载要注意二义性
.关于重载的调用
在调用无参构造函数时 不可写成 Date d1();否则编译器将认为这是一个函数声明。
.在函数重载中给缺省值
关于带参函数给全缺省,那么它与无参构造函数都为默认构造函数,不需要用户显示调用,编译器就能初始化。
默认构造函数只能出现一个,全缺省不能与无参构造函数同时出现。
在类中既有无参构造函数和全缺省构造函数,编译器能通过编译 但在创建对象时会出现二义性,不知道调用哪个函数,会出错。
5)编译器会生成默认的构造函数
如果用户没有自己显示的实现一个构造函数,那么编译器会生成一个无参的默认构造函数。
编译器生成的默认构造函数特点:
内置类型初始化为随机值,自定义类型会调用其的构造函数。
类B的默认构造函数在初始化时aa时,会调用A的构造函数,而b初始化为随机值。
6)初始化列表
对于引用和const类型的对象,在定义时必须进行初始化,而构造函数的函数体为赋值语句,无法进行初始化;
因此引入初始化列表,在对象创建时即完成初始化工作。
初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟
一个放在括号中的初始值或表达式
注意:
每个成员在初始化列表只能出现一次;
引用和常对象,需要传参的自定义类型必须在初始化列表中初始化;
初始化列表的初始化顺序只与类对象声明顺序有关;
二、析构函数
在一个类对象结束,要进行动态内存的释放。为了防止用户遗忘,引入析构函数,在对象生命周期结束时,自动调用,完成对象的内存清理工作。
特性:
1)函数名为 类名前加~ (表示与构造函数相对)
2)没有参数 ,没有返回值
3)编译器会生成默认构造函数
与构造函数一样,用户没有显示写析构函数时,编译器会自动生成析构函数
内置类型不做回收,自定义类型调用其的析构函数。
4)调用顺序类似栈结构,先创建的类,后调用析构函数。
三、赋值运算符
C++为了增强代码的可读性,引入赋值运算符=
赋值运算是针对俩个已经存在的类;
关键字:operator = 有函数参数和返回值
特性:
1)在用户不显示写时,编译器会生成默认赋值运算符,其的特点是浅拷贝
浅拷贝:将目标一个字节一个字节的拷贝给目的地
涉及一块空间的拷贝不能用浅拷贝:同一块空间不能连续释放两次;因此用户自定义赋值运算符重载就非常有必要。
2)返回值是T&,减少传值的拷贝,可以连续拷贝
参数类型const T& 防止被错误修改
3)隐藏第一个参数this指针 ,检查拷贝的来源是否为自己
3)不可重载为全局函数
全局函数没有this指针,需要传所有参数
四、拷贝构造
将已经存在的类,拷贝给一个新类;
其是构造函数的一个重载;
在传参时必须用引用接收参数;
否则 不带引用;会发生无限递归
要拷贝构造就要传参 传参就要调用拷贝构造 调用拷贝构造就要传参 ..........会发生无限递归
1)用户不显示写时,编译器会产生默认拷贝构造函数,是浅拷贝;
在涉及动态空间时,必须显示实现一个拷贝构造函数,否则会发生同一块空间释放俩次;
2)对象返回时,能返回引用,尽量返回引用,提高效率;
区别拷贝构造和赋值的调用
拷贝构造是一个存在的类对象,赋值是俩个类都存在;
———————————————————————————————————————————
本期的C++默认成员函数的介绍就到这。还有俩个默认的成员函数,但是基本上用不到 ,就不做介绍,对于构造函数是重要的一项,希望本文对大家有所帮助!
相关文章:

再探C++——默认成员函数
目录 一、构造函数 二、析构函数 三、赋值运算符 四、拷贝构造 如果一个类中没有成员,我们称为空类。空类,也存在6个默认的类成员函数。 默认成员函数:用户不显示地写,编译器会默认生成的函数叫做默认成员函数。 6个默认成员…...

推荐两款github敏感信息搜集工具(gsil、gshark)
推荐两款github敏感信息搜集工具(gsil、gshark) - 云社区 - 腾讯云 (tencent.com) github敏感信息泄露是很多企业时常忽视的一个问题,国外有一份研究报告显示,在超过24,000份的GitHub公开数据中,发现有数千个文件中可能…...
如何不拷贝资源的使用fork
我们知道fork出的子进程会把父线程的资源拷贝一遍,其中包括文件描述符表,如果是一些独占的设备,那么经常会出问题。 比如你在父进程ose了设备,但子进程的文件描述符表里依然记录是open的,这样当你再次在父进程open时&a…...

使用事件侦听器和 MATLAB GUI 查看 Simulink 信号研究
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
使用协程让物体颜色慢慢消失
以下是使用协程让物体颜色慢慢消失的完整代码,每行都有注释说明: using UnityEngine; using System.Collections;public class ExampleClass : MonoBehaviour {public SpriteRenderer sprite; // 物体的SpriteRenderer组件public float fadeSpeed 0.1f…...

服务器流量
1.服务器流量分为入流量和出流量 入流量(Inbound Traffic)是指流向服务器的数据流量,也就是客户端发送到服务器的数据。这些数据可能包括请求信息、文件上传等。 出流量(Outbound Traffic)是指从服务器流向客户端的数…...

加拿大量子研究新动作!D-Wave与滑铁卢大学合作研究量子相干性
(图片来源:网络) D-Wave是量子计算系统、软件和服务的领导者,也是量子计算机的第一家供应商。近期,D-Wave宣布与滑铁卢大学量子计算研究所(IQC)达成两项新合作。他们为量子计算系统建立了关键…...

网络安全进阶学习第十一课——MySQL手工注入(2)
文章目录 一、UA注入1、原理2、靶场演示:1)一旦页面出现如下现状,就可以使用UA注入2)BP抓包3)修改User-Agent 二、referer注入1、原理2、靶场演示:1)使用BP抓包2)修改Referer 三、DN…...
数据库和ORM如何优雅的添加字段?
RT,业务需要为某个实体添加字段,如何在生成了Mybatis XML(包含了手写的部分联合查询)的情况下优雅的添加字段呢? 作者:方小葱 链接:https://www.zhihu.com/question/284511416/answer/43812337…...
QT ubuntu下开发视频播放 FFmpeg
ubuntu 安装FFmpeg T113VideoDemo.pro #------------------------------------------------- # # Project created by QtCreator 2023-07-28T11:45:22 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widget…...

8.3一日总结
1.远程仓库的使用 a.克隆远程仓库 1>.在桌面克隆远程仓库 git clone 仓库名 2>.修改仓库内容 3>添加目录 git add. 4>提交: git commit -m 完成登录功能 5>推送提交远程仓库 : git push origin master -u 6>更改推送:git push(简写形式) 需要先添加,再提交,最…...

load、unload和pagehide、pageshow
一、load、unload和pagehide、pageshow的主要应用 1)load 和 unload 事件监听web页面的进入和离开,一般用于页面的首次加载、刷新和关闭等操作的监听; 2)pageshow 和 pagehide 事件多用于监听浏览器的前进和后退等。 二、pagesh…...
【面试问题12】
1.吞吐量和并发区别? 并发请求树/单位时间一般是s 吞吐量 并发/平均响应时间 常用的吞吐量指标有qps,tps 2.mysql数据是怎么存储的? 存储在data目录下,数据库作为文件夹,文件夹里面有.ibd文件,一个表一个ib…...

高性能网络框架笔记
目录 TCP粘包、分包惊群断开连接,TCP怎么检测的?大量的close wait,如何解 ?双方同时调用close水平触发和边沿触发的区别 TCP粘包、分包 解决:1.应用层协议头前面pktlen;2.为每一个包加上分隔符;(\r\n&…...

leetcode 738. 单调递增的数字
2023.8.4 这题用暴力法会超时,我就没试了,采用了个挺巧的方法,为了方便需要先将整数n转换为字符串的形式,然后从后向前遍历,当两个数字非递增时,将前一个数字--,后一个数字的位置记录在index中&…...

FPGA项目设计:数字时钟
项目要求: 设计一个数字时钟,数码管前两位显示小时,数码管中间两位显示分钟,数码管后面两位显示秒。 项目设计: 系统框架图: 计数模块时序图: 代码实现: 计数模块: /…...

科技云报道:向量数据库:AI时代的下一个热点
科技云报道原创。 最近,又一个概念火了——向量数据库。 随着大模型带来的应用需求提升,4月以来多家海外知名向量数据库创业企业传出融资喜讯。 4月28日,向量数据库平台Pinecone宣布获得1亿美元(约7亿元)B轮融资&am…...

【更新】119所院校考研重点勾画更新预告!
截至目前,我已经发布了47篇不同院校的择校分析。发布了87套名校信号考研真题以及119所不同院校的考研知识点重点勾画。 另外为了更好服务已经报名的同学,24梦马全程班也到了收尾的阶段。即将封班!需要报名的同学抓紧啦! 去年开始…...
【Leetcode】(自食用)LRU算法(哈希链表法)
step by step. 题目: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键…...
robots.txt 如何禁止蜘蛛(百度,360,搜狗,谷歌)搜索引擎获取页面内容
什么是蜘蛛抓取 搜索引擎使用spider程序自动访问互联网上的网页并获取网页信息。spider在访问一个网站时,会首先会检查该网站的根域下是否有一个叫做robots.txt的纯文本文件。您可以在您的网站中创建一个纯文本文件robots.txt,在文件中声明该网站中不想…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...