C++ 关于类中 const 的使用

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一.C语言 const 使用

关于 C 语言 const 相关内容不在过多介绍,可以直接跳转下面链接:

C语言 const 修饰变量

C语言 const 修饰指针

C语言 const 修饰函数返回值

C语言 const 修饰函数参数

C语言 const 和 define 区别


二.C++常函数

C++ 类中成员函数后加 const 后我们称为这个函数为常函数,例如:

class A {
public:
    void test() const{ //常函数
        value = 0;
    };
private:
    int value;
};

值得注意的是:常函数内不可以修改成员属性,否则编译报错 error: cannot assign to non-static data member within const member function ‘test’

解决办法:使用关键字 mutable 修饰成员变量,这样便可以在类的常函数中修改成员变量的值,例如:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C++ 关于类中 const 的使用
//@Time:2021/11/14 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <iostream>
using namespace std;

class A {
public:
    void test() const{ //常函数
        value = 0;
    };
private:
    mutable int value; //使用 mutable 关键字
};

int main()
{
    A a;
    a.test();
}

三.C++常对象

C++ 中声明对象前加 const 称该对象为常对象,例如:

class A {
public:
    void test() const{ //常函数
        value = 0;
    };
private:
    int value;
};
const A a;

1.常对象只能调用常函数

举个栗子:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C++ 关于类中 const 的使用
//@Time:2021/11/14 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <iostream>
#include <string>
using namespace std;

class Person {
public:
    Person() {
        m_A = 0;
    }

    void ShowPerson() const {
        cout << m_A << endl;;
    }

    void func()
    {
        this->m_A = 10;
    }

public:
    int m_A;
};

void test01() {

    const Person person; //常量对象  
    person.func();
    person.ShowPerson();
    cout << person.m_A << endl;
}

int main() {
    test01();
    return 0;
}
/*
error: this' argument to member function 'func' has type 'const Person', but function is not marked const
*/

编译结果提示:’this’ argument to member function ‘func’ has type ‘const Person’, but function is not marked const,this 和 func 的类型不匹配,去掉func的调用时程序运行正常,因为只调用了常函数 ShowPerson,或者把 func 也改为常函数,但是改为常函数后就不能修改成员变量。

2.常对象不能修改成员变量的值,但是可以访问

常对象的成员变量是只读的,举个例子:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C++ 关于类中 const 的使用
//@Time:2021/11/14 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <iostream>
#include <string>
using namespace std;

class Person {
public:
    Person() {
        m_A = 0;
    }

    void ShowPerson() const {
        cout << m_A << endl;;
    }

    void func()
    {
        this->m_A = 10;
    }
  
public:
    int m_A;
};

void test01() {

    const Person person; //常量对象  
    person.m_A = 100;
    person.ShowPerson();
    cout << person.m_A << endl;
}

int main() {
    test01();
    return 0;
}

/*
error: cannot assign to variable 'person' with const-qualified type 'const Person'
    person.m_A = 100;

*/

3.常对象修改成员变量的值(使用mutable

如果给成员变量加上关键字 mutable 关键字,常对象一样也可以对成员变量进行访问和修改值!


四.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C语言 main 函数参数 main(int argc, char *argv[])
  22. C语言 全局变量和局部变量区别
  23. C语言 static
  24. C语言 extern
  25. C/C++ Unicode 和多字节区别
  26. C/C++ wprintf 输出中文乱码
  27. C/C++ char 和 wchar_t 相互转换
  28. C/C++ NaN(Not a Number)
  29. C语言 枚举enum简介(一)
  30. C语言 枚举enum声明变量和使用(二)
  31. C语言 共用体union
  32. C语言 结构体struct简介(一)
  33. C语言 结构体struct定义和使用(二)
  34. C语言 结构体struct数组(三)
  35. C语言 结构体struct指针(四)
  36. C语言 结构体struct成员函数(五)
  37. C语言 结构体struct嵌套(六)
  38. C语言 结构体struct值传递和址传递(七)
  39. C/C++ error: cannot assign to non-static data member within const member function ‘xxxx’
  40. C++ 关于类中 const 的使用

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容