当前位置: 首页 > news >正文

C++:this隐藏参数

你是否有一个问题:C++中成员函数中究竟是如何访问成员变量的?

其实了解后回答起来这个问题很简单,通过一个不受限的隐藏参数this,this是类的指针,通过它可以访问到类内的各种成员。

明白了这个问题就很好理解:

  1. const成员函数为什么不能修改成员变量
  2. 静态成员变量为什么不能访问非静态成员
  3. 以及多态是如何实现的。

const成员函数不能修改成员变量,理解起来也很简单,其实是因为this这个隐藏参数被const修饰了,那么里面访问的内容都是const修饰的,但这并不意味着常成员函数内就不能修饰成员变量,实际上给成员变量加上mutable关键字就可以修改了。

需要注意常成员函数调用非常成员函数的时候被调用的函数不会变为常函数,需要注意这个const修饰的内容是什么

静态成员函数不能访问非静态成员也很好理解,因为它没有隐藏参数this,而常成员属于类不通过this也能调用

下面回答多态的实现过程:
首先多态分为静态多态和动态多态,静态多态有函数重载和模板的使用,动态多态则是父类对象或指针接收子类对象或指针(当然还包括引用)

静态多态有问题的话可以看一下多态的概念:一个接口,多种方法

静态多态是编译时进行的多态,动态多态的话则是在运行时确认的多态。
动态多态的实现其实就是通过this指针访问虚表然后再对虚表进行修改,父类接收子类时虚表的改变已经完成了,所以父类访问的是子类的虚表,相应的虚函数访问到的也是子类的虚函数。

所以说常成员函数和静态成员函数不能发生多态的过程

那么内联函数可以实现多态吗?
首先要明白内联的生效时间是编译期间,如果内联生效的话它的作用就像宏函数一样,如果不生效当然就可以实现多态,所以说具体情况还是要看编译器对内联函数的处理。

相关文章:

  • anaconda离线安装包的方法
  • 海康威视有插件、无插件播放;webrtc直播;西瓜视频播放器;mpegts.js直播;flvjs直播
  • Map和Set的封装
  • 【algorithm】一个简单的PID工程 base 用于手生时候快速复习 用于设计模式 cpp语法八股 快速复习校验
  • 电脑怎么录屏?打造专业级视频内容!
  • 监测Tomcat项目宕机重启脚本(Linux)
  • uniapp中封装一个svg转base64的组件
  • 算法练习03——滑动窗口
  • 氢气泄漏检测仪使用方法:守护安全,从细节开始
  • C++ 之LeetCode刷题记录(二十七)
  • 微服务框架go-zero集成swagger在线接口文档
  • 科普类(遥操作)——快速索引
  • 比瓴科技入围软件供应链安全赛道!为关键信息基础设施安全建设注入新动力
  • 银行数据仓库体系实践(8)--主数据模型设计
  • 如何手机搜智慧职教答案?3个受欢迎的搜题分享了 #微信#学习方法#笔记
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • JavaScript的使用你知道几种?(上)
  • Js基础——数据类型之Null和Undefined
  • js中的正则表达式入门
  • Map集合、散列表、红黑树介绍
  • Python语法速览与机器学习开发环境搭建
  • Web设计流程优化:网页效果图设计新思路
  • 阿里研究院入选中国企业智库系统影响力榜
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 关于springcloud Gateway中的限流
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 蓝海存储开关机注意事项总结
  • 前言-如何学习区块链
  • 如何进阶一名有竞争力的程序员?
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 新手搭建网站的主要流程
  • 一起参Ember.js讨论、问答社区。
  • 移动端 h5开发相关内容总结(三)
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #Z2294. 打印树的直径
  • (2)STL算法之元素计数
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (八)c52学习之旅-中断实验
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (五)MySQL的备份及恢复
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .Net 应用中使用dot trace进行性能诊断
  • :not(:first-child)和:not(:last-child)的用法
  • [ C++ ] STL_list 使用及其模拟实现
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [145] 二叉树的后序遍历 js