簡體   English   中英

C ++在派生類指針數組上調用虛擬函數

[英]C++ Calling virtual functions on array of derived class pointers

我有一個指向派生類對象的指針數組。
該代碼始終調用Base::func() ,即使它在基類中是虛擬的,並且在數組中也只有派生類對象。

double Base::func2(){
    ...
    for(unsigned i=0;i<elementNum;i++){
        array[i]->func1();
        ...
    }

具有虛擬功能的Base:

class Base{ 
        ...
public:
    virtual double func1()
};

派生類:

class Derived: public Base{
        ...
public:
    double func1(){...}
};

有一個推功能可能導致此問題:

template<typename T>
void Stack::push(T element){
    Base** pTemp= new Base*[elementNum+1];
    for(unsigned i=0;i<elementNum;i++){
    pTemp[i]=new Base;
    *pTemp[i]=*array[i];
}
pTemp[elementNum]=new Base;
*pTemp[elementNum]=element;
delete[] array;
array=pTemp;
elementNum++;
return;
}

有一個推功能可能會導致問題

發現! 在分配給臨時數組時,您將分割原始數組中對象的派生部分(如果首先存在Derived對象,則不會顯示相關代碼):

pTemp[i]=new Base;    // creates a Base object
*pTemp[i]=*array[i];  // object slicing here, Derived part gets lost

在此處閱讀有關對象切片的更多信息。

如果希望保留對象的動態類型,則需要復制指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM