看板 C_and_CPP 關於我們 聯絡資訊
請問一下,我遇到類似這樣的程式碼,有兩個視窗元件 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
jhchou:隨便寫寫,大概是這種感覺 http://ideone.com/h1KHn 02/14 20:08