c++类【发展】

类的静态成员(用static声明的成员),在声明之外用例单独的语句进行初始化,初始化时,不再需要用static进行限定。在方法文件中初始化。以防重复。

特殊成员函数

复制构造函数:       

        当使用一个对象来初始化另一个对象时,编译器将自动创建一个复制构造函数。

        对于复制构造函数,用于将一个对象复制到新创建的对象中,需要知道2点:何时调用,有何作用。

        复制构造函数原型:

        隐式复制构造函数是按值传递进行复制的,复制的时候是浅复制。因此,如果有用new创建成员时,不能使用隐式复制构造函数,要定义一个显示的复制构造函数。处理new开辟的存储空间,不然后导致异常,复制的数据也不是真的数据,只是复制了地址。定义复制构造函数可以执行深度复制。

赋值运算符重载

        c++给类对象赋值,因为自动为类重载了赋值运算符,当然,自动的用起来不会很好用,不一定就能满足自己的需求,如果不知道自动定义的做了啥,就很难判断是否需要自己重新定义一个。

        用一个对象赋给一个新对象进行赋值时,不一定会调用赋值运算符,也可能直接用复制构造函数实现。

        和隐匿构造函数一样,隐式赋值构造函数也只是浅复制,不要复制指针指向的数据。导致数据受损。因此,如果有一些指针成员,就要自定义赋值运算符,来避免浅复制,执行深度复制才能避免异常。

        赋值运算符原型:

        延伸:执行赋值的时候,要意识到,新对象其实已通过构造函数创建好的对象,再执行赋值的,因此,如果构造函数通过new开辟了空间,赋值时,要先delete释放这个已开辟的空间。不能延用,为啥?因为你不知道原空间有多大,够不够用,不如直接释放,再重新开辟一个新的更安全。

        空指针:nullptr

  静态类成员函数     

        静态类成员函数,声名在公有部分,定义时,在前面加static关键字,使用的时候,用类名::函数名。

        静态成员函数只能访问静态成员。。

小结:

        在构造函数用使用了new时要注意

        1、析构函数中要使用delete释放内存

        2、new和delete要对应,数组还是单个的。new[]和delete[].

        3、如果有多个构造函数,那个用new的方式对一致,要么都是new,要么都是new[]。不然析构的时候要混乱。

        4、定义一个复制构造函数,执行深度复制,避免混乱。

        5、重载赋值运算符,执行深度复制,避免混乱。

返回对象的说明

        返回指向const对象的引用,        返回指向对象的引用,        返回const对象。

        返回对象将调用复制函数,没有返回引用的效率高。

        至于用哪种,有些是效率考虑,有些是因为输入参数或其它原因,只能选某一种。

        一般来讲,如果返回的是局部对象,就一定要返回对象。如果返回一个没有公有复制构造函数的类(如ostream类)的对象,就一定要反加引用类型。其它的可以返回对象,也可以返回引用的,优先返回引用,效率高一些。

        类在声明时可以初始化,与成员初始化列表等价。

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

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

相关文章

宁德时代区块链+数字孪生专利解析:去中心化身份认证重构产业安全底座

引言:当动力电池巨头瞄准数字孪生安全 2025年5月6日,金融界披露宁德时代未来能源(上海)研究院与母公司宁德时代新能源科技股份有限公司联合申请的一项关键专利——“身份验证方法、系统、电子设备及存储介质”。这项技术将区块链…

cesium之自定义地图与地图叠加

在appvue中,cesium支持更换不同的地图资源,代码如下 <template><div id"cesiumContainer" ref"cesiumContainer"></div> </template><script setup> import * as Cesium from cesium; import "./Widgets/widgets.css&…

STL?string!!!

一、引言 在之前的文章中&#xff0c;我们一同学习了有关类和对象、模板、动态内存管理的相关知识&#xff0c;那么接下来一段时间我们将要趁热打铁&#xff0c;一起来手撕C库中最重要的一个库----STL中的一些容器&#xff0c;在手撕它们之前&#xff0c;我将先介绍一下对应的容…

低版本GUI配置SAProuter

1、注意配置SAProuter时&#xff0c;必须添加后面的/H/ 如&#xff1a;/H/sap.sapzx.cn/H/ 2、或者有时需要配置service文件&#xff08;C:\WINDOWS \system32\drivers\etc\service&#xff09; sapmsEP1 3600/tcp

springBoot中自定义一个validation注解,实现指定枚举值校验

缘由 在后台写接口的时候&#xff0c;经常会出现dto某个属性是映射到一个枚举的情况。有时候还会出现只能映射到枚举类中部分枚举值的情况。以前都是在service里面自行判断&#xff0c;很多地方代码冗余&#xff0c;所以就想着弄一个自定义的validation注解来实现。 例如下面某…

MySQL数据库中篇

#作者&#xff1a;允砸儿 #日期&#xff1a;乙巳青蛇年 四月初九 笔者继续带朋友们了解mysql数据库中篇的内容。多了不说&#xff0c;少了不唠&#xff0c;咱们直接就开写。 书接上回笔者在上篇中介绍了什么是数据库和数据库的一些基础的概念&#xff0c;以及mysql数据库的…

AI如何重塑DDoS防护行业?六大变革与未来展望

