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修饰在函数后)

对于类中的成员函数:

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

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

相关推荐
青瓦梦滋6 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
CodeYp201912 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
pipixia2003312 小时前
C++继承面试四连问:内存叠加、私有继承、sizeof、权限重映射
c++·面试·嵌入式·继承·面向对象·对象模型
牵猫散步的鱼儿15 小时前
C++ 内存分区
c++
choumin15 小时前
C++ 标准容器为什么不能存引用
c++·容器·引用类型
谙弆悕博士15 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室
stolentime16 小时前
CF2277E Tree Guessing题解
c++·算法·贪心算法·交互·ad-hoc
syagain_zsx17 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小鱼仙官17 小时前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
晚风予卿云月18 小时前
【C++高并发内存池】 1.定长内存池的实现
开发语言·c++·内存管理