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



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

最新更新