我有一个类型为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;
}
Run Code Online (Sandbox Code Playgroud)
当你这样做
A a = B();
Run Code Online (Sandbox Code Playgroud)
你正在切割对象.你拥有的只是一个A对象的实例.
要使多态性工作,您需要使用引用:
B b;
A& a = b;
Run Code Online (Sandbox Code Playgroud)
或使用指针
A* a = new B;
Run Code Online (Sandbox Code Playgroud)