2011-08-29 112 views
34

可能重复:
C++ static virtual members?我们可以有一个虚拟的静态方法吗? (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 

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

感谢, 罗恩

回答

47

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

2

因为这个类没有this指针。在那里有虚拟函数查找表。快速谷歌可以告诉你更多关于虚拟功能查找表。

4

不要以为这是可能的,因为你可以打电话A::F();,而没有对象A. 使它虚拟和静态将意味着一个矛盾。

+3

啊哈,那么静态意味着*这个不存在,虚拟意味着该方法有一个这个指针。两者的结合是矛盾的。尼斯:)谢谢 –

1

不,static函数就像全局函数一样,也是类里面的命名空间。 virtual意味着派生类中的继承和重新实现 - 你不能重新实现'全局'函数。

相关问题