我们可以有一个虚拟静态方法吗?(c++)
Can we have a virtual static method ? (c++)
可能重复:
C++静态虚拟成员?
我们可以有一个虚拟静态方法(在C++中(吗?我试图编译以下内容代码:
#include <iostream>
using namespace std;
class A
{
public:
virtual static void f() {cout << "A's static method" << endl;}
};
class B :public A
{
public:
static void f() {cout << "B's static method" << endl;}
};
int main()
{
/* some code */
return 0;
}
但编译器说:
member 'f' cannot be declared both virtual and static
所以我想答案是否定的,但为什么呢?
谢谢,Ron
否。类中函数的static
表示该函数不需要对象进行操作。virtual
表示实现取决于调用对象的类型。对于static,没有调用对象,因此在同一函数上同时使用static
和virtual
是没有意义的.
不要认为这是可能的,因为您可以在没有对象A的情况下调用A::F();
。将其虚拟化和静态化意味着矛盾。
否,static
函数类似于全局函数,但也在类名称空间内。virtual
意味着在派生类中继承和重新实现-不能重新实现"global"函数。
因为类没有this
指针。里面有虚拟函数查找表。快速谷歌可以告诉你更多关于虚拟函数查找表的信息。
相关文章:
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 如何通过命名空间调用非静态方法
- 如何在没有实例的情况下获取非静态方法的类型?
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在 c++ 中异步调用静态方法?
- C++ 将静态方法转换为简单方法
- 从另一个标头中的标头调用静态方法
- C++中静态方法的局部变量范围
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 使用本机 JNI 静态方法实现C++ Java 运行时错误
- 当只有静态方法受到影响时,如何解决C++中的链接器错误?
- 静态变量在同一个翻译单元中被静态方法使用时是否保证被初始化?
- 为什么链接器报告全局函数的乘法定义符号,而不是类静态方法
- 从部分专用模板方法调用模板非静态方法
- 如何使用 c++ 在 cocos2dx 中定义非静态方法
- 使用 CMake 的静态方法链接错误
- 在子类上调用模板化静态方法时获取类的类型名
- 仅具有公共静态方法的帮助程序类
- 调用没有主体的未实现静态方法
- 如何从C 的朋友类访问私有静态方法