如何从基类数组中调用派生函数?
例如:
#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
。
无论如何要解决这个问题?
答案 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()