首页 > 解决方案 > 当对象作为基本类型传递时,如何创建派生对象副本?C++

问题描述

我现在有这个设计:(注意 IWorker 是一个抽象类)

UML 图

如您所见,函数“addWorker”是纯虚拟的,并在低级管理器中实现。

我的问题在这里:

void Manager::addWorker(IWorker* worker) {
    this->_workers.push_back(worker);
    worker->setBoss(this);
}

1) 编译器无法为向量_workers 创建IWorker 对象。解决这个问题的正确方法是什么?我想采用原型设计并强制所有 IWorker 对象实现 copy() 方法并在那里使用它。

2) IWorker 将 _boss 作为 IWorker 对象是否有好处,或者我应该尝试将指针方法作为 IWorker* ?

先感谢您。

标签: c++design-patternscopy

解决方案


强制所有 IWorker 对象实现 copy() 方法并在那里使用它。

不,这并不能解决问题

我尝试使用指针方法作为 IWorker*

是的,vector<IWorker>必须是vector<IWorker *>

请注意,Manager::addWorker您已经假设您有一个指针向量

附言

出于您的问题,您为什么不使用实现和概括来指示继承?

函数“addWorker”是纯虚函数,在底层管理器中实现

如果这是真的,这意味着经理工人,你真的确定吗?一般Manager是一个独立的类,不继承其管理的类,可以是单例

您确定了解什么是继承吗?


推荐阅读