我有兩個類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對不起,我刪除了模板並添加了層次結構 –