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成员函数

 

posted @ 2019-01-30 15:34  ren_zhg1992  阅读(369)  评论(0)    收藏  举报