繁体   English   中英

如何在 C++ 中使用多态访问派生类字段?

[英]How to access derived class fields using polymorphism in c++?

我有一个派生自基类的简单参数模型类,如下所示:

class IParams
{
    ....
};

class QEParams : public IParams
{
    ....
};

我还有从包含 IParams 字段的基类派生的 executor 类。

class IExecutor
{

protected:

    IParams parameters;

public:

    virtual inline void initialize(IParams parameters) = 0;
    virtual IParams& execute() = 0;

};

class QEExec : public IExecutor
{

public:

    virtual void initialize(IParams parameters) override;
    virtual QEParams& execute() override;

};

类 QEEExec 应该在参数字段中保存 QEParams。 如何访问 QEEExec 类中的 QEParams 成员? 我应该将参数类型转换为 QEParams 吗?

虽然我同意,您可能应该过度考虑您的设计,但您可以按照以下方式做您想做的事情:

如果您希望parameters能够容纳IParams类型和QEParams类型的对象, IParams执行此QEParams的标准方法是使用指向基类的指针或参数。 您不能让parameters具有IParams类型并期望它也适合QEParams类型的对象,因为这两个具有不同的内存布局(并且可能具有不同的大小),因此它们必然不能在同一位置。

这在一定程度上取决于您的代码结构,以及您想要如何执行此操作。 如果 Executor 拥有参数,最好的类型是std::unique_ptr<IParams> 否则,您可能想要使用IParams*IParams&std::shared_ptr<IParams>具体取决于您如何管理此对象的生命周期。 初始化的参数应该是相同的类型(如果您使用std::unique_ptr ,请使用移动语义)。

要访问QEParams的成员,您必须使用dynamic_cast 但要非常小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM