this指针?const函数?const对象成员?
来源:互联网 发布:卫衣好看的淘宝店铺 编辑:程序博客网 时间:2024/05/18 00:45
#include<iostream>using namespace std;class Coordinate{public:Coordinate(){}~Coordinate(){}void setNum(int x){cout<<"YES"<<endl;}int getNum(){return m_iNum;}private:int m_iNum;};int main(){const Coordinate coor;coor.setNum(3);}
上面这个代码是会报错的,我们首先分析一下。
首先我们调用了常对象coor的setNum函数
这个函数,因为C++的特性,帮我们省略了一个参数
实际上这个函数应该是
void setNum(Coordinate*this,int x)
这里的this,其实也就是我们实例化出来的对象
这个this,是可读可写的,但是我们如果调用了常对象coor的setNum函数,就相当于传进去了一个只读不可写的this
显然不合规矩。
但是我们如果改变一下
#include<iostream>using namespace std;class Coordinate{public:Coordinate(){}~Coordinate(){}void setNum(int x)const{cout<<"YES"<<endl;}int getNum(){return m_iNum;}private:int m_iNum;};int main(){Coordinate coor;coor.setNum(3);}我们用一个普通的对象调用它这个类里面的const函数可不可以呢?
答案是可以的,我感觉这是因为这是一种权限大到权限小的改变
也就是说,我可读可写,所以你限制我变成了只可读,这是可以的。
void setNum(int x)等价于void setNum(Coordinate*this,int x)
void setNum(int x)const等价于void setNum(const Coordinate*this,int x)
还有要注意的是,void setNum(int x)和void setNum(int x)const是互为重载的,也就是说,假如我定义了一个
const Coordinate coor1,
还有
Coordinate coor2
那么我们如果都各自调用setNum这个函数,那么就会分别匹配,coor1会调用void setNum(int x)const,coor2会调用void setNum(int x)
也就是说各找各家,各找各妈吧。
阅读全文
0 0
- this指针?const函数?const对象成员?
- C++之this指针和const对象/成员函数
- this指针及const成员函数
- 类 this指针 const成员函数
- C++ this指针与const成员函数
- const变量、const指针、const参数、const对象、const成员函数
- const对象const成员函数
- C++const对象 常量数据 常量成员函数 const指针 const引用
- 【C++总结】函数形参,返回const对象与非const对象,成员函数,函数指针
- const对象调用非const成员函数
- const成员函数与const对象
- const对象和const成员函数
- const对象与const成员函数
- const对象和const成员函数
- const成员函数与const对象
- const对象,const成员函数总结
- const对象和const成员函数
- const修饰成员函数const修饰对象
- Shiro(三) 会话管理
- 先码后看 java闭包 侵立删
- 非技术手段获取同学信息
- PHPExcel读取Excel文件出现内存不足
- 比特币协议杂谈(2)
- this指针?const函数?const对象成员?
- ContentProvider
- Yarn核心——RPC(2) Hadoop RPC
- c++获取键盘输入cin、scanf使用详解
- Linux查看负载 uptime,w ,top,iostat 命令
- 分组排序之后,查询每组排序第一的记录
- CodeForces
- 思维水题:UVa512-Spreadsheet Tracking
- JMeter---ForEach循环控制器实例