在MFC下如何定義全域性變數和全域性函式

2022-02-28 21:38:24 字數 1313 閱讀 9505

用mfc製作的工程由很多檔案構成,它不能象一般c++程式那樣隨意在類外定義全域性變數,在這裡要想定義能被工程內多個檔案共享的全域性變數和函式必須用一些特殊方法才行。實際上有多種方法可以實現,這裡只介紹兩種方法。

一、在應用程式類中定義

例:

test.h:(應用程式類標頭檔案)

public:

int x; //全域性變數

int f(int y); //全域性函式 ) x s+ s' n+ u

…………

test.cpp:(應用程式類程式檔案)

這樣,變數x和函式f()可以視作為全域性的

用這種方法實現的全域性變數和全域性函式雖比較簡單,但也有缺點,一是訪問不太方便,每次都需要獲取應用程式類的指標;再就是把一些與應用程式類本身無關的變數和函式放在裡面,使這個類看上去怪怪的,破壞了類的封裝。

class cpublic

在公用類中對靜態變數進行初始化和定義函式體:

public.cpp:(公用類程式檔案)

int cpublic::x = 0; //初始化全域性變數 

int cpublic::time; //定義全域性變數 

cpublic::cpublic() 

cpublic::~cpublic() 

int cpublic::f(int y) //全域性函式,這裡不要再加static 

3 o2 v% z6 r+ r( k! l

4、全域性量的使用

使用變數:cpublic::變數名6 h)

使用函式:cpublic::函式()

如在檢視的某函式中訪問變數x和函式f():

void ctestview::xyz()

在其它類中訪問x、time和f()的方法與此相同。

5、幾點注意:

① 由於靜態量可獨立於類存在,不需要生成cpublic類的例項。

② 靜態資料成員的定義和初始化必須在類外進行,如例中x的初始化;變數time雖然沒有初始化,但也必須在類外進行定義。由於沒有生成cpublic類的例項,所以它的建構函式和析構函式都不會被執行,在裡面做什麼工作都沒有什麼意義。

③ 如果靜態函式需要訪問cpublic類內的變數,這些變數也必須為靜態的。因為非靜態量在不生成例項時都不會存在。  這裡x雖為類內成員,但如果不生成cpublic類的例項,就會出現函式f()存在,而變數x不存在的問題。

總之,用沒有例項的類管理全域性量是乙個不錯的選擇,它具有集中管理,使用方便的好處。當然,除非特別必要,全域性量還是少用為好,乙個好的程式設計者決不會隨意濫用全域性量的,乙個封裝做得不好的程式,在修改維護時會讓你吃足苦頭。

ZZ 在MFC下如何定義全域性變數和全域性函式

用mfc製作的工程由很多檔案構成,它不能象一般c 程式那樣隨意在類外定義全域性變數,在這裡要想定義能被工程內多個檔案共享的全域性變數和函式必須用一些特殊方法才行。實際上有多種方法可以實現,這裡只介紹兩種方法。一 在應用程式類中定義 例 test.h 應用程式類標頭檔案 test.cpp 應用程式類程...

MFC中定義全域性變數

全域性變數一般這樣定義 1.在一類的.cpp中定義 int myint 然後再在要用到的地方的.cpp裡extern int myint 這樣就可以用了。2.在stdafx.cpp中加入 int myint 然後在stdafx.h中加入 extern int myint 這樣定義的變數以後無論在什麼...

C 如何定義全域性變數

在實際的操作過程中經常會遇到,form1中的變數需要傳入form2,或者控制項中的值需要傳入另外乙個窗體,這是只需要定義乙個全域性變數就可以了 1 定義全域性變數 public partial class form1 form 2 給全域性變數賦值 username convert.tostring...