利用module作全域變數方便管理的好方法? |
缺席
|
skyline_no1
一般會員 發表:9 回覆:7 積分:3 註冊:2006-07-22 發送簡訊給我 |
請教了解使用module的高手: 由於利用全域變數容易導致維護.管理不易,但是又因為一些比較大的專案,或是牽扯很多數學 運算的時候,還是必須要用到,因此小第一直想尋找很多FORM或UNIT共享變數的好作法, 最近在網路上找到有人提供的好方法, 如下網址所示,裡面的Gary W. Lee 所發表的... 但由於小弟才疏學淺,而且也很少看到module的作法,還是無法了解使用方式 ,請問各位高手有人有使用該方法嗎?可否教導一下建立方式呢? 感激不盡!
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
skyline_no1 您好: 提供個人的使用方法請參考! 因為不熟悉新系統的檔案上傳方式,所以原始碼請至發表區下載,不好意思! File: Parameter.cpp // 宣告所有的全域共享變數 int gTotalValue=0; //=========================== File: Parameter.hpp // 讓需要使用全域共享變數的程式能引用它們,並避免同一檔案中重複載入。 #ifndef My_Parameter #define My_Parameter |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
===================引 用 文 章=================== 最近在網路上找到有人提供的好方法, 如下網址所示,裡面的Gary W. Lee 所發表的... 但由於小弟才疏學淺,而且也很少看到module的作法,還是無法了解使用方式 ,請問各位高手有人有使用該方法嗎?可否教導一下建立方式呢? 你好,Garry W. Lee 所用的處理global變量的方式並非標準且完美的。但,看了他寫的東西後,我還是幫你在細說一下他的意思。在bcb中。有個叫data module的元件 ( file->new->data module),這個元件像是個container,可放入許多的「非視覺元件」到裡面。而bcb預設會在你加入這個元件後幫你建立二段程式碼: 1/ 為你在程式一跑的時候建立此這個module的實體(instance) 於projcet上有.USEFORM("Unit2.cpp", DataModule1); 2/ 會在這個moule的CPP上建立TDataModule1 *DataModule1; 還有在該header上有extern PACKAGE TDataModule1 *DataModule1; 上面那二個動作意義很重要。請記注。接下來說一下實作 : 1 拉一個data module,2 在此class上的public上可以放入你自己的變量(最好是放在private上,然後加入get/set的方法,或者用property來實現,但這都比較難,在此為了解說方便就放在public上),比如說放一個變量叫 int count; class TDataModule1 : public TDataModule 在你的form上加入一個button,然後如何存取count變量呢? 先include這個module的header進這個form的unit上,比如說: #include "Unit2.h" 然後在button的處理funcion上寫上: DataModule1->count = 1; //這就是讀取該變量的方式 當然,你也可以在裡面放入一些非視覺的元件,那就可以用 然而事實上data module並非是最佳的處理global variables的方法。因為記得我最上面說的二個重要動作嗎? 若這個module不是只被初始化一次,那就失去了global的意義了。因為第二個instance的資料內容和第一個instance的資料內容是獨立的! 為了避開被建立好幾個instance而失去了封裝的意義,正統的做法是自己創一個static class,所謂的static的class就是沒法讓你產生instance的class,這樣就可以避開剛的問題。如比說: (bcb developer guide 上的例子) class Global 存取時就用Global::getNumber() and Global::setNumber(). 之類的…
結論: 用datamodule的方式是很有效率的,很可以偷懶的,但要記得只能create一次instance,並讓該instance成為global variable供大家使用。常常要僅記在心。若不想僅記在心…為了完美,為了程式可能由多人來寫,可以選用static class的方式。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
skyline_no1
一般會員 發表:9 回覆:7 積分:3 註冊:2006-07-22 發送簡訊給我 |
|
skyline_no1
一般會員 發表:9 回覆:7 積分:3 註冊:2006-07-22 發送簡訊給我 |
請問這兩種是否都不可使用視覺元件? 那WIN API呢? 譬如說我要控制RS232, 寫入 HANDLE ghComm; 好像存取會有問題呢...
class TDataModule2 : public TDataModule
|
skyline_no1
一般會員 發表:9 回覆:7 積分:3 註冊:2006-07-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |