Eps*_*tor 2 c++ polymorphism typechecking
假设我们有一个A类,B和C继承它.然后我们创建一个对A的引用数组,并用B和C填充它.现在我们决定要消除所有的C.有没有办法检查数组的每个字段实际上保持什么类型而不执行像returnType()函数那样多余的事情?
编辑:修复"A的数组"到"A的引用数组".
小智 15
你不能创建一个As数组并用B和C填充它们 - 它们将被切成
As.您可以创建一个指向A的指针数组,您可以使用指向B的指针和指向C的指针进行填充.
要检查在这种情况下的某些类型 - 使用动态强制转换:
// create B or C randomly
A * a = rand() % 2 ? new B : new C;
if ( dynamic_cast <B *> ( a ) ) {
// it's a B
}
else {
// it isn't (must be C in this case)
}
Run Code Online (Sandbox Code Playgroud)