簡體   English   中英

純虛擬 function 覆蓋虛擬 function

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM