我们可以有一个虚拟静态方法吗?(c++)

Can we have a virtual static method ? (c++)

本文关键字:c++ 静态方法 有一个 虚拟 我们      更新时间:2023-10-16

可能重复:
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,没有调用对象,因此在同一函数上同时使用staticvirtual是没有意义的.

不要认为这是可能的,因为您可以在没有对象A的情况下调用A::F();。将其虚拟化和静态化意味着矛盾。

否,static函数类似于全局函数,但也在类名称空间内。virtual意味着在派生类中继承和重新实现-不能重新实现"global"函数。

因为类没有this指针。里面有虚拟函数查找表。快速谷歌可以告诉你更多关于虚拟函数查找表的信息。