纯虚函数覆盖虚函数

时间:2013-09-28 10:20:56

标签: c++ inheritance polymorphism c++98 misra

假设给出了以下代码。

class A
{
public:
   virtual void someMethod()
   {
      std::cout << "class A" << std::endl;
   }
};

class B : public A
{
public:
   ...
   virtual void someMethod() = 0;
   ...
};

B使用 - 虚方法覆盖someMethod虚拟方法。 这样做的目的可能是在我们的case类A中不允许修改的现有类的扩展,但仍然有一个抽象类B,它必须是一些其他类的基类。 / p>

根据 MISRA-C ++规则10-3-3 :代码分析器发出警告:纯虚函数会覆盖非纯虚函数。

但我找不到有关警告的更多细节。上述代码的副作用是什么?这里有什么不好的做法?


更新:标准是MISRA-C ++(C ++ 98)

2 个答案:

答案 0 :(得分:5)

我在这里看不到任何谜团。代码分析器可能会根据MISRA标准检查您的代码,而不是C ++ 98标准。

MISRA是一套针对汽车环境的C / C ++编码标准,它对语言标准认为合法/允许的内容施加了进一步的限制。

您正在使用纯虚函数覆盖非纯虚函数,显然这对编译器来说是可以的,但不适用于MISRA规则。

也就是说,您的程序将编译并执行正常,并且符合语言标准,但可能不会被需要代码审查并符合MISRA标准的客户接受。

答案 1 :(得分:3)

我说你的代码按标准有效:

§10.4

  

5 [注意:抽象类可以从非抽象的类派生,,纯虚函数可以覆盖不纯的虚函数。 - 后注]