知乎用户 three passions govern my life
2 人赞同

可以把静态成员函数看作是“命名空间受限的普通函数”,所以它不能有运行时多态
发布于 2015-06-23 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

Elvis Wang C++程序员转型Java中
6 人赞同

其实我觉得这个问题没有回答的必要,属于语言概念层面的东西。
class A { 
int fun1() { ... }
static int func2() { ... }
}
首先你要搞清楚什么是普通成员函数。成员函数是类实例相关的,不同的实例对象调用成员函数结果一般都不同。
比如,上面的fun1是成员函数,你进行调用:
A *a1 = new A;A *a2 = new A;
a1->fun1();
a2->fun1();

一般来说,a1和a2调研fun1的结果会不同。成员函数在不同的实现里面设计不同,但大致都是在参数列表中隐式传入一个this指针指代当前实例。

静态函数,它其实就是普通函数。静态函数跟类实例没有关系,用a1和a2去调用结果一致,甚至于可以用A.fun2()的方式调用。静态函数调用时不会隐式传入this指针。

简而言之,成员函数实例相关,静态函数类相关。

虚函数,是一种特殊的成员函数,用来实现运行时多态的。

所以静态函数不可能是虚函数。

至于虚函数有什么特点,什么是多态,请自行Bing之。

c++静态成员函数为什么不能为虚函数?相关推荐

  1. 为什么静态static成员函数不能成为virtual虚函数

    首先什么是static静态成员函数?静态成员函数不属于类中的任何一个对象和实例,属于类共有的一个函数.也就是说,它不能用this指针来访问,因为this指针指向的是每一个对象和实例. 对于virtua ...

  2. c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解

    文章目录 静态多态.动态多态 虚函数 哪些函数类型不可以被定义成虚函数? 虚函数的访问方式 析构函数中的虚函数 虚函数表指针 vptr 多继承下的虚函数表 虚基类表指针 bptr 纯虚函数 抽象类 虚 ...

  3. c++ public 函数名相同_C++虚函数、重载、覆盖

    C++基础(五)虚函数.重载.覆盖.隐藏 虚函数总是跟多态联系在一起,引入虚函数可以使用基类指针对继承类对象进行操作!虚函数:继承接口(函数名,参数,返回值),但是实现不继承(函数体) 非虚函数:继承 ...

  4. 虚函数,虚函数表,虚函数实现原理,虚函数实现机制,虚函数解决的问题

    虚函数 虚函数表 虚函数实现原理? 虚函数解决的问题?虚函数解决问题的实现机制? 虚函数模型的构建? 虚函数模型的应用?

  5. 析构函数可以为纯虚函数吗?纯虚函数可以有函数体吗?纯虚函数需要函数体吗?

    先回答标题中中的几个问题: 析构函数可以为纯虚函数吗? yes. 纯虚函数可以有函数体吗? yes. 纯虚函数需要函数体吗? 一般来讲,如果析构函数是纯虚函数,那么析构函数必须要有函数体,如果是其它函 ...

  6. 什么函数不能声明为虚函数

    1.普通函数(不能被覆盖) 2.友元函数(C++不支持友元函数继承) 3.内联函数(编译期间展开,虚函数是在运行期间绑定) 4.构造函数(没有对象不能使用构造函数,先有构造函数后有虚函数,虚函数是对对 ...

  7. C++ 哪些函数不能声明成虚函数

    在C++,有五种函数不能被声明成虚函数,分别是:非成员函数.构造函数.静态成员函数.内联成员函数.友元函数这五种,下面分别解释为什么这五种函数不能被声明成虚函数. 1. 非成员函数 非成员函数只能被重 ...

  8. C++ 虚函数成员和纯虚函数

    一般虚函数成员的声明语法是: virtual 函数类型 函数名(形参表); 在类的定义使用virtual关键字来限定成员函数,虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候出 ...

  9. 函数的多态性以及虚函数

    包含一个及一个以上的纯虚函数的类就是抽象基类,抽象基类没有也不能必要定义对象. **#include <iostream> using namespace std; class Shape ...

最新文章

  1. linux标准i/o,Linux 标准I/O笔记
  2. C#中String与 StringBuilder 的区别
  3. python文本菜单程序_python3.x Day1 菜单程序练习
  4. SpringBoot @Configuration •@Import •@Conditional•@ImportResoure基本使用
  5. 对信号集操作函数的使用方法和顺序
  6. 通过示例休眠–第1部分(删除孤儿)
  7. multisim高频小信号放大器_什么是放大器及其用处_光纤传感器_传感器
  8. wcf编程用什么工具_四个强大的自学编程网站工具,用的人都是学习欲望很强!...
  9. Web服务器常用设置
  10. 美国人民:机器人好棒棒,花钱买一个?1000块不能再高了
  11. 聊聊Elasticsearch的CachedSupplier
  12. HDU 6155 Subsequence Count(矩阵 + DP + 线段树)题解
  13. 计算机软件行业代码,行业代码大全.docx
  14. 利用Epplus将数据导出到Excel
  15. [Swift]Swift中的extension
  16. 这竟然是全世界最好的模式(商业大佬为之咂舌)
  17. 新换的手机号码被人注册了微信怎么办?
  18. mysql可以存储拼音吗_MySQL汉字变换拼音(存储函数)
  19. servlet+javabean+jdbc+mysql基于MVC模式的课件管理系统,有三个表的增删改查和课件搜索、课件上传、课件下载功能, 具体功能请看界面上的导航条
  20. 《解忧杂货店》读书笔记

热门文章

  1. 徐海学院计算机专业好吗,2019中国矿业大学徐海学院专业排名
  2. 域控下发脚本_域环境下做到单用户登陆控制脚本
  3. zincrby redis python_【Redis数据结构 序】使用redis-py操作Redis数据库
  4. 鼠标图标怎么自定义_酷鱼魔鼠——给鼠标添加酷炫的特效
  5. linux安装sz rz_超级好用的文件传输命令rz与sz
  6. 手机python3l运行_Python3 os.lchflags() 方法
  7. jpa多表关联查询_Spring Boot 整合mybatis如何自定义 mapper 实现多表关联查询
  8. python视窗编程_[PYTHON] 核心编程笔记(19.图形用户界面编程)
  9. php时间戳本周,php获取今天,昨天,本周,上周,本月,上月的起止时间戳
  10. 计算机意外关闭原因 安全问题,win7弹出“计算机意外地重新启动或遇到错误”处理方法...