纯虚函数覆盖虚函数
Pure virtual function overridding virtual function
假设给出以下代码。
class A
{
public:
virtual void someMethod()
{
std::cout << "class A" << std::endl;
}
};
class B : public A
{
public:
...
virtual void someMethod() = 0;
...
};
类 B
使用纯虚拟方法覆盖someMethod
虚拟方法。这样做的目的可能是扩展现有类,在我们的例子中不允许修改类A
,但仍然有一个抽象类B
它必须是一些进一步类的基类。
根据MISRA-C++规则10-3-3:代码分析器给出警告:纯虚函数覆盖非纯虚函数。
但我找不到有关警告的太多细节。上述代码的副作用是什么?这里的不良做法是什么?
更新:标准是MISRA-C++(C++98)
我在这里看不到任何神秘之处。代码分析器可能会根据 MISRA 标准而不是 C++ 98 标准检查您的代码。
MISRA是一套针对汽车环境的C/C++编码标准,它对语言标准所谓的合法/允许的内容施加了进一步的限制。
你用一个纯虚函数覆盖一个非纯虚函数,显然这对编译器来说是可以的,但对 MISRA 规则来说不是。
也就是说,您的程序将编译和执行良好,并且符合语言标准,但可能不被需要代码审查和符合MISRA标准的客户所接受。
我会说你的代码按照标准是有效的:
§ 10.4
5 [ 注意:抽象类可以从非抽象的类派生,纯虚函数可以覆盖非纯的虚函数。
继承是向后的。
它有 A 类由 B 类继承,B 具有纯虚函数。我相信你想要以下代码。它说 B 的子类必须实现 somemethod()。
class B
{
public:
...
virtual void someMethod() = 0;
...
};
class A : public B
{
public:
virtual void someMethod()
{
std::cout << "class A" << std::endl;
}
};
相关文章:
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 如何使用用户定义的函数覆盖 C lib 函数,如 _sbrk?
- 函数覆盖有哪些用例?
- 在子类函数覆盖中省略具有默认值的参数
- C++ 成员变量被非成员函数覆盖
- 用现有函数覆盖虚拟函数
- 函数覆盖是否由编译器自动完成
- 结构被库函数覆盖
- 当在Python中定义__str__时,如何将C 的标准全局函数覆盖
- C++类是否解决函数覆盖问题
- 用私有基函数覆盖公共虚拟函数
- 优先级队列中复制构造函数覆盖的值
- 虚拟函数覆盖预期错误
- C++中的函数覆盖无需"虚拟"即可工作
- C++虚拟函数覆盖
- 如何用非虚拟函数覆盖虚拟函数
- 基成员函数的所有重载是否可以被单个模板化成员函数覆盖和转发到
- C++继承函数覆盖
- 纯虚函数覆盖虚函数
- 引用项目的Qt-main()函数覆盖实际项目的main()