当对象作为基本类型传递时,如何创建派生对象副本? C ++

时间:2019-01-12 14:12:05

标签: c++ design-patterns copy

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

UML diagram

如您所见,函数“ addWorker”是纯虚拟的,并在较低层的Manager中实现。

我的问题在这里:

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

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

2)将_boss保留为IWorker对象对IWorker有益还是应该尝试    指针接近IWorker *?

先谢谢您。

2 个答案:

答案 0 :(得分:2)

  

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

不,那不能解决问题

  

我尝试使用IWorker *指针方法

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

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

P.S。

出于您的问题,为什么不使用实现和泛化来表示继承?

  

函数“ addWorker”是纯虚拟的,并在较低层的Manager中实现

如果这是真的,则意味着 Manager Worker ,您真的确定吗?通常, Manager 是一个独立的类,它不继承其管理的类,并且可以是 singleton

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

答案 1 :(得分:1)

这是从基类指针复制派生对象的一种模式,它仅在每个派生类中使用复制构造函数和虚函数clone

class Base
{
public:
    virtual Base* clone() const = 0;
};

class Derived
{
public:
    virtual Derived* clone() const { return new Derived(*this); }
};

类似的代码也可以用于智能指针。