C++基础——const成员函数

 

目录

一.Const成员函数      

1.定义:

2.格式:

3.代码示例:

.h文件:

definition.cpp文件 

 特性:

例:

那么const对象既可以调用非const型成员函数吗?

问题3.const成员函数内可以调用其它的非const成员函数吗?

问题4. 非const成员函数内可以调用其它的const成员函数吗?

总结:


一.Const成员函数      

1.定义:

        将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,表明在该成员函数中不能对类的任何成员进行修改

        const修饰成员函数的时候,const需要放在成员函数的后面,不能放在一开始,,若是放在一开始的话,那么const修饰的是函数的返回值,而非是修饰成员函数了。

2.格式:

        返回值类型 函数名称 ( ) const {

                //函数体.....

                                }

3.代码示例:

.h文件:

class Date {
public:
	//构造函数不可以使用const修饰,构造函数若加了const就不能初始化值了
	Date(int year = 1199, int month = 12, int day = 15);

	void Print() const;

	void Reset1()const;
	void Reset2();
	void Reset3()const;
private:
	int _year;
	int _month;
	mutable int _day;
};

definition.cpp文件 

Date::Date(int year, int month, int day) {
	_year = year;
	_month = month;
	_day = day;
}
void Date::Print() const{
	cout << _year << "-" << _month << "-" << _day << endl;
}

void Date:: Reset1()const {	
	_day = 1;		
	_month = 2;
	_year = 1970;
}

void Date::Reset2() {	
	_day = 1;
	_month = 2;
	_year = 1970;
}

void Date:: Reset3()const {
	this->_day++;
}

 

 

 特性:

const修饰的成员函数:实际上修饰的是this指针指向空间的内容不可被修改
有了const修饰的成员函数,其this指针类型:const Date* const  (左定值,右定向)

而普通的成员函数:可以修改成员变量 ,其this指针类型:Date* const

 

例:

int main() {
	Date d1(2022, 9, 9);
	d1.Print();
	d1.Reset2();
	d1.Print();
	return 0;
}

  解析:d1是Date类型,可读可写,Reset函数可读可写,而Print函数仅可读,表明非const对象既可以调用const型成员函数,也可以调用非const型成员函数。 这是权限的平移和缩小。

 

那么const对象既可以调用非const型成员函数吗?

         同样的,权限小的是不能调用权限大的!!! 

 

问题3.const成员函数内可以调用其它的非const成员函数吗?

       不可以,若你把一个函数声明为const类型函数,那么就说明这个函数是只读的,不可修改,
而非const成员函数是可读可写的。

问题4. 非const成员函数内可以调用其它的const成员函数吗?

        可以,外层函数类型Date* const:是可读可写的,而内层函数类型是const Date* const:只读
外层可以修改也可以不修改,到底是否要修改,视情况而定。

总结:

        到底要不要使用const去修饰成员函数,就看你函数中的变量需不需被修改,如果不希望被修改,则加上即可。

 

  • 19
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙予清的zzz~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值