目录
问题3.const成员函数内可以调用其它的非const成员函数吗?
问题4. 非const成员函数内可以调用其它的const成员函数吗?
将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,表明在该成员函数中不能对类的任何成员进行修改。
const修饰成员函数的时候,const需要放在成员函数的后面,不能放在一开始,,若是放在一开始的话,那么const修饰的是函数的返回值,而非是修饰成员函数了。
返回值类型 函数名称 ( ) const {
//函数体.....
}
- 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;
- };
- 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成员函数是可读可写的。
可以,外层函数类型Date* const:是可读可写的,而内层函数类型是const Date* const:只读
外层可以修改也可以不修改,到底是否要修改,视情况而定。
到底要不要使用const去修饰成员函数,就看你函数中的变量需不需被修改,如果不希望被修改,则加上即可。