[英]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.