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

对于类中的成员函数:

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

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

相关推荐
basketball6161 分钟前
C++ iomanip 常用函数
开发语言·c++
sanqima8 分钟前
C++里strcpy()拷贝的3种写法
c++·字符串拷贝
艾莉丝努力练剑10 分钟前
【Linux网络】Linux 网络编程:应用层自定义协议与序列化(2)序列化与反序列化
linux·运维·服务器·c++·网络协议·序列化
智者知已应修善业10 分钟前
【51单片机一个按键切合初始流水灯按一下对半闪烁按一下显示时间】2023-10-16
c++·经验分享·笔记·算法·51单片机
雪度娃娃35 分钟前
结构型设计模式——外观模式
c++·设计模式·外观模式
蜡笔小马1 小时前
05.C++设计模式-适配器模式
c++·设计模式·适配器模式
code_pgf1 小时前
Python `asyncio` 与 C++ Fiber 的原理与逻辑分析
c++·人工智能·python
小张成长计划..1 小时前
【C++】30:C++11之lambda,新的类功能和包装器
c++
fengenrong1 小时前
APIO2026游记
c++
会开花的二叉树1 小时前
从 C++ 转向 AI 应用工程:我的 Python 基础第一阶段复盘
c++·人工智能·python