2017-07-24 85 views
-1

如何從基類的數組中調用派生函數?從基類的數組中調用派生函數

例:

#include <iostream> 
#include <string> 

class a{ 

public: 
    virtual void prnt(){ 
     std::cout<<"a"<<std::endl; 
    } 
}; 

class b: public a{ 

public: 
    virtual void prnt(){ 
     std::cout<<"B"<<std::endl; 
    } 
}; 

int main() 
{ 
    a array[3]; 
    array[0] = a(); 
    array[1] = b(); 
    array[2] = a(); 

    array[1].prnt(); 
} 

這個例子的輸出是a

有無論如何解決這個問題嗎?

+0

_is有無論如何解決這個問題._修復它如何? –

+2

對於此代碼,'b'不是可能的輸出。你是不是指'a'? –

+0

是的。 A是我的意思。對不起,它在這裏遲到了。 – WEPIOD

回答

0

由於賈斯汀評論說,你目睹了object slicing的情況。讓你期望的行爲的一種方法是使用指針:以上

int main() { 
    a* array[3]; 
    array[0] = new a(); 
    array[1] = new b(); 
    array[2] = new a(); 

    array[1]->prnt(); 

    // Don't forget to delete them! 
    for (int i = 0; i < 3; ++i) { 
     delete array[i]; 
    } 
} 
0
array[1] = b(); 

是反對slicing.Read它here

多態性工作,只有指針和引用。

a *array[3]; 
array[0] = new a(); 
array[1] = new b(); 
array[2] = new a(); 

array[1]->print() 
相關問題