随着AI技术的深度渗透&#xff0c;DDoS防护行业正经历一场从“规则驱动”到“智能驱动”的范式革命。传统依赖静态阈值和人工规则的防御模式已难以应对新型攻击&#xff0c;而AI的引入不仅提升了检测精度&#xff0c;更重构了防护体系的底层逻辑。以下是AI带来的六大核心变革及…

五一作业-day04

文章目录 1. **ps -ef是显示当前系统进程的命令,统计下当前系统一共有多少进程**2. **last命令用于显示所用用户最近1次登录情况,awk可以取出某一列,现在要取出last命令第1列并去重统计次数**3. **secure日志是用户的登录日志,过滤出secure日志中的Failed password的次数(用课堂…

抽奖系统(基于Tkinter)

一、抽奖规则及使用方法 抽奖规则&#xff1a; 从1-138个号码中随机抽奖&#xff0c;共进行n轮抽奖&#xff0c;每个号码仅有一次中奖机会&#xff0c;即已中奖的号码不会再次中奖。 使用方法&#xff1a; 要求开始抽奖后屏幕上随机滚动显示中奖号码&#xff0c;点击“STOP”之…

window 系统 使用ollama + docker + deepseek R1+ Dify 搭建本地个人助手

1. 下载ollama &#xff0c;官网 下载地址&#xff1a;Download Ollama on macOS&#xff0c;选择 Window 下载完成后&#xff0c;可在终端 使用 ollama --version 2. 下载 本地大模型&#xff0c;这里下载deepseek r1 7b 3.下载Embed模型 Embed模型 是文本工具向量化的核心工…

【学习笔记】 强化学习:实用方法论

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程&#xff0c;深度学习领域研究生必读教材),开始深度学习领域学习&#xff0c;深入全面的理解深度学习的理论知识。 之前的文章参考下面的链接&#xf…

益鑫通汽车连接器可替代Molex,JST

# 探秘优质车规连接器 在汽车向新能源和智能化发展的进程中&#xff0c;车规连接器对汽车电子系统的稳定运行至关重要。有企业凭借技术与创新&#xff0c;在该领域表现出色。其车规连接器类型多样&#xff0c;能满足汽车不同系统连接需求。 一款2.54Pitch线对板连接器&#xff…

【WPF】将Bitmap图像转换为BitmapImage,并给Image控件显示图像

1.C#将Bitmap图像转换为BitmapImage&#xff0c;并给Image控件显示图像后台实现 public void InitImage(Bitmap bitmap){try{// 将Bitmap转换为WPF的BitmapImageBitmapImage bitmapImage;using (MemoryStream memory new MemoryStream()){bitmap.Save(memory, System.Drawing.…

Python从入门到高手8.2节-元组的常用操作符

目录 ​8.2.1 元组的常用操作符 8.2.2 []操作符: 索引访问元组 8.2.3 [:]操作符&#xff1a;元组的切片 8.2.4 操作符&#xff1a;元组的加法 8.2.5 *操作符&#xff1a;元组的乘法 8.2.6 元组的关系运算 8.2.7 in操作符&#xff1a;查找元素 8.2.8 五一她玩了个狗吃…

Vue3源码学习4-effect中为什么使用WeakMap,Set?

文章目录 前言1. 精细化依赖追踪2. 高效的依赖收集与触发3. 自动内存管理&#xff0c;防止内存泄漏4. 支持复杂场景 前言 在 mini vue - effect 实现中 设计&#xff08;WeakMap → Map → Set → effect函数&#xff09;有以下几个重要原因&#xff1a; 1. 精细化依赖追踪 W…

TinyML 边缘智能:在资源受限 MCU 上部署 AI

前言 在物联网(IoT)和智能边缘计算的时代浪潮下,TinyML(微型机器学习)正以前所未有的速度改变着我们与设备交互的方式。它将 AI 推理能力放在资源极度受限的 MCU(微控制器)上,兼顾实时性、低功耗和数据隐私,成为智能家居、可穿戴设备、工业检测等场景的核心技术。尽管…

技术白皮书:Oracle GoldenGate 优势

本文为技术白皮书Oracle GoldenGate 优势的翻译及阅读笔记。以下注释中GoldenGate为OGG。 副标题为&#xff1a;Oracle 数据库的变更数据捕获 (CDC) 技术比较。版本为July, 2021, Version 2.1。 Oracle GoldenGate 被客户和分析师公认为功能最齐全、性能最高、最值得信赖的数…

Android控件VideoView用法

一 控件UI <VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitCenter" /> 二 配置 <?xml version="1.0" encoding="u…

React 第三十六节 Router 中 useParams 的具体使用及详细介绍

一、useParams 的基本用法 用途&#xff1a;用于在组件中获取当前 URL 的动态路由参数&#xff08;如 /user/:id 中的 id&#xff09;。 import { Routes, Route, useParams } from react-router-dom;// 定义路由 function App() {return (<Routes><Route path"…

C++战胜白蚁 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析

目录 C++战胜白蚁 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、 推荐资料 1、C++资料 2、Scratch资料 3、Python资料 C++战胜白蚁 2024年信息素养大赛 C++复赛真题 一、题目要求 1、编程实现 小明因为很长…