c++ - 在 C++ 中使用 dynamic_cast 是不好的设计吗

标签 c++ dynamic-cast

我有一个 CAbstractNode 类,它有 5 个派生类

在 5 个中,只有 2 个(特殊)需要一个方法 SetValue() 和一个成员 int nVal;

//myFunction is virtual function of base(cAbstractNode) implemented in 2 special derived classes
myFunction(CAbstractNode * obj, int val)
{
    Derived_02 nodeObj = dynamic_cast<Derived_02*>(obj);

    if(res != NULL)
    {
        nodeObj->setValue(val);
    }

    //remaining code goes here...
}


//myFunction is virtual function implemented in remaining 3 derived classes ( setValue() is not needed here)
myFunction(CAbstractNode * obj, int val)
{

    //remaining code goes here...
}

我应该为 2 个派生类使用动态转换吗(如上所示)

我应该将 setValue() 方法作为 base(CAbstractNode) 中的虚拟方法吗 并在 2 个派生类中实现并且此方法在其他 3 个派生类中保持为空?

最佳答案

问题不是 dynamic_cast 本身,而是一种症状。在您的情况下,如果 myFunction 接受 CAbstractNode 接口(interface),它应该可以使用它。但无论出于何种原因,它必须了解 Derived_02 并调用其特定方法,这很可能表明 CAbstractNode 接口(interface)设计不当。或者至少设计不当,但由您决定是要修复界面还是保留解决方法。请记住,工程主要是妥协,完美的设计往往无法实现或不切实际。

关于c++ - 在 C++ 中使用 dynamic_cast 是不好的设计吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43307674/

相关文章:

c++ - 如何在基于 MFC 对话框的应用程序中为复选框捕获 MouseMove 事件?

c++ - 分配两个 double 保证产生相同的位集模式吗?

c++检查基引用的大多数派生类是否具有另一个基

c++ - 何时使用 dynamic_cast 的可接受示例?

c++ - 在每个实例的唯一虚拟 int type() 中使用静态转换来提高性能是否安全?

c++ - 是否可以从一个基类动态转换到另一个基类?

c++ - dynamic_cast 是常数时间吗?

C++ 双释放或损坏(出): Even with copy constructor and assignment operator

c++ - 黑白 char* str[]、char *str 和 char str[] 的区别

c++ - 内联函数什么时候不起作用?