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

为什么静态成员函数不能是虚函数

在面向对象编程中,静态成员函数和虚函数都是常见的概念,但它们之间存在着本质上的差异。由于其特性上的差异,静态成员函数不能声明为虚函数。下面我们来探讨一下为什么静态成员函数不能是虚函数。

我在网上查到最多的说法是静态函数没有this指针,也就无法找到虚函数。所以静态成员函数不能是虚函数。他们的关键区别就是this指针。

我并不认可这个说法,假设一个基类指针指向一个子类地址,并且该子类完成了重写,现在我要调用该重写后的函数,过程是父类指针->vptr(虚函数表指针)->vtable(虚函数表) ->virtual(虚函数),因此我并不认为该过程需要用到this指针,除非该虚函数用了使用了类内成员。

我认为静态函数不能做虚函数主要是因为他们的概念本身就矛盾,静态函数的主要功能是提供类的全局功能,不依赖于特定对象的调用。而虚函数是用来实现多态的,多态的功能是使用统一的接口来处理不同类的对象,而无需关心对象的具体类型,从而实现代码的灵活性和可扩展性。

可以看到,静态函数的核心是不依赖对象,而多态的核心是基于不同对象,相互矛盾,因此静态成员不能是虚函数,因为没有意义,而并非技术上达不到。

以上纯属个人理解,有不同意见欢迎讨论。

http://www.lryc.cn/news/325134.html

相关文章:

  • python环境移植(本机windows到离线windows环境)
  • 蓝桥杯day9刷题日记
  • 阿里云数据库Cassandra的产品价格
  • 离散制造企业MES与流程企业MES的区别
  • 中国象棋C++
  • 记录一下目前为止的算法成长
  • AI大模型学习在数控系统工艺优化与智能制造中的应用
  • 安卓findViewById 的优化方案:ViewBinding与ButterKnife(一)
  • map和set(三)——红黑树
  • Day26 HashMap
  • 某蓝队面试经验
  • 【Linux】 centos7安装卸载SQL server(2017、2019)
  • 面试算法-110-课程表
  • 注册前后端php的检测
  • Redis:什么是redis?①
  • 【课程】MyBatisPlus视频教程
  • 如何使用人工智能和ChatGPT来优化营销转化率
  • Ubuntu 22.04上构建libvirt源码错误解决
  • 游戏客户端面经
  • AS,idea,maven,gradle
  • ElasTool v3.0 程序:材料弹性和机械性能的高效计算和可视化工具包
  • Redis入门级详解(一)
  • java算法题每日多道六
  • C# 特性(Attribute)
  • Redis 教程系列之Redis 配置(三)
  • Java实验03
  • 安卓studio连接手机之后,一两秒之后就自动断开了。问题解决。
  • 数字科技优化金融供给,内外协同激活新质生产力
  • 「Linux系列」Shell 输入/输出重定向
  • java实现word转pdf