2012-01-20 58 views
1

如果Derived派生自Base,定義一個像這樣的轉換構造函數是否有意義?轉換構造函數,基類作爲參數?

Derived(const Base& b) : Base(b) { 
    //... 
} 

Derived拷貝構造函數有問題嗎?

我會在這裏指定我的意圖。我有一個基類和三個派生類。我有存儲在列表中的每個派生類的對象,每種類型都有一個對象。 然後我有一個文件,其中一些對象被存儲,但作爲基類。文件中的一行指示派生類的哪一類對應。 我的代碼應該在正確的列表中查看對象是否存在(使用從基類繼承的==運算符)。 請告訴我是否還有更好的解決方案。

+0

你是什麼你選擇這樣做的動機嗎?是否有你想要的特定行爲? – templatetypedef

+0

你確實需要爲這個角色創建任何特定的原因嗎? – DumbCoder

+0

我有一個基類和三個派生類。從文本文件中。在文件中,對象被存儲爲基類,但是一行表示它是哪個派生類。然後我需要創建一個「派生」對象。不知道我是否清楚自己,我的英語有問題。 – Pincopallino

回答

0

我對你想在這裏實現的東西有點困惑,但是把一個基類對象投射到一個派生類中幾乎肯定是一個壞主意。

如果派生類對象的集合存儲爲基類對象,則不需要「文件中的行」來標識它們實際是哪種類型。只需在基類中定義一個虛函數(例如GetType())並在每個派生類中以不同的方式實現它。或者更好,避免(if(obj.GetType()==)風格的編程只有一個接口,並在每個派生類中提供不同的實現。派生類完全知道它是什麼以及可能是頂級代碼並不需要知道

0

對底層問題的妥善解決是一個工廠方法:。std::shared_ptr<Base> ReadObject(std::istream&);這種方法可以讀取文件的「類型」行,並創建相應類型的對象

相關問題