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

时间:2016-04-12 12:52:59

标签: 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;
}

1 个答案:

答案 0 :(得分:6)

当你这样做时

A a = B();
你是slicing the object。你拥有的只是A对象的一个​​实例。

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

B b;
A& a = b;

或使用指针

A* a = new B;