Upcast、Downcast的问题,求救!
小弟的程序需要动态分配出一个类的数组(CB* pB = new CB[3];),之后需要把这个数组的指针作为参数传递到函数里(void test( CA* pA, int num )),其中CA是CB的父类。之后在test函数里把这个指针当作CA来使用(在实际的工程中,test函数是某个只是使用了CA功能、而且不能被改变的部分)。还有,所有处理结束之后,指针pB还需要作为CB的指针来使用的。请问怎么做才能正确的Upcast和Downcast呢?
例程如下(现在的程序只能Upcast了数组里的第一个元素,其他的都无法改变):
class CA {
public:
void setA( int num ) { a = num; }
void doSth() {
printf( "A is: %d\n", a );
}
CA() { a = 0; };
private:
int a;
};
class CB : public CA {
public:
void setB( int num ) { b = num; }
void doSth() {
printf( "B is: %d\n", b );
}
CB() { b = 0; };
private:
int b;
};
void test( CA* pA, int num )
{
for( int i=0; i<num; i++ ) {
pA[i].doSth();
}
}
int main(int argc, char* argv[])
{
CB* pB = new CB[3];
pB[0].setA(1);
pB[1].setA(2);
pB[2].setA(3);
test( dynamic_cast<CA*> (pB), 3 );
int nTest;
nTest = getchar();
return 0;
}