C++——const成员

这里先用队列举例:

cpp 复制代码
#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;
}

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

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

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


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

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

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

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

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

【BTW】:

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

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

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

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

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

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

相关推荐
无名猿11 小时前
shared_ptr 的线程安全边界:计数安全不等于对象安全
c++·内存管理·并发编程·现代c++
根目录下的猫11 小时前
ROS 2 C++(rclcpp)版本,实现话题订阅、话题发布,以及完整编译运行流程
开发语言·c++·算法
无名猿11 小时前
shared_mutex 读写锁该不该用,以及 volatile 的三大误解
c++·性能优化·并发编程·现代c++
大侠归来13 小时前
C 语言 | 在函数中操作数组
c语言·c++·算法
朝朝辞暮i19 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
郑同学的笔记20 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
随意起个昵称20 小时前
【背包dp】输出方案路径
c++·动态规划
朝朝辞暮i21 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
by2099921 小时前
学会使用std::string类,并理解其内部是如何管理字符串的详细阐述(上)
c++·笔记·字符串·类和对象·string
沙漠之主21 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++