从基类调用派生类c ++的函数

时间:2014-03-31 21:23:29

标签: c++ inheritance

如何调用派生类的功能,不带类型转换?

基本类型:

class Fruit{
public: 
    virtual void show() {cout « "its a fruct" « endl;}
};

子:

class Banana : public Fruit{
public: 
    void show() { cout « "it's yellow banana" « endl; }
};

派生指针数组

class Basket
{
  Fruit *fructs_; 
  //... 
public:
  void show();
  //...
};

void Basket:: show(){
  for(int i=0; i< index_; i++)
  (fructs_+i)->show(); // need call Banana::show here
}

1 个答案:

答案 0 :(得分:1)

由于基类和派生类的大小并发,因此不能多态使用C风格的数组。您应该使用std::vector Fruit smart pointers代替:

std::vector<std::shared_ptr<Fruit>> fruits;