我现在正在设计:(注意IWorker是一个抽象类)
如您所见,函数“ 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 *?
先谢谢您。
答案 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); }
};
类似的代码也可以用于智能指针。