常量函数与常量对象的使用
常量函数形式: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;
}
常量函数与常量对象的使用相关推荐
- 【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )
文章目录 成员函数 常量函数 友元函数 new 创建对象 友元类 单例类 成员函数 此处继续上一篇博客继续向后讲解C++面向对象 类成员方法 , 除了定义构造方法与析构方法之外 , 还可以定义普通的成 ...
- c++常量函数的理解
常量类只能调用常量函数,对于普通的类的函数可以调用常量函数, 常量数据成员的定义只能在类的外面进行初始化, #include<iostream> using namespace std; ...
- c/c++ 函数、常量、指针和数组的关系梳理
压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习--无限循环中,好记性不如烂笔头--从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...
- 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用
一.数组指针和指针数组 1.数组指针(行指针) 首先要知道数组指针是指向数组的指针.所以数组指针本质是个指针,只不过指向一个数组而已.格式为:T (*ptr)[]. 注意:"[]" ...
- C++学习笔记:(二)函数重载 常量与引用
目录 3.函数重载 3.1 非成员函数重载 3.2 成员函数重载 3.3 函数的默认参数 3.4 内联函数 4.常量与引用 4.1 const的最初动机 4.2 const与指针 4.3 const与 ...
- 【Matlab入门】使用内置的函数和常量
使用内置的函数和常量 基本函数 三角函数 atan(a/b):根据正切求角度,范围为[−π2,π2{-}\frac{\pi }{2},\frac{\pi }{2}−2π,2π] atan2(a,b ...
- (P3-P4)constexpr修饰常量表达式和常量表达式函数
文章目录 1. const 2.constexpr 3.常量表达式函数 1. const 在 C++11 之前只有 const 关键字,从功能上来说这个关键字有双重语义:变量只读,修饰常量 eg: v ...
- php获取系统常量函数,PHP:从php文件中获取PHP的变量,函数和常量
有没有办法从php文件中获取用户定义的php函数,变量,常量? 以下功能并不是最好的方法,因为它们全部被打了 函数/变量/常量(具有数百个php的内置常量和内部php函数): get_defined_ ...
- mysql 函数定义常量_php如何定义一个自定义常量
PHP默认约定常量的标识符总是大写,而且常量的作用范围是全局,可以在脚本的任何地方访问.合法的常量名以字母或下划线开始,后 面跟任何字母.数字或下划线,字母总是大写.常量一旦定义,就不能再改变或者取消 ...
最新文章
- SVN-项目 XXX 受源代码管理。向源代码管理注册此项目时出错。建议不要对此项目进行任何修改...
- python装饰器改变命运
- [react] react中setState的第二个参数作用是什么呢?
- python中importlib模块安装_Python中标准模块importlib详解
- 抖音去水印解析网址入口_抖音去水印 视频去水印 小工具
- 新年到!充满年味的海报给你参考
- java 安装包_手机也可以编写Java程序代码?这些黑科技你值得拥有!
- 基数排序(也叫桶子排序)
- Flink 大规模作业调度性能优化
- ai修复照片软件是哪个软件_智能照片修复
- .Net 之时间轮算法(终极版)
- Tracert原理图解
- 保护您眼睛视力 对Win7/Vista/XP作如下设置
- h264流头类型分辨方法
- 孩子兄弟存储结构的几个统计算法实现
- 浅谈尾调用和尾递归(C语言)
- 直角三角形 纪中 1385 数学_斜率
- mysql优化工具 MySQL Tuner
- Android Telephony纲要
- 海康威视SDK登录失败,错误码为8