关于 常对象只能调用常函数成员,不能调用非const 函数成员问题,我有点想法

就是我想到的一个角度来解释为什么。

你看,常函数成员的特性就是要在函数后面加一个const 修饰关键字

以  int getX() const;为例,,将之作解析, 即, int getX(const Coordinate * this);
这次我们重点看的不是 const 修饰谁的问题, 而是 this 的类型问题

显然,这里的 this 的类型是 const Coordinate * 类型,

也就是说, 这个函数所需要接受的形参类型是 const Coordinate * 类型
问题来了  const Coordinate * 类型 和 Coordinate * 类型,到底是什么关系,还是没有关系的两种类型???

我想说的就是, 假定 const Coordinate * 和 Coordinate * 是两种类型,
因为 常对象的地址是const Coordinate * 类型,而成员函数调用的时候必须接收所在对象的指针
也就是说,常对象中的成员函数必须接收常对象的地址,也就是 const Coordinate * 类型地址
为此, 要符合类型的匹配,成员函数必须要用 const Coordinate * 类型的形参来接收,

所以必须将成员函数修饰为 const ,即常对象函数

只有这样才能满足类型的匹配!!!

void test()const 
{
cout << "jack is a good boy!!!" << endl;
}

void test ()
{
cout << "via via via " << endl;
}

/*这两个函数互为重载,可见  const Coordinate * 和 Coordinate *  确实不一样!!!*/

Jack_Lu

常对象只能调用常函数成员 c++相关推荐

  1. C++之常引用对象只能调用常成员函数、重载为成员函数和友元函数的区别

    近日写了一道题,遇到了新bug,使博主对C++的逻辑严密性有了更深的体会,特写此博客.本文标题是对两个bug的总结,即本文内容分为两部分. 题目如下: 设计一个CShape抽象类,类中包含纯虚函数   ...

  2. const对象只能调用const成员函数、不能调用非const成员函数;非const对象可以调用const成员函数

    引发原因: 由调用成员函数时隐式传入的当前对象的this指针引起. 1. 非const成员函数中的隐式参数:classA* this 2. const成员函数中的隐式参数:const classA* ...

  3. const对象不能调用非const成员函数

    在C++中,可以用const来定义一个const对象,但const对象不可以调用类中的非const成员函数 原因 引发原因:: 由调用成员函数时隐式传入的当前对象的this指针引起. 非const成员 ...

  4. 2020-12-16子类对象指针强转成父类对象指针,父类对象指针调用子类函数问题(待整理)

    当父类中声明某个函数为虚函数,并且子类重载了这个虚函数以后,用父类对象的指针可以调用子类的相应函数,但前提是该指针指向的对象是子类的对象,否则没有意义. 1.新建一个子类对象时,它首先执行它父类的构造 ...

  5. C++中的常引用、常对象、常函数、常数据成员

    1.常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改.常引用的声明形式为:const 类型说明符 &引用名. ...

  6. c/c++教程 - 2.4.3 this指针作用,链式编程思想,空指针访问成员函数,const修饰成员函数,常函数,常对象

    目录 4.3 C++对象模型和this指针 4.3.1 成员变量和成员函数分开存储 4.3.2 this指针概念(非常重要) 4.3.3 空指针访问成员函数 4.3.4 const修饰成员函数 相关教 ...

  7. C++常成员函数 常对象成员

    什么是常对象成员,什么是常成员函数? 首先先看一段代码: class A { private:const int a; // 常对象成员,只能在初始化列表赋值public:// 构造函数A() { } ...

  8. 常对象与常函数(Const修饰的对象与成员函数)

    常函数: 其定义与注意事项如下:     1.成员函数后加const后,我们称这个函数为常函数     2.常函数内不可修改成员属性     3.成员属性声明时加关键字mutable后,在常函数中依然 ...

  9. C++中常对象与常成员函数以及this与成员函数的联系与区别

    class A { }; /* 小记:对于const声明的对象,针对哪个变哪个不变得问题,实际上就是const后的整体不变 e.g.: const int *A; 或 int const *A; / ...

最新文章

  1. [matlab]Monte Carlo模拟学习笔记
  2. UART 和 USART 的区别 == 通用异步收发传输器 通用同步/异步串行接收/发送器
  3. Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR)
  4. 白话Elasticsearch03- 结构化搜索之基于bool组合多个filter条件来搜索数据
  5. [poj] 2749 building roads
  6. 执行计划oracle中cost,执行计划中cost计算方法
  7. Closure 代表匿名函数的类
  8. 全球破300万!小米11系列高端市场地位稳了
  9. ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu )[转载]
  10. python 数据挖掘算法
  11. RM3100 stm32 hal库 spi 磁力计数据
  12. 安卓WebView调起本地文件选择
  13. Python3简单的爬虫项目 爬取虎牙主播名字 人气
  14. ncbi blast MATLAB,NCBI在线版Blast使用(超详细奥)
  15. ilight app android,iLight pro
  16. ArcGIS之经纬度表格数据转矢量
  17. 【Android系统蓝牙开发】蓝牙基础知识-蓝牙核心系统架构
  18. 3d虚拟VR实训教学软件制作
  19. hdu 2550百步穿杨
  20. SolidWorks stp文件转成实体

热门文章

  1. JAVA——JAVA知识点集锦(上)
  2. 制作你的专属BB8机器人
  3. 《九宫格记忆网配置使用说明》
  4. 阿里技术类面试真题,你能做对几个?(含答案)
  5. jquery实现div的隐藏和显示和点击空白显示隐藏
  6. uni-app 快手小程序如何设置跟元素样式
  7. 中小企业如何才能招聘到合适的程序员?
  8. 期货市场之反转形态分析
  9. pandas 数据读取与保存
  10. ChatGPT聊天机器人如何发图片????