2012-02-14 93 views
12

可能重複:
Why pure virtual function is initialized by 0?「= 0;」是什麼在C++中聲明純虛函數時做什麼?

我知道,爲了宣告你需要使用一個純虛函數 「= 0;」語法,如下所示:

class Foo 
{ 
protected: 
    Foo(); 
    virtual int getValue() = 0; 
}; 

我的問題是,什麼(在編譯器的內部工作)做「= 0;」語法呢?它實際上是否將函數指針設置爲零?它只不過是一種意圖聲明,就像Java和C#中的「抽象」保留字一樣,如果是這樣,爲什麼不在語言中添加諸如「abstract」之類的保留字而不是使用這種神祕的語法呢?

+0

此問題已答覆[here](http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0)。 – Nerdtron 2012-02-14 15:40:27

+6

因爲純粹的關鍵字對C++程序員來說太可讀了。 – orlp 2012-02-14 15:44:07

+0

@nightcracker:Bjarne Stroustrup對上下文關鍵詞(即,在某些情況下只是關鍵字而非其他情況下的關鍵字的標識符)保持警惕,並且正確,因爲它會使讀起來更加困難(即,您無法說出某個特定標識符是關鍵字還是並非沒有上下文)。我不能爲此責怪它。不過,他對引入完整關鍵字也很謹慎,這會產生所有那些奇怪的用法('static' !!!!)。 – 2012-02-14 16:08:35

回答

0

這意味着沒有「默認」的實現。任何派生類都需要實現它。

+1

請注意,純虛函數可以實現。 – Griwes 2012-02-14 15:41:05

0

它迫使你在子類中定義它。