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

C++ 从大多数派生类调用虚函数,c++,C++,我有一个类型为a的对象列表,其中可能包含从a派生的任意数量的类的实例。我正在对列表中的每个成员调用一个函数,并希望调用来自最派生类的函数。但是,基类的函数被调用。我怎样才能使它成为使用最派生类的情况 下面的代码说明了我的问题。代码在a中输出,但我希望它在b中输出 #include <iostream> class A { public: virtual void func() { std::cout << "In A" <<

我有一个类型为a的对象列表,其中可能包含从a派生的任意数量的类的实例。我正在对列表中的每个成员调用一个函数,并希望调用来自最派生类的函数。但是,基类的函数被调用。我怎样才能使它成为使用最派生类的情况

下面的代码说明了我的问题。代码在a中输出,但我希望它在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();
你是。您所拥有的只是对象的一个实例

要使多态性工作,您需要使用引用:

B b;
A& a = b;
或者使用指针

A* a = new B;

谢谢Joachim,它解决了我的问题或使用智能指针!std::unique_ptr和std::shared_ptr@Ceros这些只是指针的一般变体。而且我也不建议使用新的智能指针作为简单的自动删除指针,而是作为所有权模型的一部分。