c++基础(类和对象中)(类的默认成员函数)

目录

一.构造函数(类似初始化)

1.概念

2.构造函数的特点

二.析构函数(类似 销毁对象/空间)

三.拷贝构造函数(类似复制粘贴的一种 初始化 )

1.概念:

2.拷贝构造的特点:

四.赋值运算符重载(类似重命名)


一.构造函数(类似初始化)


1.概念

1.构造函数 是对象实例化时,初始化对象

2.构造函数 自动调用的 特点 就完美的替代的了Init 函数



2.构造函数的特点

1. 函数名与类名相同。
2. 无返回值。(返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此)
3. 对象实例化时系统会 自动调用 对应的构造函数。
4. 构造函数可以重载。(在第五章运算符重载)
5. 如果类中没有显式定义构造函数,则C++编译器会自动生成⼀个无参的默认构造函数,⼀旦用户显式定义编译器将不再生成。
6. 无参构造函数全缺省构造函数、我们不写构造时编译器默认生成的构造函数,都叫做默认构造函数。但是这三个函数有且只有⼀个存在,不能同时存在。
(注意:大多构造函数都要自己写,才符合自己写的预期!)

如果 我们没有 自己 设置构造函数 就会出现:开辟的空间过大的问题

1.正常构造函数(初始话化):

2.没有初始化(不写构造函数),让编译器自己初始化:


二.析构函数(类似 销毁对象/空间)

1. 析构函数名是在类名前加上字符 ~
2. 无参数无返回值。(这里跟构造类似,也不需要加void)
3. ⼀个类只能有⼀个析构函数。若未显式定义,系统会自动生成默认的析构函数
4. 对象生命周期结束时,系统会自动调用析构函数。
5. 跟构造函数类似,我们不写编译器自动生成的析构函数对内置类型成员不做处理,自定类型成员会调用他的析构函数。
6. 自定义类型成员无论什么情况都会自动调用析构函数

注意:(析构函数大多要自己写,如果不自己写,可能会出现内存泄漏等严重问题!!!)

 比如:销毁一个栈:


三.拷贝构造函数(类似复制粘贴的一种 初始化 )

1.概念:

        如果⼀个构造函数的第⼀个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数。

2.拷贝构造的特点:

1. 拷贝构造函数 是 构造函数的⼀个重载
2. 拷贝构造函数 的参数 第一个参数 必须类类型对象的引用使用传值方式 编译器 直接报错,因为语法逻辑上会引发无穷递归调用
3. C++规定 自定义类型对象进行拷贝 必须调用拷贝构造 ,所以这里自定义类型传值传参和传值返回都会调⽤拷贝构造完成。
4. 若未显式定义拷贝构造,编译器会生成自动生成拷贝构造函数。自动生成的拷贝造 对 内置类型成员变量会 完成值拷贝/浅拷贝(⼀个字节⼀个字节的拷贝)(可能会造成拷贝地址都相同),对自定义类型成员变量 会调用他自己的 自定义类型 的 拷贝构造

(注意:大多拷贝构造函数都要自己写,才符合自己写的预期!)因为跟构造函数类似

正常的拷贝构造:                                          不是 类对象的 引用&  就会报错           


四.赋值运算符重载(类似重命名)

1.运算符重载是具有特名字的函数,他的名字是由operator和后面要定义的运算符共同构成。和其他函数⼀样,它也具有其返回类型和参数列表以及函数体。
2.重载运算符函数的参数个数和该运算符作用的运算对象数量⼀样多。⼀元运算符有⼀个参数,⼆元运算符有两个参数,⼆元运算符的左侧运算对象传给第⼀个参数,右侧运算对象传给第⼆个参数。
3.如果⼀个重载运算符函数是成员函数,则它的第⼀个运算对象默认传给隐式的this指针,因此运算符重载作为成员函数时,参数⽐运算对象少⼀个。
4.运算符重载以后,其优先级和结合性与对应的内置类型运算符保持⼀致

  .*   ::   sizeof   ?:(三目操作符)   .(点) 注意以上5个运算符不能重载。(大家要记⼀下!!!)
