从基类的数组中调用派生函数

时间:2017-07-24 04:13:33

标签: c++ arrays virtual derived

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

例如:

#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

无论如何要解决这个问题?

2 个答案:

答案 0 :(得分:0)

正如Justin评论的那样,你正在见证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];
    }
}

答案 1 :(得分:0)

 array[1] = b();

以上是对象切片。阅读它here

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

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

 array[1]->print()