[英]Can I override a virtual function with a pure virtual one?
我有三個班: B
, D
和G
D
是B
, G
是D
B
和D
都是抽象的。 B
來自第三方。
B
有一個G
需要實現的非純虛方法(成為D
)。 將虛擬函數重新定義/覆蓋為純虛擬,我可以並且是一種好習慣嗎?
例:
class B // from a third party
{
public:
virtual void foo();
};
class D : public B
{
public:
void foo() override = 0; // allowed by gcc 4.8.2
virtual void bar() = 0;
};
class G : public D
{
public:
// forgot to reimplement foo
void bar() override;
};
int main()
{
G test; // compiler error is desired
}
對於“我可以嗎?”的問題 gcc允許它,但是我沒有術語/詞匯表來驗證行為是標准的一部分還是未定義並且恰好在今天工作。
您詢問:
我可以使用純虛擬功能覆蓋虛擬功能嗎?
答案是:是的,你可以。 從C ++ 11標准:
10.4抽象類
5 [ 注意:抽象類可以從非抽象的類派生,純虛函數可以覆蓋不純的虛函數。 - 結束說明 ]
如果使用更現代的編譯器編譯代碼,那么您將收到以下錯誤消息來解釋該問題
prog.cc:23:6: error: variable type 'G' is an abstract class
G test; // compiler error is desired
^
prog.cc:10:9: note: unimplemented pure virtual method 'foo' in 'G'
void foo() override = 0; // allowed by gcc 4.8.2
^
1 error generated.
至於標准那么(10.3虛擬功能)
11 在一個類中聲明的虛函數應在該類中定義或聲明為純 (10.4),或兩者兼有; 但不需要診斷(3.2)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.