5. 重载操作符至少有⼀个类类型参数,不能通过运算符重载改变内置类型对象的含义,如: int operator+ (int x, int y)

6.重载++运算符时,有前置++和后置++,运算符重载函数名都是operator++,无法法很好的区分。C++规定,后置++重载时,增加⼀个int形参,跟前置++构成函数重载,方便便区分。
7.重载<<和>>时,需要重载为全局函数,重载为全局函数把 ostream/istream 放到第⼀个形参位置就可以了,第⼆个形参位置当类类型对象

正常的运算符重载:

前置/后置++ (重载):


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

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

相关文章

IDEA的工程与模块管理

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …

STM32的ADC详解

目录 一、ADC简介 二、ADC的时钟 三、ADC特性 四、ADC功能说明 五、规则通道和注入通道 1.规则通道 2.注入通道 3.区别 六、数据寄存器 1.右对齐 2.左对齐 七、转换模式 1.单次转换模式 2.续转换模式 3.扫描模式 4.区别 八、程序实现 1.需求 2.ADC初始化 3.A…

ipv6 基础学习(一)

IPv6 为什么要有IPV6&#xff1f; IPv4地址空间有限&#xff1a;IPv4使用32位地址&#xff0c;最多可提供约43亿个地址。随着互联网设备数量的爆炸式增长&#xff0c;这些地址已经几乎耗尽。 IPv6地址空间庞大&#xff1a;IPv6使用128位地址&#xff0c;可以提供大约3.410^3…

爬虫自己做的

1.urllib 1.1基本使用 1.2 下载&#xff08;图片&#xff0c;页面&#xff0c;视频&#xff09; 1.3 get 1.3.1 quote 中文变成对应uncode编码 当url 的wd中文时 quote是将中文变成对应uncode编码 然后拼接成完整的url 1.3.2urlencode方法 wd有多个参数 1.3.3ajas get实例 …

【Git远程操作】理解分布式管理 | 创建远程仓库

目录 1.理解分布式管理 多人协作开发 2.创建远程仓库 2.1仓库名&路径 2.2初始化仓库&设置模板 1.理解分布式管理 目前我们学习的所有内容都是在本地来完成的。&#xff08;add /commit /版本撤销回退/分支管理&#xff09; Git是一个分布式 的版本控制系统。 分支…

动漫风格动漫404网站维护HTML源码

源码介绍 动漫风格动漫404网站维护HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 效果预览 源码下载 动漫风格动漫404网站维护HTML源码

【存储学习笔记】1:机械硬盘(Hard Drive Disk)结构和寻址方式

目录 HDD的结构HDD的寻址方式CHS寻址&#xff08;不适用于等密度结构磁盘&#xff09;LBA寻址&#xff08;目前普遍使用的线性寻址方式&#xff09; HDD的寻址速度 HDD的结构 盘面&#xff08;Platter&#xff09;&#xff1a;单面或者双面覆盖着用于记录数据的磁性物质&#x…

Gateway源码分析:路由Route、断言Predicate、Filter

文章目录 源码总流程图说明GateWayAutoConfigurationDispatcherHandlergetHandler()handleRequestWith()RouteToRequestUrlFilterReactiveLoadBalancerClientFilterNettyRoutingFilter 补充知识适配器模式 详细流程图 源码总流程图 在线总流程图 说明 Gateway的版本使用的是…

配置单区域OSPF

目录 引言 一、搭建基础网络 1.1 配置网络拓扑图如下 1.2 IP地址表 二、测试每个网段都能单独连通 2.1 PC0 ping通Router1所有接口 2.2 PC1 ping通Router1所有接口 2.3 PC2 ping通Router2所有接口 2.4 PC3 ping通Router2所有接口 2.5 PC4 ping通Router3所有接口 2.…

【Gitlab】记一次升级 Gitlab 后 API 失效的问题

