[問題] 重構

看板C_and_CPP作者 (累人啊....)時間14年前 (2012/02/14 11:11), 編輯推噓1(1010)
留言11則, 4人參與, 最新討論串1/2 (看更多)
請問一下,我遇到類似這樣的程式碼,有兩個視窗元件 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)

02/14 12:05, , 1F
TForm跟TFrm1,2中間夾一層Tfrm,func寫成純虛擬函式?
02/14 12:05, 1F

02/14 12:06, , 2F
好像不用寫成純虛擬函式 直接實作就好 不知道可不可行
02/14 12:06, 2F

02/14 12:32, , 3F
中間夾一層似乎不可行耶,我新增視窗Tfrm1,他就繼承Tform
02/14 12:32, 3F

02/14 12:32, , 4F
了,至於直接實作,指的是..?
02/14 12:32, 4F

02/14 12:55, , 5F
function templates<--你編譯氣有支援的話,這個是最簡單
02/14 12:55, 5F

02/14 16:37, , 6F
請問還有其它方法嗎,因為1.我也不熟練2.交接應該也沒人懂
02/14 16:37, 6F

02/14 18:12, , 7F
用一樓的方法,把TFrm1,2共同的部分移到中間層
02/14 18:12, 7F

02/14 18:13, , 8F
自己再把繼承Tform改成繼承中間那一層應該可以吧
02/14 18:13, 8F

02/14 18:34, , 9F
意思是建一個class Common,然後Tfrm 各自宣告
02/14 18:34, 9F

02/14 18:35, , 10F
Common XXX,然後func放在Common內嗎?
02/14 18:35, 10F

02/14 20:08, , 11F
隨便寫寫,大概是這種感覺 http://ideone.com/h1KHn
02/14 20:08, 11F
文章代碼(AID): #1FET3kAY (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
問題
0
14
完整討論串 (本文為第 1 之 2 篇):
問題
0
14
問題
1
11
文章代碼(AID): #1FET3kAY (C_and_CPP)