MISRA C++2008规则5-2-3建议:从基类到派生类的强制转换不应在多态类型上执行



在以下示例中:

class A
{
public:
A();
virtual ~A();
int getID() const;
private:
int m_ID;
};
Class B : public A
{
public:
B();
virtual ~B();
int getBid() const;
private:
int m_Bid;
};
bool test(const A* const p_A)
{
if(5U == static_cast<const B* const>(p_A)->getBid())
{
....
}
else
{
...
}
}

我已经报告了MISRA 5-2-3,但我现在不知道如何解决它。

MISRA 5-2-3:从基类到派生类的转换不应在多态类型上执行。

MISRA检查器是正确的。你不应该做static_cast

你需要更好地理解多态性。调用函数时

bool test(const A* const p_A)

还可以使用指向派生类的指针。并且,通过使用vtable,将使用正确的函数。所以,不要沮丧。

但是,您必须更新基类。请添加纯虚拟功能

virtual int getBid() const = 0; 

在基类中。然后您可以在派生类中重写this函数。

int getBid() const override;

如果其他函数用指向派生类的指针调用bool test(const A* const p_A),那么将调用正确的函数。

最新更新