常对象、常数据成员、常成员函数总结

本文详细解析了C++中常成员函数(const member function)的概念与应用,以及mutable关键字如何允许在常对象中修改特定成员变量。通过具体代码示例,深入探讨了这些特性如何帮助开发者在保持对象不变性的同时,实现灵活的数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# include <iostream>
using namespace std;

class Time
{
public:
	Time(int h = 10, int m = 30, int s = 59):hour(h), minter(m), sex(s){};
	//void out_value();
	void out_value() const; //常成员函数可以引用非常对象和常对象的成员变量(如输出或者计算),但不能修改
	void set_value(int, int, int);
	//void Time::set_sex(int);
	void Time::set_sex(int) const;  
private:
	int hour;
	//conset int hour;  //被定义为常数据成员,该变量只能通过参数初始化表初始化
						//可以被常成员函数和普通成员函数引用,但不能被修改
	int minter;
	int sex;
	//mutable int sex;  //声明为mutable后的常对象中的成员变量可以被修改,但只能被常成员函数修改
};
int main(void)
{
	//Time t1;
	//int *p;
	//t1.hour = 1;
	//p = &t1.hour; //无法指向私有对象成员变量

	//void (Time:: *p2)() = &Time::out_value;  //定义时指定指向的对象
	//(t1.*p2)();  //通过指向成员函数的指针调用函数

	//Time const t2(12, 34, 46);  //定义常对象时必须同时初始化,
	                              //只保证其数据成员是常数据成员,且不能调用它的普通成员函数
	//或者const Time t2(12, 34, 46);
	//t2.set_value(10, 10 ,10); //error,常对象的成员变量不能被修改
	//t2.set_sex(59);	//正确,sex声明为mutable,可以被常成员函数修改
	//t2.out_value(); //不能通过常对象调用它的普通成员函数,只能调用它的常成员函数
				
	

	return 0;
}
/*
void Time::set_value(int h, int m, int s)
{
	hour = h;
	this->hour = h;
	(*this).hour = h;

	minter = m;
	sex = s;
}*/
void Time::out_value() const
{
	cout << hour << ":" << minter << ":" << sex << endl;
}

void Time::set_sex(int s) const
{
	//sex = s;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值