假设给出以下代码。
class A
{
public:
virtual void someMethod()
{
std::cout << "class A" << std::endl;
}
};
class B : public A
{
public:
...
virtual void someMethod() = 0;
...
};
B
类用 pure 虚方法覆盖 someMethod
虚方法。
这样做的目的可能是现有类的扩展,在我们的案例类A
中不允许修改,但仍然有一个抽象类B
,它必须是基类一些进一步的类(class)。
根据 MISRA-C++ 规则 10-3-3:代码分析器给出警告:Pure virtual function override a non pure virtual function。
但是我找不到关于警告的详细信息。上述代码的副作用是什么?这里有什么不好的做法?
更新:标准是 MISRA-C++ (C++98)
最佳答案
我看不出这里有什么神秘之处。代码分析器可能会根据 MISRA 标准而不是 C++ 98 标准检查您的代码。
MISRA 是一套适用于汽车环境的 C/C++ 编码标准,它对语言标准假定合法/允许的内容施加了进一步的限制。
您正在用一个纯虚函数覆盖一个非纯虚函数,显然这对编译器来说是可以的,但对 MISRA 规则来说是不行的。
也就是说,您的程序可以正常编译和执行,并且符合语言标准,但可能不会被需要代码审查和符合 MISRA 标准的客户接受。
关于c++ - 纯虚函数覆盖虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19065836/