从类型基类的向量访问派生类方法

时间:2014-05-25 15:58:20

标签: c++ inheritance vector

在我的程序中,我有一个包含多个派生类的类。我正在尝试将派生类的所有实例存储在向量中。为此,向量具有基类类型,并且它们都存储在那里。但是当我尝试从向量访问属于派生类的方法时,我不能这样做,因为基类没有这个方法。有没有办法解决?下面的示例代码。

#include <vector>
#include <iostream>

using namespace std;

class base
{

};

class derived
    :public base
{

public:
    void foo()
    {
        cout << "test";
    }
};

int main()
{
    vector<base*> *bar = new vector<base*>();
    bar->push_back(new derived);
    bar->push_back(new derived);

    bar[0].foo();
}

1 个答案:

答案 0 :(得分:0)

foo课程中virtual base方法。然后在derived类中覆盖它。

class base{
     public:
        virtual void foo()=0;
};

class derived
:public base
{

public:
void foo() overide
{
    cout << "test";
} 
};

现在,您可以使用foo

的指针/引用来呼叫base
 int main(){  // return type of main should be int, it is portable and standard
  vector<base*> bar;  // using raw pointer is error prone
  bar.push_back(new derived);
  bar.push_back(new derived);

  bar[0]->foo(); 
  return 0;
}

了解polymorphismvirtual function