如何解決繼承之間 行為中區域性的需求差異?

2021-06-29 16:58:29 字數 1794 閱讀 1867

如何解決繼承之間、行為中區域性的需求差異?

前提提要:繼承體系總體個數<=7。

之前也遇到過這類問題、當時也請教過boss、經過一段時間的沉澱。理解的更加透徹了、決定寫下來。算是個總結。

這裡我舉例兩個場景。來說明在一定環境下該做如何做出抉擇。

場景一:

假設存在a類、a類存在函式print函式;並且b派生自a類。也具有print函式。但是其內部實現與a類的print函式只存在區域性3~5行的需求差異。

class a{

protected 

virtual

void 

print

(){

//…………

//a自身的處理

//……………

} }class b:a{

protected  

override

void 

print

(){

//…………同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 

print

(){

//…………

//a自身的處理

//……………

} }class b:a{

protected 

override

void 

print

(){

//…………

同a類**一致

// 不需要特殊處理

//……………

同a類**一致

} }class c:b{

protected 

override

void 

print

(){

//…………

同b類**一致

//c類的特殊處理

//……………

同b類**一致

} }解決方案:

class a{

protected  virtual customfunction()

if(rutimetypename=="c")

}protected void 

print

(){

//…………

//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 分別從菱形繼承和虛...