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

对于类中的成员函数:

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

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

相关推荐
老当益壮梁奶奶4 小时前
Linux软件编程学习笔记(七):线程分离与线程间通信详解
linux·c语言·c++·笔记·学习
水饺编程9 小时前
第5章,[Win32 章节] :绘图模式
c语言·c++·windows·visual studio
INGNIGHT9 小时前
1908 · 布尔表达式求值(stack单调栈&dfs)
开发语言·c++·算法
小小杨树10 小时前
【C++】学习:双缓冲视频流水线深解析
c++·性能优化·音视频开发
青少儿编程课堂11 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
赵民勇11 小时前
C++无锁编程详解
c++
醉颜凉11 小时前
C++ 中野指针与悬挂指针的区别:从成因到防范,彻底讲清两种危险指针
c++
Demon--hx11 小时前
设计不能被继承的类
开发语言·c++
兔兔兔兔111 小时前
记录C++ 13
开发语言·c++·算法
开心大爆炸12 小时前
ubuntu20.4 安装ros1 noetic版本流程
c++