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

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.xdnf.cn/news/4185.html

相关文章:

  • 【全面解析】Poco C++ Libraries 模块详解与使用指南
  • UE5 使用插件进行Audio2face和UE5的实时链接并实时输出嘴型
  • 多模态训练与微调
  • 突破v0.dev对话限制的两种方法
  • k8s node 报IPVS no destination available
  • 19.第二阶段x64游戏实战-vector容器
  • 二叉树的最大深度(简单)
  • 标题:基于自适应阈值与K-means聚类的图像行列排序与拼接处理
  • LintCode第484题-交换数组两个元素,第9题-Fizz Buzz 问题,第46题-主元素,第50题数组剔除元素后的乘积
  • 超表面加工流程
  • 从零开始了解数据采集(二十二)——塑胶制品行业趋势分析案例
  • (leetcode) 力扣100 6.三数之和 (双指针)
  • 卷积神经网络的简单实战项目
  • 大模型——GraphRAG基于知识图谱+大模型技术构建的AI知识库系统
  • 怎样用 esProc 实现多数据库表的数据合并运算
  • 深入理解 Linux 阻塞IO与Socket数据结构
  • 《脑机接口与AI:如何让瘫痪患者用“意念”实现创作?》
  • 在 PyTorch 中借助 GloVe 词嵌入完成情感分析
  • 【Vue】组件自定义事件 TodoList 自定义事件数据传输
  • Spring Boot3 实现定时任务 每10分钟执行一次,同时要解决分布式的问题 区分不同场景
  • 【coze】意图识别(售前售后问题、搜索引擎去广告)
  • 机器视觉框架源码——解读3(常用的资源和样式)
  • ShardingJdbc-水平分表
  • LaTex 模板 section 前小节符号去不掉 解决方法
  • MySQL数据库:全方位剖析与实战案例
  • Android Intent 页面跳转与数据回传示例(附完整源码)
  • Gradle -> Gradle的清除缓存指令
  • jenkins访问端口调整成80端口
  • 雅思阅读--句子结构
  • 信息论04:从信息熵到互信息——信息共享的数学度量