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

2022-08-31 13:15:08 字數 1961 閱讀 9808

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

一、在應用程式類中定義

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

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

void ctestview::xyz()

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

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

二、用靜態變數和靜態函式實現

靜態變數和靜態函式有如下性質:

若在乙個類中用關鍵字static宣告資料成員,則這個資料成員就只存在乙個拷貝,無論該類建立了多少個例項,它始終只存在乙個,即使該類的例項乙個也沒建立,它也存在。

若在乙個類中用關鍵字static宣告函式,該函式可以用「類名::函式名」方式訪問,無需引用該類的例項,甚至這個類的例項可以不存在。

利用這個性質實現的全域性變數和函式使用起來很方便。

值得注意的是,全域性變數和全域性函式最好集中封裝,不要在文件、檢視等類內部定義,這樣用起來才有全域性的感覺。

例:1、新增乙個沒有基類的新類,設類名起為cpublic,姑且稱之為公用類

單擊「insert」選單下的「new class」命令,選擇「class type」為「generic class」,在「name」欄中填入類名「cpublic」,單擊「ok」,則新類建立完畢。

2、包含公用類的標頭檔案,使各個類都能訪問它

cpublic的標頭檔案應包含在應用程式類的標頭檔案中,這樣在其它類中引用cpublic類時就不需要再包含了。

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

#include "public.h" //包含公用類標頭檔案

;3、在公用類中定義全域性變數和全域性函式,均使用static修飾,靜態變數還必須在類外定義和初始化

public.h:(公用類標頭檔案)

class cpublic

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

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

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

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

cpublic::cpublic()

cpublic::~cpublic()

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

4、全域性量的使用

使用變數:cpublic::變數名

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

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

void ctestview::xyz()

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

5、幾點注意:

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

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

③ 如果靜態函式需要訪問cpublic類內的變數,這些變數也必須為靜態的。因為非靜態量在不生成例項時都不會存在。 如:

class cpublic

; …………

}; 這裡x雖為類內成員,但如果不生成cpublic類的例項,就會出現函式f()存在,而變數x不存在的問題。

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

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

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

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...