2014-04-07 120 views
1

我在C++項目中遇到問題,我正在做一些工作。對於我缺乏C++ OOP知識,我提前表示歉意。C++繼承 - 將父母更改爲祖父母

我有一系列的課程,所有inheret從一個共同的父母,例如:

class child : public parent 
{ 
    public: 
     ... 
}; 

我的問題是,我需要修改父一個功能,以適應我的代碼;不幸的是(雖然我有權訪問源代碼)父類是由其他項目共享的,並且我的預期改變會導致會破壞其他人的代碼的副作用。但是,如果項目主管批准,我可以做出一些改變 - 而且如果沒有副作用(例如範圍),他通常會這樣做。

雖然很明顯我可以複製該原始父代,修改它並有效地分支代碼,但我確實不希望爲了可維護性目的而這麼做。

所以我的問題是否有可能讓原始父類充當祖父母,並創建一個覆蓋祖父函數的簡單單功能父類,並將我的代碼更改爲從新父母繼承 - 所有其他在新父母中沒有實施的呼叫被傳遞給祖父母?如果是這樣,我怎麼做(廣義上)?還是有更好的解決方案?或者我完全偏離軌道?

我希望這很清楚。感謝您的幫助,我正在用C++在黑暗中摸索。

+0

是否有一個原因,你不能給孩子自己的版本的功能? – Mark

+0

如果你想把這個功能放在父母身上,同時也擔心它會打破其他孩子,它應該暗示你,你試過的東西可能是特定的孩子......所以什麼阻止你只是提供這個功能孩子一個人,因爲馬​​克建議 – Madhusudhan

+0

實際上有約30個孩子,我控制和需要更新的功能,(另外約100人左右寫其他人需要舊功能)。應該在問題中明確表示,對不起。 – Caligari

回答

1

如果您認爲該功能僅對一個孩子有用,請將該代碼僅添加到該孩子。

如果您認爲該功能將對更多的孩子有用,請將該代碼添加到該父類中,但爲其指定一個新名稱。現有的其他兒童班不會受到此影響。您可以遷移現有的孩子,以便在允許時使用新功能。

或者,創建一個子類可以暫時使用的API函數,而不是類成員函數。同樣,現有的孩子班級及其使用情況不會受到這種變化的影響。如果其他子類需要利用該功能,則可以逐個遷移它們。 API函數是否可以作爲成員函數提升可以留作未來決策。

+0

感謝您的回覆。我將用新名稱將修改過的函數添加到父項中;我認爲這是目前最好的解決方案。我將努力說服其他貢獻者隨時遷移他們的代碼:) – Caligari

1

你可以讓其他人改變他們的階級,使指定的方法是virtualhttps://en.wikipedia.org/wiki/Virtual_inheritance

然後,你可以將其覆蓋在孩子要麼,或使一個新的共同的父。

+0

感謝您的迴應 - 有趣的閱讀。現在我將與R Sahu的解決方案一起去,但我會記住虛擬繼承的內容。 – Caligari