我有一个类型为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;
}
进行时
A a = B();
您正在切片对象。您所拥有的只是A
对象的一个实例。
要使多态性发挥作用,您需要使用引用:
B b;
A& a = b;
或使用指针
A* a = new B;