線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:912
推到 Plurk!
推到 Facebook!

請教有關函數的用法

尚未結案
frederick
中階會員


發表:101
回覆:108
積分:66
註冊:2002-08-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-29 18:33:45 IP:139.175.xxx.xxx 未訂閱
想請教一個問題: 假設在main()中有一函數,並有一個輸入變數。 void main(void) { var_type var; // 是一變數、指標、或陣列、結構.... Fun_A( var ); } //傳入 var至Fun_A() Fun_A ( var_type var1) { ..............; Fun_B( var1 ); // 在Fun_B又必須用到 var1。 ...........; } Fun_B ( var_type var2) { ..............; Fun_B( var2 ); // 在Fun_C又必須用到 var2,也就是Fun_A中的var1。 ...........; } Fun_C ( var_type var3) { .............. } 其實這幾個函數所要傳的內容是一樣的, 但又不是(或不能)宣告全域變數,或許Fun_D()、Fun_E....沒用到。 請問,以上作法是一般性作法嗎?但這樣好像感覺怪怪的, 如果有此情形,大家是怎麼寫呢? 謝謝!!!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-29 19:15:44 IP:61.221.xxx.xxx 未訂閱
引言: 想請教一個問題: 假設在main()中有一函數,並有一個輸入變數。 void main(void) { var_type var; // 是一變數、指標、或陣列、結構.... Fun_A( var ); } //傳入 var至Fun_A() Fun_A ( var_type var1) { ..............; Fun_B( var1 ); // 在Fun_B又必須用到 var1。 ...........; } Fun_B ( var_type var2) { ..............; Fun_B( var2 ); // 在Fun_C又必須用到 var2,也就是Fun_A中的var1。 ...........; } Fun_C ( var_type var3) { .............. } 其實這幾個函數所要傳的內容是一樣的, 但又不是(或不能)宣告全域變數,或許Fun_D()、Fun_E....沒用到。 請問,以上作法是一般性作法嗎?但這樣好像感覺怪怪的, 如果有此情形,大家是怎麼寫呢? 謝謝!!!
frederick 你好: function spec 該怎麼定義,並沒有一定的標準< > 只要能夠符合需求,功能劃分清楚(容易偵錯、容易維護)就可以了< > -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
frederick
中階會員


發表:101
回覆:108
積分:66
註冊:2002-08-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-29 23:10:14 IP:139.175.xxx.xxx 未訂閱
再請教一下: 如果我有一變數,或許是一個陣列之類的。 我在main()、Fun_C()才會用到它。 但Fun_C()是經由main()->Fun_A()->Fun_B()->Fun_C()這過程。 也就是Fun_C()不會從main()、Fun_A()呼叫,是由Fun_B()呼叫。 難道我要從main()一直帶此變數到Fun_C()? 但這過程Fun_A()、Fun_B()並不會用到此一變數(或一組陣列之類的)。 此變數又不能作為全域,因有些函數並不會用到, 但如果把此變數從上一直帶到下,感覺好像蠻危險的, 且好像不符合資訊隱藏的規則,這....這該如何是好呢? 嗯~或許是我哪些觀念還搞不清楚,還希望指點一下。 謝謝!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-29 23:24:49 IP:61.221.xxx.xxx 未訂閱
引言: 再請教一下: 如果我有一變數,或許是一個陣列之類的。 我在main()、Fun_C()才會用到它。 但Fun_C()是經由main()->Fun_A()->Fun_B()->Fun_C()這過程。 也就是Fun_C()不會從main()、Fun_A()呼叫,是由Fun_B()呼叫。 難道我要從main()一直帶此變數到Fun_C()? 但這過程Fun_A()、Fun_B()並不會用到此一變數(或一組陣列之類的)。 此變數又不能作為全域,因有些函數並不會用到, 但如果把此變數從上一直帶到下,感覺好像蠻危險的, 且好像不符合資訊隱藏的規則,這....這該如何是好呢? 嗯~或許是我哪些觀念還搞不清楚,還希望指點一下。
frederick 你好: 以下是我個人的建議(三種方式) (
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-30 09:33:56 IP:211.22.xxx.xxx 未訂閱
C 語言的精華就在於Class三部曲,封裝、繼承、多型 如果你不熟悉,觀察BCB的Form就是一個類別的最佳學習範本, 你的問題有三種解法:我依簡易度排列,指標處理不好,影響會很大。 1.宣告一個全域變數。 2.將你的變數寫在Class中, 寫在public:表示要提供其他類別使用,使用方法 FuncA(Form1->MyVar1) 其他類別使用方法 Form2->MyVar2 = Form1->MyVar1 寫在private:表示不提供其他類別使用,變數的生命週期只有在目前這個類別 3.使用指標。 要用的時候把他new出來,例如 Type *pointName = new Type[size]; 確定用完時delete掉,例如 delete[] pointName; 祝好運!
系統時間:2024-05-03 17:46:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!