我有一个A类型的对象列表,它可能包含从A派生的任意数量的类的实例。我在列表的每个成员上调用一个函数,并希望从最派生类中获取函数调用。但是,调用基类的功能。如何才能使用最派生的类?
以下代码说明了我的问题。代码输出“In a”但我希望它输出“In b”。
#include <iostream>
class A {
public:
virtual void func()
{
std::cout << "In A" << std::endl;
}
};
class B : public A {
public:
virtual void func()
{
std::cout << "In B" << std::endl;
}
};
int main()
{
A a = B();
a.func();
return 0;
}
答案 0 :(得分:6)
当你这样做时
A a = B();
你是slicing the object。你拥有的只是A
对象的一个实例。
要使多态性工作,您需要使用引用:
B b;
A& a = b;
或使用指针
A* a = new B;