c++ - 纯虚函数覆盖虚函数

标签 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;
   ...
};

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/

相关文章:

c++ - 结构成员变量不变

c++ - 如何在 C++ 中记录函数的堆栈返回地址

c++ - 使用可选参数覆盖虚函数

JAVA无法通过强制转换找到子类方法

c++ - 继承类的数组

c++ - union 查询和 C++

javascript - 原型(prototype)继承相对于经典继承的好处?

c++ - 抽象类中的运算符 <<,C++

c++ - 将重载函数与其多态参数匹配

c++ - 是否可以在结构之外编写自动转换运算符?