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

对于类中的成员函数:

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

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

相关推荐
alwaysrun1 小时前
C++之常量体系const
c++·后端·程序员
郝学胜_神的一滴1 小时前
CMake 016:深入浅出变量核心用法
c++·cmake
学逆向的1 小时前
C++模板
开发语言·c++·网络安全
凡人叶枫1 小时前
Effective C++ 条款24:若所有参数皆须要类型转换,请为此采用 non-member 函数
linux·前端·c++·算法·嵌入式开发
j7~1 小时前
【C++】STL--string类--拆析解剖string类的实现以及string类的底层详解(2)
开发语言·c++·浅拷贝·深拷贝·string类的实现·string拷贝构造·string赋值重载
DogDaoDao2 小时前
C++核心技术深度剖析:从底层原理到工程实践
开发语言·c++·面试·程序员·指针·虚函数
磊 子2 小时前
C++移动语义和智能指针
java·开发语言·c++
不负岁月无痕2 小时前
C++继承与多态知识点及其高频面试问题
开发语言·c++·面试
Tairitsu_H2 小时前
[LC优选算法#4] 滑动窗口 | 串联所有单词的⼦串 | 最⼩覆盖⼦串
c++·算法·滑动窗口
kyle~3 小时前
机器人日志系统
c++·单片机·嵌入式硬件·机器人·ros2