假设给出了以下代码。
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)
答案 0 :(得分:5)
我在这里看不到任何谜团。代码分析器可能会根据MISRA标准检查您的代码,而不是C ++ 98标准。
MISRA是一套针对汽车环境的C / C ++编码标准,它对语言标准认为合法/允许的内容施加了进一步的限制。
您正在使用纯虚函数覆盖非纯虚函数,显然这对编译器来说是可以的,但不适用于MISRA规则。
也就是说,您的程序将编译并执行正常,并且符合语言标准,但可能不会被需要代码审查并符合MISRA标准的客户接受。
答案 1 :(得分:3)
我说你的代码按标准有效:
§10.4
5 [注意:抽象类可以从非抽象的类派生,,纯虚函数可以覆盖不纯的虚函数。 - 后注]