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

时间:2011-08-29 07:22:44

标签: c++ static virtual

  

可能重复:
  C++ static virtual members?

我们可以使用虚拟静态方法(在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

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

谢谢, 罗恩

4 个答案:

答案 0 :(得分:51)

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

因为该类没有this指针。在那里有虚函数查找表。快速谷歌可以告诉您有关虚拟功能查找表的更多信息。

答案 3 :(得分:1)

不,static函数就像全局函数一样,但也在类名称空间内。 virtual意味着派生类中的继承和重新实现 - 您无法重新实现“全局”功能。