作者tyc5116 (累人啊....)
看板C_and_CPP
標題[問題] 重構
時間Tue Feb 14 11:11:39 2012
請問一下,我遇到類似這樣的程式碼,有兩個視窗元件
class Tfrm1:public TForm;
class Tfrm2:public TForm;
當我先對Tfrm1作重構時,裡面某個事件(ex. button_click)
有一長串冗長的code,所以我就新增了一個函式func把它包起來,比較簡潔
class Tfrm1:public Tform{
public:
void func();
...
};
然後當我對Tfrm2作重構時,也發現有一樣的code,所以也把它包起來
class Tfrm2:public Tform{
public:
void func();
...
};
結果發現兩個func是一樣的,請問這兩個func可以再合成一個func共用嗎
目前想到的方式是繼承,但是考慮到幾個問題
這一段code也許分別對該視窗的元件取值,ex. int val=label1.caption 類似這樣
將func寫在TForm,讓繼承的元件可以使用,好像也不可行
何況TForm也不能去修改(應該吧,不是很確定),請問可以怎麼再進一步改善呢?
也許問的不是很明確,因為也不太會描述這個問題,希望有人了解,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.184.47
※ 編輯: tyc5116 來自: 111.251.184.47 (02/14 11:12)
推 yayarice:TForm跟TFrm1,2中間夾一層Tfrm,func寫成純虛擬函式? 02/14 12:05
→ yayarice:好像不用寫成純虛擬函式 直接實作就好 不知道可不可行 02/14 12:06
→ tyc5116:中間夾一層似乎不可行耶,我新增視窗Tfrm1,他就繼承Tform 02/14 12:32
→ tyc5116:了,至於直接實作,指的是..? 02/14 12:32
→ angleevil:function templates<--你編譯氣有支援的話,這個是最簡單 02/14 12:55
→ tyc5116:請問還有其它方法嗎,因為1.我也不熟練2.交接應該也沒人懂 02/14 16:37
→ jhchou:用一樓的方法,把TFrm1,2共同的部分移到中間層 02/14 18:12
→ jhchou:自己再把繼承Tform改成繼承中間那一層應該可以吧 02/14 18:13
→ tyc5116:意思是建一個class Common,然後Tfrm 各自宣告 02/14 18:34
→ tyc5116:Common XXX,然後func放在Common內嗎? 02/14 18:35