2011-08-29 93 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意味着派生類中的繼承和重新實現 - 你不能重新實現'全局'函數。

相關問題