2014-03-31 33 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