C++中的常对象、常函数

一、常对象的概念

常对象就是用 const 修饰的对象,常对象必须初始化且不可被修改。

cpp 复制代码
//以日期类对象为例
const Date d1(2004, 5, 25);

二、常对象只能调用常函数

常对象只能调用常函数,不能调用其他函数。

以日期类为例,类中有成员函数Print

cpp 复制代码
//打印
void Print()
{
	cout << _year << "/" << _month << "/" << _day << endl;
}

const Date d1(2004, 5, 25);

d1.Print();

该代码报错,因为常对象只能调用常函数。分析深层次原因就是,Print函数中有隐藏形参this指针,其类型是Date* const this,是可读可写的;而常对象d1的类型是const Date,是只读的。如果将常对象d1调用Print函数,会发生权限的放大:原本只读的对象变为可读可写的对象,显然是非法的。

将Print函数改为常函数,常对象d1即可调用。

cpp 复制代码
//打印
void Print() const
{
	cout << _year << "/" << _month << "/" << _day << endl;
}

三、常函数的概念、总结

用const修饰的函数即为常函数(注:const修饰在函数后)

对于类中的成员函数:

如果成员函数对成员变量进行只读操作,那么可以将其改为常函数,常对象与普通对象都可调用。

如果成员函数对成员变量进行读写操作,那么不能改为常函数,只有普通对象可以调用。

相关推荐
景彡先生11 分钟前
C++中的RAII技术:资源获取即初始化
开发语言·c++
achene_ql1 小时前
手写muduo网络库(七):深入剖析 Acceptor 类
linux·服务器·开发语言·网络·c++
礼貌而已1 小时前
Vue3项目与桌面端(C++)通过Websocket 对接接口方案实现
开发语言·c++·websocket
Lenyiin1 小时前
第 87 场周赛:比较含退格的字符串、数组中的最长山脉、一手顺子、访问所有节点的最短路径
java·c++·python·leetcode·周赛·lenyiin
彷徨而立2 小时前
【C/C++】创建文件夹
c语言·开发语言·c++
虾球xz2 小时前
游戏引擎学习第315天:取消排序键的反向顺序
开发语言·c++·学习·游戏引擎
闻缺陷则喜何志丹2 小时前
【强连通分量 拓扑序】P9431 [NAPC-#1] Stage3 - Jump Refreshers|普及+
c++·算法·图论·拓扑序·洛谷·强连通分量
大白爱琴2 小时前
C++ 精简知识点
开发语言·c++
忘梓.3 小时前
AVL树的平衡艺术:用C++写出会“站立”的二叉树(未完待续)
开发语言·c++·oracle
程序猿小D3 小时前
第30节 Node.js C/C++ 插件
c语言·c++·后端·node.js·vim