如何解決繼承之間、行為中區域性的需求差異?
前提提要:繼承體系總體個數<=7。
之前也遇到過這類問題、當時也請教過boss、經過一段時間的沉澱。理解的更加透徹了、決定寫下來。算是個總結。
這裡我舉例兩個場景。來說明在一定環境下該做如何做出抉擇。
場景一:
假設存在a類、a類存在函式print函式;並且b派生自a類。也具有print函式。但是其內部實現與a類的print函式只存在區域性3~5行的需求差異。
class a{
protected
virtual
void
(){
//…………
//a自身的處理
//……………
} }class b:a{
protected
override
void
(){
//…………同a類**一致
//b自身的處理
//……………
同a類**一致
} }解決方案:
class a{
protected virtual customfunction()
protected void print(){
//………… //
customfunction
();
//……………
} }class b }
思想:盡可能的減少冗餘**,降低某一時刻內需要考慮的軟體複雜度。
場景二:
這一場景,對於再使用上述的解決方案。就不再那麼有效了。我們依舊那上述的a和b類來說、增加一層繼承c類。
假設存在a類、a類存在函式print函式;並且b派生自a類。a需要10~20行的特殊處理,而b類則不需要。然後又存在c類繼承b類、且c類需要a中10~20行的特殊處理。且額外還有自己特殊的處理過程。看起來這個列子變得複雜了。別急、有解決的辦法、繼續往下看。
class a{
protected
virtual
void
(){
//…………
//a自身的處理
//……………
} }class b:a{
protected
override
void
(){
//…………
同a類**一致
// 不需要特殊處理
//……………
同a類**一致
} }class c:b{
protected
override
void
(){
//…………
同b類**一致
//c類的特殊處理
//……………
同b類**一致
} }解決方案:
class a{
protected virtual customfunction()
if(rutimetypename=="c")
}protected void
(){
//…………
//customfunction();
//……………
} }class b:a{}
class c:b{}
思想:把某一連續的特殊需求,集中起來進行處理。
目前開發過程中碰到的常用場景就這兩個,個人感覺也足夠用了。以後發現的話再繼續補充。
如何解決Jquery庫及其他庫之間的 命名衝突
首先我們應該知道,在jquery中,美元符號 就是jquery的別名,也就是說使用 和使用jquery是一樣的,在很多時候我們命名空間時,正是因為這個 而產生的衝突的發生。比如說 xmlas 和jquery xmlas 雖然在寫法上不同,但在實際上卻是完全等同的。要想解決這個衝突,其實最簡單的方法就...
C 多重繼承的弊端 二義性 如何解決
解決方案一 使用 類名 進行指定,指定呼叫從哪個基類繼承的方法 wsc.father dance wsc.mother dance 解決方案二 在子類中重新實現這個同名方法,並在這個方法內部,使用基類名進行限定,來呼叫對應的基類方法.void son dance 不bb直接上 第乙個類 father...
C 虛繼承如何解決了菱形繼承的二義性問題
從 分析 includeusing namespace std class a class b virtual public a class c virtual public a class d public b,public c 菱形繼承和菱形虛繼承的物件模型 int main 分別從菱形繼承和虛...