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

C++——const成员

这里先用队列举例:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <assert.h>
using namespace std;
class SeqList
{
public:void pushBack(int data){if (_size == _capacity){int* tmp = (int*)realloc(a, sizeof(int) * 4);if (tmp == NULL){perror("realloc fail::");return;}a = tmp;_capacity += 4;}a[_size++] = data;}int operator[](size_t i) const{assert(i < _size);return a[i];}void Print() const{for (int i = 0; i < _size; i++){cout << a[i] << " ";}cout << endl;}
private:int* a = (int*)malloc(sizeof(int) * 4);size_t _size = 0;size_t _capacity = 0;
};
int main()
{SeqList sl;sl.pushBack(1);sl.pushBack(2);sl.pushBack(3);sl.pushBack(4);cout << sl[3];return 0;
}

进行[ ]重载,可以通过 sl[i]来访问数据。但是,我们的重载函数是传值返回,返回的是原来的数的拷贝,是一个临时变量,具有常量性,也就是不可以进行修改。

如下,进行修改是会报错的:

所以,我们考虑使用引用返回,一般,我们采用引用返回的都是全局变量,static静态变量,*this。这里返回的a[i]变量是在堆上的,所以出了函数还可以存在,所以可以使用引用返回。

---------------------------------------------------------------------------------------------------------------------------------

同时,以上两个函数构成重载(参数类型不同)

【注意】:只是返回值不同不能构成重载。

第二个函数是针对普通数据,可读可写

第一个函数是针对特殊数据,只能读不能写。

=================================================================

【BTW】:

非const变量可以调用const函数(权限的缩小)

const变量不可以调用非const函数(权限的放大)

=========================================================================

取地址操及const取地址操作符重载

Class Date
{public:Date* operator&(){ return nullptr;}const Date* operator&() const{ return nullptr;}private:int _year;int _month;int _day;
}

这两个运算符一般不需要重载,使用编辑器生成的默认取地址重载即可。只有特殊情况下才会重载,比如说,不想让别人取到有效地址。

http://www.lryc.cn/news/228082.html

相关文章:

  • 使用阿里云服务器学习Docker
  • 通信原理板块——线性分组码之汉明码
  • Hive 常用存储、压缩格式
  • 搞懂它,就可以把结构体玩活了~
  • 基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(四)
  • dcat admin 各种问题
  • 数据结构与算法(二)动态规划(Java)
  • 颜值实力“C位出道”:起亚EV6综合实力究竟怎么样?
  • 继承和多态_Java零基础手把手保姆级教程(超详细)
  • AI:85-基于深度学习的自然场景生成与渲染
  • Windows电脑训练 RT-DETR 改进算法 (Ultralytics) 教程,改进RTDETR算法(包括使用训练、验证、推理教程)
  • flask框架报错解决方法
  • Ubuntu18.04 安装docker教程
  • 深入理解Git
  • Leetcode_203.移除链表元素—C语言
  • 虹科方案 | 汽车电子电气架构设计仿真解决方案
  • Java6种单例模式写法
  • Direct3D拾取
  • 大洋钻探系列之二IODP 342航次是干什么的?(上)
  • 离散时间系统模型
  • Nginx学习(在 Docker 中使用 Nginx)
  • 【Java】集合(一)单列集合List
  • 实战 | 基于卷积神经网络的蘑菇识别微信小程序
  • 如何选择共享wifi项目服务商,需要注意哪些?
  • ubuntu20.04 MYNTEYE S 相机运行与标定记录
  • 有效降低数据库存储成本方案与实践 | 京东云技术团队
  • 分布式数据库Schema 变更 in F1 TiDB
  • 图形库篇 | EasyX | 图像处理
  • AWTK UI 自动化测试工具发布
  • Java后端开发——JDBC入门实验