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

C++类与对象的特性

1.类的静态成员

        静态成员包括静态成员变量和静态成员函数。使用静态成员变量可以实现类的数据成员的共享。
        静态成员变量的值可以修改,并且对类的每个对象都相同,它是所有类对象共有的数据,对对象而言节约了空间。其存储空间的分配不在构造函数内完成,空间回收也不在析构函数内完成。它的主要目的是定义类的各个对象所共用的数据。
        静态成员函数不属于类的特定对象,其可以在不生成类的对象的情况下,直接访问类的静态成员变量,而不能访问类的非静态成员变量。静态成员函数不含this指针,并且只能访问类的其他静态成员,而不能访问类的非静态成员。

2.友元

        友元机制允许在类外对类对象的所有成员(包括私有、保护和公有)进行访问。友元既可以是一般函数,也可以是另一个类的成员函数,还可以是另一个完整的类。
        当一个普通函数声明为一个类的友元函数后,它就可以访问该类的所有成员。
        当一个类的成员函数声明为另一个类的友元函数后,它不仅可以访问自己所在类的所有成员,而且还可以访问friend语句所在类中所有成员。
        当一个类声明为另一个类的友元时,这个类中的所有成员函数不仅可以访问自己所在类的所有成员,而且还可以访问friend语句所在类的所有成员。

3.常量类型

        常量的概念主要是为了保证数据的安全性。常量在程序运行过程中其值是不可改变的。
        如果将一个对象定义为常量对象,那么它的所有数据成员的值在对象的整个生存期内都不能被改,因此在定义时要对数据成员进行初始化。
        类的常量成员包括常量成员函数和常量数据成员。常量成员函数不能改变类的数据成员的值,也不能调用该类中非常量成员函数,只能调用该类的常量成员函数。常量数据成员不能通过任何函数对其赋值,构造函数对其进行初始化时,只能通过初始化列表进行。
        常量引用的对象不能被修改。若在函数调用中,不希望被调用函数改变参数的值,那么就应该用常量引用来作函数的形参。
        常量指针的特点是不能改变指针的值,即指针所保存的地址,但可以改变所指向变量的值。
        指向常量的指针的特点是可以改变指针的值,即指针所保存的地址,但不能改变所指向变量的值。

4.对象的生存期

        对象的生存期是指对象从创建到结束的时间。
        局部对象是定义在一个程序块或函数体内的对象,定义对象时,系统自动调用构造函数创建对象,对象的生存期开始;退出程序块或函数时,系统自动调用析构函数,释放该对象,对象的生存期结束。
        静态对象的生存期从第一次定义对象时开始,到程序运行结束时终止。
        全局对象的生存期从程序开始运行时开始,到程序运行结束时终止。
        动态对象的生存期从通过new创建时开始,到通过delete释放时终止。如果没有delete会出现内存泄漏。

相关文章:

  • 【算法刷题day60】Leetcode:84. 柱状图中最大的矩形
  • 大规模语言模型的书籍分享
  • 听说部门来了个00后测试开发,一顿操作给我整麻了
  • 自己动手写docker——Namespace
  • 【chagpt】广泛使用API之前:考虑成本和数据隐私
  • 01-05.Vue自定义过滤器
  • 在树莓派3B+中下载opencv(遇到的各种问题及解决)
  • 宿舍管理系统代码详解(操作界面)
  • 人人皆是黑客?EvilProxy推出一键反向代理服务
  • vue深度选择器(:deep​)
  • LeetCode 343. 整数拆分 (dp动态规划)
  • Xshell远程连接服务器需要哪些依赖包、
  • Python条件分支与循环
  • 【全开源】点餐小程序系统源码(ThinkPHP+FastAdmin+UniApp)
  • 快速搭建 WordPress 外贸电商网站指南
  • php的引用
  • [译]CSS 居中(Center)方法大合集
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Android 架构优化~MVP 架构改造
  • Android 控件背景颜色处理
  • CentOS 7 防火墙操作
  • CSS 三角实现
  • ECMAScript6(0):ES6简明参考手册
  • es6--symbol
  • express如何解决request entity too large问题
  • Git 使用集
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java知识点总结(JavaIO-打印流)
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • passportjs 源码分析
  • React as a UI Runtime(五、列表)
  • React-flux杂记
  • Redis字符串类型内部编码剖析
  • Wamp集成环境 添加PHP的新版本
  • 技术:超级实用的电脑小技巧
  • 小程序button引导用户授权
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 白色的风信子
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • hi-nginx-1.3.4编译安装
  • ​​​【收录 Hello 算法】9.4 小结
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # Maven错误Error executing Maven
  • (1)(1.11) SiK Radio v2(一)
  • (70min)字节暑假实习二面(已挂)
  • (C语言)二分查找 超详细
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (理论篇)httpmoudle和httphandler一览
  • (十二)Flink Table API
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)项目管理杂谈-我所期望的新人
  • .bat批处理(三):变量声明、设置、拼接、截取