常量函数形式:int fun(void) const;

注意:const int fun(void) 不是常量函数,只是函数的返回值为常量

#include <iostream>
using namespace std;
class DEMO
{
private:
    int a;
public:
    DEMO(int a=0):a(a){}

void show ()
    {
        cout<<"非常量函数:"<<endl;
        cout<<a<<endl;
    }

void show() const
    {
        cout<<"常量函数:"<<endl;
        cout<<a<<endl;
    }
    void set(int a)
    {
        this->a=a;
    }
};

int main()
{
    DEMO x;  //非常量对象
    const DEMO y;//常量对象

x.set(20);
    x.show();

//y.set(50);      y.set必须注释,常量对象在本函数中是无法编译过的,为什么?
    y.show();
    return 0;
}

执行结果:

非常量函数:20

常量函数:0

对象调用常量函数的规则:

1.非常量对象可以调用非常量函数和常量函数

2.常量对象可以调用常量函数,不可以调用非常量函数

3.常量函数与非常量函数构成重载时,非常量对象调用非常量函数,常量对象调用常量函数

为什么y.set(50)编译不过?

:1常量对象可以调用常量函数,不可以调用非常量函数,即使加个void set(int a) const常量函数也会出错,因为常量函数不能修改成员数据,每个成员函数隐藏了一个指向对象本身的this指针,this指针的类型取决于对象,常对象的this指针是常量指针,常函数无法通过this去修改对象对应的内存

解决方法:

把常量指针this强制转换为非常量指针

加个函数:

void set(int a) const;
{DEMO*p=const_cast<DEMO*>(this);p->a=a;
}

常量函数与常量对象的使用相关推荐

  1. 【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )

    文章目录 成员函数 常量函数 友元函数 new 创建对象 友元类 单例类 成员函数 此处继续上一篇博客继续向后讲解C++面向对象 类成员方法 , 除了定义构造方法与析构方法之外 , 还可以定义普通的成 ...

  2. c++常量函数的理解

    常量类只能调用常量函数,对于普通的类的函数可以调用常量函数, 常量数据成员的定义只能在类的外面进行初始化, #include<iostream> using namespace std; ...

  3. c/c++ 函数、常量、指针和数组的关系梳理

    压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习--无限循环中,好记性不如烂笔头--从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...

  4. 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用

    一.数组指针和指针数组 1.数组指针(行指针) 首先要知道数组指针是指向数组的指针.所以数组指针本质是个指针,只不过指向一个数组而已.格式为:T (*ptr)[]. 注意:"[]" ...

  5. C++学习笔记:(二)函数重载 常量与引用

    目录 3.函数重载 3.1 非成员函数重载 3.2 成员函数重载 3.3 函数的默认参数 3.4 内联函数 4.常量与引用 4.1 const的最初动机 4.2 const与指针 4.3 const与 ...

  6. 【Matlab入门】使用内置的函数和常量

    使用内置的函数和常量 基本函数 三角函数 atan(a/b):根据正切求角度,范围为[−π2,π2{-}\frac{\pi }{2},\frac{\pi }{2}−2π​,2π​] atan2(a,b ...

  7. (P3-P4)constexpr修饰常量表达式和常量表达式函数

    文章目录 1. const 2.constexpr 3.常量表达式函数 1. const 在 C++11 之前只有 const 关键字,从功能上来说这个关键字有双重语义:变量只读,修饰常量 eg: v ...

  8. php获取系统常量函数,PHP:从php文件中获取PHP的变量,函数和常量

    有没有办法从php文件中获取用户定义的php函数,变量,常量? 以下功能并不是最好的方法,因为它们全部被打了 函数/变量/常量(具有数百个php的内置常量和内部php函数): get_defined_ ...

  9. mysql 函数定义常量_php如何定义一个自定义常量

    PHP默认约定常量的标识符总是大写,而且常量的作用范围是全局,可以在脚本的任何地方访问.合法的常量名以字母或下划线开始,后 面跟任何字母.数字或下划线,字母总是大写.常量一旦定义,就不能再改变或者取消 ...

最新文章

  1. SVN-项目 XXX 受源代码管理。向源代码管理注册此项目时出错。建议不要对此项目进行任何修改...
  2. python装饰器改变命运
  3. [react] react中setState的第二个参数作用是什么呢?
  4. python中importlib模块安装_Python中标准模块importlib详解
  5. 抖音去水印解析网址入口_抖音去水印 视频去水印 小工具
  6. 新年到!充满年味的海报给你参考
  7. java 安装包_手机也可以编写Java程序代码?这些黑科技你值得拥有!
  8. 基数排序(也叫桶子排序)
  9. Flink 大规模作业调度性能优化
  10. ai修复照片软件是哪个软件_智能照片修复
  11. .Net 之时间轮算法(终极版)
  12. Tracert原理图解
  13. 保护您眼睛视力 对Win7/Vista/XP作如下设置
  14. h264流头类型分辨方法
  15. 孩子兄弟存储结构的几个统计算法实现
  16. 浅谈尾调用和尾递归(C语言)
  17. 直角三角形 纪中 1385 数学_斜率
  18. mysql优化工具 MySQL Tuner
  19. Android Telephony纲要
  20. 海康威视SDK登录失败,错误码为8

热门文章

  1. 555定时器(1)单稳态触发器电路及Multisim实例仿真
  2. Github开源:Sheng.RabbitMQ.CommandExecuter (RabbitMQ 的命令模式实现)
  3. 【电力电子技术课程设计】单相交流调压电路Simulink仿真
  4. 团购网如何成功实现平台化转型
  5. ASP.NET编写简单的中文分词程序
  6. 二、BGP的路由原理
  7. csv库的作用、怎么用、以及csv库的操作快速上手
  8. 阿里云腾讯云轻量应用服务器搭建网站教程
  9. 王道计算机考研j机试指南,王道论坛计算机考研机试指南 三 Hash的应用
  10. 配置ODBC驱动连接DM8数据库