C++ 纯虚函数重写虚函数

C++ 纯虚函数重写虚函数,c++,inheritance,polymorphism,c++98,misra,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; ... }; A类 { 公众: 虚拟方法() { std::cout我认为您的代码按照标准是有效的:

假设给出了以下代码

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

class B : public A
{
public:
   ...
   virtual void someMethod() = 0;
   ...
};
A类
{
公众:
虚拟方法()
{

std::cout我认为您的代码按照标准是有效的:

§10.4

5[注:抽象类可以从非抽象类派生,纯虚函数可以重写非纯虚函数-结束注]


我看不出有什么神秘的。代码分析器可能会根据MISRA标准检查你的代码,而不是C++ 98标准。 MISRA是一套适用于汽车环境的C/C++编码标准,它进一步限制了语言标准所允许的合法内容

您正在使用纯虚拟函数重写一个非纯虚拟函数,显然这在编译器中是可以的,但在MISRA规则中是不行的


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

这是C++11的virt说明符
final
的穷人版本吗?(C++11 10.3p4)如果这给了一个警告,那又有什么用呢?请检查更新的问题,标准是c++98可能与ok重复,让我回顾一下,但我需要一些时间,关于Liskov的可替代性的论文太多了。错误警告的不是编译器。但这是MISRA规则。这不是错误报告。MISHA认为这是一个不好的做法。(为什么不将::SomeMethod()声明为虚拟纯?)。这可能被认为是滥用MISHA规则。旁注:这在C++98和C++11中都是相同的。我们看不出两者之间有什么区别,包括引用的章节和段落注释。@Jarod42正如我在问题中提到的,我没有修改类A的权限,但仍然需要一个抽象类B,可能最好添加一些o是的,你说的绝对正确,我提到了C++98,正如C++11相关特性所指出的那样。