从基数组 class 调用派生函数

Calling a derived function from an array of the base class

如何从基数组 class 调用派生函数?

例如:

#include <iostream>
#include <string>

class a{

public:
    virtual void prnt(){
        std::cout<<"a"<<std::endl;
    }
};

class b: public a{

public:
    virtual void prnt(){
        std::cout<<"B"<<std::endl;
    }
};

int main()
{
    a array[3];
    array[0] = a();
    array[1] = b();
    array[2] = a();

    array[1].prnt();
}

此示例的输出是 a

有办法解决这个问题吗?

正如贾斯汀评论的那样,您正在目睹 object slicing 的案例。获得您期望的行为的一种方法是使用指针:

int main() {
    a* array[3];
    array[0] = new a();
    array[1] = new b();
    array[2] = new a();

    array[1]->prnt();

    // Don't forget to delete them!
    for (int i = 0; i < 3; ++i) {
        delete array[i];
    }
}
 array[1] = b();

以上是对象slicing.Read关于它here

多态性仅适用于指针和引用。

 a *array[3];
 array[0] = new a();
 array[1] = new b();
 array[2] = new a();

 array[1]->print()