【发布时间】:2014-04-27 12:04:53
【问题描述】:
我有一个指针数组,指向派生类对象。
代码总是调用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;
}
【问题讨论】:
-
信息不足。请,我们需要一个简短的可编译示例来重现您的问题 (SSCCE)。
-
你似乎有两个
double Base::func()的实现。 -
看起来您对
Base::func()有两个定义——一个在课堂内,另一个在课堂外?我建议您发布更多上下文和/或显示问题的小型工作示例,因为这肯定是不正确的。 -
@Soren 我想这只是一个错字。编译器会为此发出错误。
-
对不起,这个论坛的新手,有2个不同的功能
标签: c++ arrays function pointers virtual