[英]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.