首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MISRA C++ 2008规则5-2-3建议:不应在多态类型上执行从基类到派生类的强制转换

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

Stack Overflow用户
提问于 2021-01-06 18:34:43
回答 1查看 159关注 0票数 0

在下面的示例中:

代码语言:javascript
复制
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:不应该在多态类型上执行从基类到派生类的强制转换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 18:45:28

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

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

代码语言:javascript
复制
bool test(const A* const p_A)

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

但是,您必须更新您的基类。请添加一个纯虚函数

代码语言:javascript
复制
virtual int getBid() const = 0; 

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

代码语言:javascript
复制
int getBid() const override;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65594155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档