我有两个类BaseJob和DerivedJob,然后我与它的工作的一些代码:C++如何使用继承
Beanstalkpp::BaseJob* Beanstalkpp::Client::reserve() {
if (something)
{
return new ExtendedJob(some_data);
}
if (something_else)
{
return new SpecialJob(some_data);
}
}
我想用它喜欢:
ExtendedJob *j = client.reserve()
但到目前为止,我越来越:
error: invalid conversion from ‘Beanstalkpp::BaseJob*’ to ‘Beanstalkpp::ExtendedJob*’ [-fpermissive]
更新:
class BaseJob
{
...
}
class ExtendedJob : public BaseJob
{
...
}
更新2: 如此,因为很多答案说,这是不可能的,或者,如果是的话,做一些危险的,我想更多的描述我尝试解决。
我对工作的一些基本功能与类似工作:
BaseJob reserve()
void del(BaseJob& j)
void bury(BaseJob& j)
...
然后,我有一些工作clases像ExtendedJob,SpecialJob所有延伸BaseJob。上面提到的所有函数都会执行相同的操作(会调用对象的相同函数调用)。
所以我看到2种方式解决我的问题
- 对于每个作业类型,我将创建一个像reserveBaseJob(),reserveSpecialJob()自定义函数的...
- 对于每一个功能,我将创造同样的功能但作为模板,然后函数每次调用将包含类的名称,如:德尔()
所有作业类实现相同的接口....
什么是继承层次?模板来自哪里? –
@FredLarson对不起,我删除了模板并添加了层次结构 –