c++多态问题,当传入参数为派生类对象数组的时候……
c++多态问题,函数形参为基类指针,调用时传入派生类对象时候可以根据派生类对象的不同选择相应的派生类的函数,可当传入的参数为指向派生类对象数组的首地址的时候,若想在函数内部获取数组中每个对象该如何做?
写了个测试程序如下:
#include<iostream>
using namespace std;
class CBase
{
public:
CBase(){};
virtual void Fun()
{
cout<<"This is Base."<<endl;
}
};
class CA : public CBase
{
public:
CA(){};
void Fun()
{
cout<<"This is CA."<<endl;
}
private:
// int a;
};
void Func(CBase *pCB)
{
for(int i=0;i<10;i++)
pCB[i].Fun();
}
int main(int argc, char* argv[])
{
CA *pA=new CA[10];
// cout<<"size of CA ="<<sizeof(CA)
// <<" size of CBase ="<<sizeof(CBase)<<endl;
Func(pA);
return 0;
}
当CA类中的int a;被注释掉时,程序运行正常,如果不注释则出错,在调试的时候对照过内存地址,发现问题是在基类的指针+1之后尽管传入的参数是派生类对象的指针,但进行+1操作后内存地址依然是移动基类的size大小,所以会不能索引数组,只有当基类和派生类的size碰巧一样大的时候,才可以。
想问问各位高手这种情况用什么方法解决呢?
想过的解决方式:1 在调用此函数的地方用循环,在循环中调用,所以只需传对象不用传数组
2 在函数体内加入判断,对不同的派生类的对象强制将指针转换为该类的指针,但失去了多态的意义了
想不到什么好的解决办法,各位给点意见