背景 前段时间&#xff0c;因内部使用的 Gitlab 版本存在漏洞&#xff0c;需要进行升级&#xff0c;于是乎&#xff0c;将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。 然后&#xff0c;今天&#xff0c;突然发现这个接口获取不到…

Linux网络——套接字与UdpServer

目录 一、socket 编程接口 1.1 sockaddr 结构 1.2 socket 常见API 二、封装 InetAddr 三、网络字节序 四、封装通用 UdpServer 服务端 4.1 整体框架 4.2 类的初始化 4.2.1 socket 4.2.2 bind 4.2.3 创建流式套接字 4.2.4 填充结构体 4.3 服务器的运行 4.3.1 rec…

在树莓派4B上部署yolov8环境完成高帧率检测任务

目录 前言 在树莓派上安装Pytorch 在树莓派上安装Ultralytics环境 在树莓派上初步测试模型 在树莓派上安装NCNN 用NCNN模型实现高帧率检测 前言 在我前面的文章里讲了如何用yolov8从0开始训练自己的模型&#xff0c;现在这篇文章将教大家如何在树莓派上部署yolov8的环境…

【BUG】已解决:TypeError: Descriptors cannot not be created directly.

已解决&#xff1a;TypeError: Descriptors cannot not be created directly. 目录 已解决&#xff1a;TypeError: Descriptors cannot not be created directly. 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来…

适用于618/7xx芯片平台 AT开发 远程FOTA升级指南教程

简介 AT版本的远程升级主要是对AT固件版本进行升级&#xff0c;实际方式为通过合宙官方IOT平台升级或者使用自己搭建的服务器进行升级服务。 该文档教程流程适用于 618/716S/718P 芯片平台的Cat.1模块 合宙IOT平台配置 升级日志 —— 如何查看 升级日志 —— 响应码列表 响应…

【BUG】已解决:ModuleNotFoundError: No module named ‘torch‘

已解决&#xff1a;ModuleNotFoundError: No module named ‘torch‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市…

Unity-URP-SSAO记录

勾选After Opacity Unity-URP管线&#xff0c;本来又一个“bug”, 网上查不到很多关于ssao的资料 以为会不会又是一个极度少人用的东西 而且几乎都是要第三方替代 也完全没有SSAO大概的消耗是多少&#xff0c;完全是黑盒(因为用的人少&#xff0c;研究的人少&#xff0c;优…

ubuntu2204配置anacondacuda4090nvidia驱动

背景 某个机房的几台机器前段时间通过dnat暴露至公网后被入侵挖矿&#xff0c;为避免一些安全隐患将这几台机器执行重装系统操作&#xff1b; 这里主要记录配置nvidia驱动及cuda&anaconda。 步骤 大概分为几个步骤 禁用nouveau配置grub显示菜单install nvidia-driveri…

Qt Style Sheets-使用样式表自定义 Qt 部件

使用样式表自定义 Qt 部件 在使用样式表时&#xff0c;每个小部件都被视为具有四个同心矩形的框&#xff1a;边距矩形、边框矩形、填充矩形和内容矩形。框模型对此进行了更详细的描述。 盒模型 以下是四个同心矩形在概念上的呈现方式&#xff1a; 边距超出边框。边框绘制在边…

1.Fabric框架

要了解Fabric&#xff0c;首先要知道Hyperledger开源项目。 2015年12月&#xff0c;由开源世界的旗舰组织Linux基金会牵头&#xff0c;30家初始企业成员共同宣布Hyperledger联合项目成立。Hyperledger 超级账本&#xff0c;是首个面向企业应用场景的分布式账本平台&#xff0c…

【Spark官方文档部分翻译】RDD编程指南(RDD Programming Guide)

写在前面 内容如何选择 本翻译只翻译本人认为精华的部分&#xff0c;本人认为的Spark的一些核心理念&#xff0c;编程思想。一些特别基础的操作包括但不限于搭建环境就不在此赘述了。 配套版本 本系列基于Spark 3.3.1&#xff0c;Scala 2.12.10&#xff0c;进行翻译总结 原…