zoukankan      html  css  js  c++  java
  • const成员函数

    const成员函数在函数后面加一个const

    就像这样

    class Test
    {
    private:
    
    public:
            const int a;
            const int b;
            int Add() const;
    
    };
    
    int Test::Add() const
    {
            this->a++;
    
    }

    这样操作编译器会报错

    Untitled-1.cpp: In member function ‘int Test::Add() const’:
    Untitled-1.cpp:29:17: error: increment of member ‘Test::a’ in read-only object
             this->a ++;

    他说在这个函数里面 this->a 这个变量是只读的

    那我们读取一下

    class Test
    {
    private:
    
    public:
            const int a;
            const int b;
            int Add() const;
    
    };
    
    int Test::Add() const
    {
            cout<<this->a<<endl;
    }

    没有报错,通过了编译。

    所以印证了这个结论:
    有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的

    所以我们一般在名为get的函数后面加一个cosnt 表示这个函数不改变类的成员变量

    要注意一下在函数的声明和定义都要加cosnt

    cosnt 对象

    class Test
    {
    private:
    
    public:
            int a;
            int b;
            int GetA() const;
            int GetB();
            Test(int a,int b);
    };
    
    int Test::GetA() const
    {
            cout<<this->a<<endl;
            return a;
    }
    
    int Test::GetB()
    {
            cout<<this->b<<endl;
            return b;
    }
    
    Test::Test(int a,int b)
    {
            this->a = a;
            this->b = b;
    }
    
    int main(int argc, char const *argv[])
    {
            const Test test1(1,1);
            test1.GetA();
            test1.GetB();
    
            Test test2(1,1);
            test2.GetA();
            test2.GetB();
    }

    看一下这个例子

    我在类 Test 里面定义了两个函数:

    一个是用const修饰的成员函数 GetA

    一个是普通的成员函数 GetB

    在主函数中也用Test定义了两个对象

    const对象 test1 和 普通对象test2

    上面函数运行之后会报错,错误提示如下:

    Untitled-1.cpp: In function ‘int main(int, const char**)’:
    Untitled-1.cpp:50:20: error: passing ‘const Test’ asthis’ argument discards qualifiers [-fpermissive]
             test1.GetB();

    也就是说他不让我们在 test1 这个cosnt对象下使用 普通成员函数,当我们把这个调用注释掉之后,程序恢复正常

    所以印证结论:

    一旦对象被定义为const 对象之后,那么他就只能访问const成员

    ------------恢复内容结束------------

  • 相关阅读:
    vuePress搭建属于自己的站点。
    webpack打包取消所有的console.log语句
    浏览器使用input复制不成功解决办法。
    腾讯地图marker中大小的控制和事件绑定。
    VUE开发公众号IOS9白屏问题
    head.s 简单分析
    linux内核初始化控制流
    一直小菜鸟在学习飞翔。
    8种主要排序算法的C#实现
    我的Jquery参考词典
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12658611.html
Copyright © 2011-2022 走看看