它是否爲O.K.設計如果我從基類成員函數返回Derived類的實例(使用新的Derived()創建)?從基類成員函數返回派生類的實例
此外,這涉及到需要轉發聲明Derived類,並也使派生類構造函數公開。
代碼示例: -
Class Base
{
public:
Base() {}
Derived* get_new_derived(int X)
{
Derived *der = new Derived(X);
return der;
}
}
Class Derived : public Base
{
private:
int _X;
protected:
Derived(int X) { _X = X; }
public:
Derived* get_new_derived(int X)
{
Derived *der = new Derived(X);
return der;
}
}
我還有一個派生類(說Derived1)。現在讓我們假設: -
Usage1:
Derived1* der1 = new Derived1();
Derived * der = der1->get_new_derived(10);
Usage2:
Derived1* der1 = new Derived1();
Base* bs = der1;
Derived * der = bs->get_new_derived(10);
你能成爲一個更具體一點(理想情況下表現出預期的界面和使用量小的代碼示例)?例如,你的意思是返回一個新的Derived()類型爲'Base *'還是'Derived *'?在現代C++中,你絕對不應該使用擁有的原始指針 - 使用一個像[[std :: unique_ptr]](http://en.cppreference.com/w/cpp/memory/unique_ptr)或['boost :: shared_ptr'](http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/shared_ptr.htm)。 – Angew
這是目前的形式無法迴避的。你有工作代碼,你問這是否是一個好的解決方案,但我們不知道這個激勵問題。 – Potatoswatter
看看這個線程中的註釋http:// stackoverflow。com/questions/15611959 /使用返回類型作爲指針派生類 – manlio