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成员函数,constant对象调用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成员函数吗?
答:可以,不可以,可以,可以