我们能有一个虚拟静态方法吗?(C++)

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

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C++ static virtual members?

我们可以有一个虚拟静态方法(C++)吗?我试图编译以下内容代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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;
}

但是编译器说:

1
member 'f' cannot be declared both virtual and static

所以我想答案是否定的,但为什么呢?

谢谢,罗恩


不,类中函数的static表示该函数不需要对象来操作。virtual表示实现取决于调用对象的类型。对于静态,没有调用对象,因此在同一个函数上同时使用staticvirtual是没有意义的。.


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


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


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