假设给出了以下代码。
class A
{
public:
virtual void someMethod()
{
std::cout << "class A" << std::endl;
}
};
class B : public A
{
public:
...
virtual void someMethod() = 0;
...
};类B用纯-virtual方法覆盖someMethod虚拟方法。这样做的目的可能是扩展现有类,在我们的类A中不允许修改这些类,但是仍然有一个抽象类B,它必须是一些进一步类的基类。
根据,MISRA++规则10-3-3::代码分析器发出警告:纯虚拟函数覆盖非纯虚拟函数。
但我找不到关于这个警告的细节。上述代码的副作用是什么?这里有什么不好的做法?
更新:标准是MISRA-C++ (C++98)
发布于 2013-09-28 10:45:42
我看不出这里有什么神秘。代码分析器可能会根据MISRA标准检查您的代码,而不是C++ 98标准。
MISRA是一套针对汽车环境的C/C++编码标准,它对语言标准认为合法/允许的内容施加了进一步的限制。
您正在使用一个纯虚拟函数重写一个非纯虚拟函数,显然这在编译器中是可以的,但是对于MISRA规则则不是这样。
也就是说,您的程序将很好地编译和执行,并且将符合语言标准,但它可能不会被需要代码检查和符合MISRA标准的客户所接受。
发布于 2013-09-28 10:33:52
我认为您的代码按照标准是有效的:
第10.4节
注:抽象类可以从非抽象类派生,和纯虚函数可以覆盖非纯的虚函数。-end注记
发布于 2022-04-09 01:21:39
继承是反向的。
它具有B类继承的A类,B类具有纯虚函数。我相信你需要下面的代码。它说B的子类必须实现somemethod()。
class B
{
public:
...
virtual void someMethod() = 0;
...
};
class A : public B
{
public:
virtual void someMethod()
{
std::cout << "class A" << std::endl;
}
};https://stackoverflow.com/questions/19065836
复制相似问题