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++;
}

 

C++基础——const成员函数_第1张图片

 

 特性:

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;
}

C++基础——const成员函数_第2张图片

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

 

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

C++基础——const成员函数_第3张图片         同样的,权限小的是不能调用权限大的!!! 

 

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

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

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

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

总结:

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

 

你可能感兴趣的:(C++,c++)