c++ - 当对象作为基本类型传递时,如何创建派生对象副本?C++
问题描述
我现在有这个设计:(注意 IWorker 是一个抽象类)
如您所见,函数“addWorker”是纯虚拟的,并在低级管理器中实现。
我的问题在这里:
void Manager::addWorker(IWorker* worker) {
this->_workers.push_back(worker);
worker->setBoss(this);
}
1) 编译器无法为向量_workers 创建IWorker 对象。解决这个问题的正确方法是什么?我想采用原型设计并强制所有 IWorker 对象实现 copy() 方法并在那里使用它。
2) IWorker 将 _boss 作为 IWorker 对象是否有好处,或者我应该尝试将指针方法作为 IWorker* ?
先感谢您。
解决方案
强制所有 IWorker 对象实现 copy() 方法并在那里使用它。
不,这并不能解决问题
我尝试使用指针方法作为 IWorker*
是的,vector<IWorker>
必须是vector<IWorker *>
请注意,Manager::addWorker
您已经假设您有一个指针向量
附言
出于您的问题,您为什么不使用实现和概括来指示继承?
函数“addWorker”是纯虚函数,在底层管理器中实现
如果这是真的,这意味着经理是工人,你真的确定吗?一般Manager是一个独立的类,不继承其管理的类,可以是单例
您确定了解什么是继承吗?
推荐阅读
- ruby-on-rails - Rails 如何对一个模型的多个请求执行 SQL 查询?
- c# - unity旋转转换
- node.js - NodeJS 异步回调已被调用
- reactjs - 如何创建动态样式的组件?
- react-native - 如何在 React Native 中使用动态样式类
- javascript - 如何使用异步生成器功能使客户端超时?
- azure - Azure Sphere 如何在嵌入其他 MCU 的混合系统中提供安全性?
- php - 将数据加载到 html 类中
- c - 为什么我的 C 程序没有得到想要的输出?
- javascript - javascript 变量未在表单中显示 codeigniter 的验证错误