从大多数派生类调用虚函数

JHo*_*ern -1 c++

我有一个类型为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)

Som*_*ude 6

当你这样做

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)