哪个更好,dynamic_cast或虚函数?

时间:2016-06-11 20:14:06

标签: c++

我正在处理一些遗留代码,我想知道哪种解决方案更好。 这是我的情况。有一个基类和许多(多级)派生类。

class Base
{};
class DerivedA1: public Base
{};
class DerivedA2: public Base
{};
class DerivedB1: public DerivedA1
{};
...
class DerivedXn: public DerivedS8
{
    void CheckSomething();
};

DerivedXn是我需要添加的新类,我必须提供一个函数CheckSomething()。现在出现了问题。在main函数中我只得到一个指向Base类的指针,所以最好在类Base中使用空实现声明CheckSomething()是虚拟的,还是使用指向DerivedXn类的指针dynamic_cast?

//solution 1
class Base
{
    virtual void CheckSomething(){}
};
class DerivedXn: public DerivedS8
{
    virtual void CheckSomething()
    {
        //do something
    }
};
main()
{
    Base *p = FromSomewhere();
    p->CheckSomething();
}

//solution 2
main()
{
    Base *p = FromSomewhere();
    DerivedXn *pd = dynamic_cast<DerivedXn*>(p);
    if(pd)
        pd->CheckSomething();
}

对于解决方案1,我担心它会破坏旧类的结构(即使新的虚函数什么都不做),因为CheckSomething()对于某些派生类来说是没有意义的。 对于解决方案2,我担心dynamic_cast需要花费太多时间。

从更好的角度来说,我的意思是干净,高效和结构良好的代码方式。如果你有其他好主意,那也很棒。

提前致谢。

PS:类Base中已经有一些其他虚函数,所以使用dynamic_cast不是问题。

0 个答案:

没有答案