2012-09-25 35 views

回答

6

根據標準,您不能在類體內定義純虛函數。
儘管如此,一些編譯器確實支持這個功能。請注意,使用此擴展將使您的代碼在不同的編譯器中不可移植。

參考:

C++ 03 10.4第2段:

[注:函數聲明不能​​同時提供純說明符和定義末端說明】[實施例:

struct C 
{ 
    virtual void f() = 0 { }; // ill-formed 
}; 

末端示例]

2

語法不允許兩個= 0{ }的同時,讓你都應該單獨定義的析構函數,像在.cpp文件。

有些編譯器可能允許您的版本作爲擴展。

+0

@KirillKobelev:你錯了。[純虛擬方法可以有很多實現(定義)](http://www.gotw.ca/gotw/031.htm)。 –

+0

我沒有設計語言。 :-)析構函數必須總是有一個實現,因爲它是從派生類的析構函數中調用的。 –

1

Microsoft Visual Studio接受這種語法,坦率地說,海灣合作委員會編譯器似乎也不會不高興。 但是,它不是你應該擔心的編譯器,它是鏈接器。 在類定義(在頭文件中)中定義了純虛擬析構函數後,會得到同一符號的多重定義。我不是100%確定MSVC編譯器如何處理這種情況,但gcc可能會抱怨。另外,即使使用MSVC,當項目增長並分解成多個靜態/動態庫時,您可能會遇到麻煩。

相關問題