this指针?const函数?const对象成员?
程序员文章站
2022-07-12 15:38:17
...
#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)
也就是说各找各家,各找各妈吧。
上一篇: JavaScript学习(一):快速入门
下一篇: 面向对象 部分知识点
推荐阅读
-
c++-变量,this指针,全局函数,成员函数,自定义数组类
-
C++ const常量对象、常量成员函数和常引用
-
C++高级编程之对象模型、const、new和delete及其重载讲解
-
C++入门之new和delete关键字、静态成员属性与函数、this指针使用介绍
-
(转载)const的用法,特别是用在函数前面与后面的区别!
-
c语言初学-const指针
-
c/c++ const this指针
-
【转】forbids in-class initialization of non-const static member不能在类内初始化非const static成员
-
net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等
-
在C++中,函数名前的const和函数名后的const的区别详解