C ++ vector基类和继承

时间:2017-04-10 16:12:46

标签: c++ c++11 inheritance vector unique-ptr

对于我的项目,我有这个类结构:

class Base
{
        enum class type
    {
        Derived1,
        Derived2
    }

    int getType() {return type;};

    type        type;
    //general methods & attributes
}

class Derived1 : public Base
{
    //specific methods & attributes
    void        uniqueSpecificMethodOfDerived1();
}

class Derived2 : public Base
{
    //specific methods & attributes
    void        uniqueSpecificMethodOfDerived2();
}

class Core
{
    vector<unique_ptr<Base>>        tab;
    void                            iterate();
}

void        Core::iterate()
{
    tab.emplace_back(new Derived1());
    tab.emplace_back(new Derived2());

    vector<unique_ptr<Base>>::iterator it;

    for (it = tab.begin(); it != tab.end(); ++it)
    {
        if ((*it)->getType())
            (*it)->uniqueSpecificMethodOfDerived1(); //unknow function Can't resolve 'uniqueSpecificMethodOfDerived1()'
        if ((*it)->getType())
            (*it)->uniqueSpecificMethodOfDerived2(); //unknow function Can't resolve 'uniqueSpecificMethodOfDerived1()'
    }
}

我的问题是我无法在此向量中达到派生类的特定方法。我不想使用多态,因为这些函数完全不同,其他派生类也不需要。

我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

  

我的问题是我无法在此向量中找到派生类的特定方法。我不想使用多态,因为这些函数完全不同,其他派生类也不需要。

     

我怎么能这样做?

该语言提供了两种机制,可以在给定指向基类的指针/引用的情况下访问派生类中的函数。

  1. 通过多态性。
  2. 通过div#styled-select直接访问派生类函数。
  3. 您可以构建一些函数层,允许您在不使用dynmaic_cast显式使用客户端代码的情况下访问派生类的直接接口,但如果不使用多态,则必须在某些时候使用dynamic_cast一个选项。

    以下是直接使用dynamic_cast的代码的更新版本。

    dynamic_cast