随着学习的深入,就会发现曾经学的const还有更深入的用法,现在就对const的未总结的用法进行总结。

本文就是针对const在类中的情况进行的总结。

有时我们会遇到下面这种将类的成员变量用const进行修饰的情况

class Coordinate
{
public:
Coordinate(int x,int y);
private:
const int m_iX;
const int m_iY;
}

在这种被const修饰过的成员变量进行赋值的时候需要注意:

Coordinate::Coordinate(int x,int y)
{
m_iX = x;
m_iY = y;
}

这种赋值方式是错误的,需要用初始化列表,如下:

Coordinate::Coordinate(int x,int y):m_iX(x),m_iY(y)
{
}

当然如果这个类的成员变量的类型是另一个类,也被const修饰,如下:

class Line
{
public:
Line(int x1,int y1,int x2,int y2);
private:
const Coordinate m_coorA;
const Coordinate m_coorB;
}

那么,他的初始化依旧是只能使用初始化列表:

Line::Line(int x1,int y1,int x2,int y2):
m_coorA(x1,y1),m_coorB(x2,y2)
{
cout<<"Line"<<endl;
}

当然,const不止能修饰成员变量,也能修饰成员函数,下面就对Coordinate类进行稍作添加修改:

class Coordinate
{
public:
Coordinate(int x,int y);
void changeX() const;
void changeX();
private:
const int m_iX;
const int m_iY;
}

其中,我们重载定义了两个changeX成员函数,其中一个用const修饰,那么我们需要注意下面一个问题:

void Coordinate::changeX() const
{
m_iX=;//错误
} void Coordinate::changeX()
{
m_iX=;
}

被const修饰的成员函数(即常成员函数)不能改变数据成员的值,

是因为编译时会变成下面的样子

void changeX(const Coordinate *this)
{
this->m_iX=;
}

会隐含着this指针,这个this指针是被const修饰的,可以看到关键字出现在星号的左边,表示被指物是常量,所以被指物的子项是不能进行赋值的。

虽然这两个changeX是重载的,但是一定要分清楚什么时候调用哪个。

int main(void)
{
const Coordinate Coordinate(,);//常对象
Coordinate.changeX();//调用的是常成员函数
return ;
}

只有用const修饰并声明的常对象才能调用常成员函数。

最新文章

  1. Xcode 创建.a和framework静态库(转载)
  2. 用EXcel制作不同背景的图
  3. Google Chrome浏览器调试入门————转载只为自己查看方便
  4. kvm相关文章
  5. 计时器(Chronometer)的使用
  6. 在java中json的使用案例
  7. css3的::selection属性
  8. C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
  9. python 常见错误和异常 函数 正则表达式及多线程编程
  10. [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
  11. 四、Html列表、块、布局
  12. linux虚拟机配置上网(静态IP)和配置tomcat服务环境
  13. mybatis基础系列(三)&mdash;&mdash;动态sql
  14. 统计uv(转)
  15. Netsharp下微信菜单以及OAuth
  16. VS Code搭建.NetCore开发环境(一)
  17. Android中如何实现EditText的自动换行
  18. PCI总线 DMA burst 基本概念
  19. CCF 交通规划(Dijkstra+优先队列)
  20. 20145314郑凯杰 《Java程序设计》第8周学习总结

热门文章

  1. Manacher算法(马拉车)求最长回文子串
  2. POJ 3155Hard Life(最大密度子图)
  3. cordova 一个将web应用程序封装成app的框架
  4. 小人大作战v0.02原型(单机)发布
  5. 【reactNative 大杂烩 好文章汇总 】
  6. TensorFlow Lite for Android示例
  7. python基础之七:set 集合
  8. WindowChrome
  9. Layui 模板引擎中用了CheckBox,显示时没有样式
  10. Vue模板语法(一)