如何从存储在不同类中的基类型向量调用派生类型方法?

问题描述 投票:0回答:1

假设我有一些类 foo,它有一个指向另一个类 Bar 的指针向量和一个记录每个 Bar 的内部类型的 LogBarVec() 方法:

class Foo {
     std::vector<std::unique_ptr<Bar>> m_BarVec;

     void LogBarVec() const {
           for(auto& b : m_BarVec) {
              b->Log();
           }

     }
}

Bar 是具有纯虚拟 Log 方法的基本类型:

class Bar {
public:
     Bar(){};
     virtual void Log() const = 0;
}

BarDerived 是从 Bar 派生的类:

class BarDerived : public Bar {
     int number  = 0;
public:
     BarDerived(float num) : Bar(), number(num){};

     void Log() const override {
         std::cout << "BarDerived number: " << number << std::endl;  
     }
}

我的问题是,从 Foo 访问 Bars 内部类型的 Log 方法的正确方法是什么?换句话说?

c++ polymorphism
1个回答
0
投票

首先,由于Bar是BarDerived的基类,为了避免切片,你应该声明一个std::unique_ptr的向量(不仅仅是Bar)。

使用指向 Bar 的指针,您将能够插入任何 Bar 的派生类。 即使您已声明为基类,由于它是指向其派生类的指针,因此将调用重写的方法。

© www.soinside.com 2019 - 2024. All rights reserved.