const成员函数及其权限
转载:https://blog.csdn.net/audience_fzn/article/details/80455236
const成员函数:在成员函数后加const,const修饰this指针指向的对象,这也就保证调用这个const成员函数的对象在内部不会被改变

首先我们要搞懂const放在不同的位置,它修饰的是谁
int main() { char* a = "hello"; char* b = "bit"; const char* p1 = a; char const *p2 = a; char* const p3 = a; p1 = b; //const修饰的是*p1,所以p1可以改变 //*p1 = "lucy"; //但是p1指向的内容(即*p1 )不能改变 p2 = b; //const修饰的是*p2,所以p2可以改变 //*p2 = "lucy"; //但是p2指向的内容(即*p2)不能改变 //p3 = b; //const修饰的是p3,所以p3不能被改变 if (*p3==NULL) *p3 = *b; //但是p3指向的内容可以被改变(即*p3) system("pause"); return 0; }
非const对象调用非const成员函数,const对象调用const成员函数

思考:
1. const对象可以调用非const成员函数和const成员函数吗?
2. 非const对象可以调用非const成员函数和const成员函数吗?
class Date { public: Date(int year, int month, int day) :_year(year) , _month(month) , _day(day) {} void Display1() { cout << _year << "-" << _month << "-" << _day << endl; } void Display2() const { cout << _year << "-" << _month << "-" << _day << endl; } private: int _year; int _month; int _day; }; int main() { Date d1(2018, 1, 1); d1.Display1(); //非const对象,调用非const成员函数 d1.Display2(); //非const对象,调用const成员函数 const Date d2(2018, 1, 1); //d2.Display1(); //const对象,不能调用非const成员函数 d2.Display2(); //const对象,可以调用const成员函数 system("pause"); return 0; }
答:1.const对象,不能调用非const成员函数,const对象,可以调用const成员函数
2.非const对象,可以调用非const成员函数,非const对象,可以调用const成员函数
权限可以放大但不能缩小,const相当于只拥有读权限,非const拥有读写的权限
3. const成员函数内可以调用其它的const成员函数、不可以调用非const成员函数
4. 非const成员函数内可以调用其它的const成员函数、可以调用非const成员函数

浙公网安备 33010602011771号