c++ 类成员函数后加const

一、c++类成员函数后加const作用

  如下有一个YYTest类,在成员函数readValue中试图改变成员变量a的值是非法的。用const修饰的成员函数中不能改变成员变量的值,如果摸个成员函数只是获取数据,可以用const修饰,提高代码健壮性。用const修饰的成员函数叫“常量成员函数”。

  

二、类中的this指针

  类的成员函数中,编译器会默认传入一个指针this,如果访问一个成员变量a,实际上是通过this->a访问的。在下面的test函数中入参实际是这样的void test(YYTest *const this),编译器会默认传入一个YYTest类型的常量指针this。

从程序运行结果中可以看出,this的值就是yy的地址。

class YYTest
{
public:
    YYTest(int n)
    {
        a = n;
    }
    ~YYTest()
    {
        ;
    }
    void test()
    {
        printf("a = %d\n", a);
        printf("this->a = %d\n", this->a);
        printf("this = 0x%x\n", this);
    }
private:
    int a;

};

int main(void)
{
    YYTest yy(2);

    printf("yy addr is 0x%x\n", &yy);
    yy.test();


    system("pause");
    return 0;
}

程序运行结果:

  

三、常量成员函数的真实含义

  下面的YYTest类中的常量成员函数readValue中的默认this入参是这样的:int readValue(const YYTest *const this),用const修饰后的readValue函数this指针就变成了既是常量指针又是指针常量,对this本身和指向的内容都不能改变,所以在readValue里改变成员变量的值是非法的。

class YYTest
{
public:
    YYTest(int n)
    {
        a = n;
    }
    ~YYTest()
    {
        ;
    }
    int readValue() const
    {
        return a;
    }
private:
    int a;

};

 

posted @ 2021-04-10 13:38  YYFaGe  阅读(621)  评论(0编辑  收藏  举报