检查多态中的实变量类型(C++)

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)