• 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成员

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

  • 相关阅读:
    [08] 包装器类
    [07] String字符串
    [06] Java的数据类型
    [05] 利用private来封装
    [04] 包和访问权限修饰符
    [03] 类的结构和创建对象
    [02] 类和对象
    [01] Java语言的基本认识
    通过Excel认识POI
    浅谈SQL优化入门:3、利用索引
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12658611.html
Copyright © 2020-2023  润新知