9

假设给出以下代码。

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

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

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

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

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


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

4

2 回答 2

5

我看不出这里有什么奥秘。代码分析器可能会根据 MISRA 标准检查您的代码,而不是 C++ 98 标准。

MISRA 是一组用于汽车环境的 C/C++ 编码标准,它对语言标准所谓的合法/允许的内容施加了进一步的限制。

您正在用纯虚函数覆盖非纯虚函数,显然编译器可以这样做,但 MISRA 规则不行。

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

于 2013-09-28T10:45:42.317 回答
3

我会说您的代码按照标准是有效的:

§ 10.4

5 [注意:抽象类可以派生自非抽象类,纯虚函数可以覆盖非纯虚函数。——尾注]

于 2013-09-28T10:33:52.830 回答