2014-03-31 32 views
0

我如何调用派生类的函数,而不是类型转换?从基类调用派生类C++的功能

基类型:

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 
} 
+0

'香蕉' 不是 'Fruct' (fructs_ + i)基底 - >香蕉::秀();它将在相反的情况下工作(从香蕉指针调用Fruct方法) – punksta

+0

由于它是虚函数,它不会自动调用派生类吗? –

+0

@NeilKirk看看fructs_的类型。它的基类型指针。 – punksta

回答

1

C风格阵列不能被多态使用,因为用的尺寸的并发症的基类和派生类。您应该使用,而不是std::vectorFruitsmart pointers

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

或水果智能指针的矢量。 –

+0

@NeilKirk噢。 :) – 0x499602D2

+0

它不必是“智能”指针,但我同意使用智能指针比原始指针更好 – Pedrom