[英]Pure virtual function overridding virtual function
假設給出了以下代碼。
class A
{
public:
virtual void someMethod()
{
std::cout << "class A" << std::endl;
}
};
class B : public A
{
public:
...
virtual void someMethod() = 0;
...
};
Class B
用純虛方法覆蓋someMethod
虛方法。 這樣做的目的可能是現有的 class 的擴展,在我們的案例 class A
中不允許修改,但仍然有一個抽象 class B
必須以 class 為基礎,用於一些進一步的類。
根據MISRA-C++ 規則 10-3-3 :代碼分析器發出警告:純虛擬 function 覆蓋非純虛擬 function。
但是我找不到有關警告的更多詳細信息。 上述代碼的副作用是什么? 這里有什么不好的做法?
更新:標准是 MISRA-C++ (C++98)
我在這里看不到任何謎團。 代碼分析器可能會根據MISRA標准檢查您的代碼,而不是C ++ 98標准。
MISRA是一套針對汽車環境的C / C ++編碼標准,它對語言標准認為合法/允許的內容施加了進一步的限制。
您將使用純虛函數覆蓋非純虛函數,顯然這對編譯器來說是可以的,但不適用於MISRA規則。
也就是說,您的程序將編譯並執行正常,並且符合語言標准,但可能不被需要代碼審查和符合MISRA標准的客戶接受。
我會說你的代碼按照標准有效:
§10.4
5 [注意:抽象類可以從非抽象的類派生, 純虛函數可以覆蓋不純的虛函數 。 - 尾注]
inheritance 倒過來了。
它有 class A 被 class B 繼承。B 有純虛擬的 function。我相信你想要下面的代碼。 它說 B 的子類必須實現 somemethod()。
class B
{
public:
...
virtual void someMethod() = 0;
...
};
class A : public B
{
public:
virtual void someMethod()
{
std::cout << "class A" << std::endl;
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.