国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MFC中定義全局變量和全局函數(shù)的方法

MFC中定義全局變量和全局函數(shù)的方法

分類: VC++/MFC 483人閱讀 評(píng)論(0) 收藏 舉報(bào)
使用Visual C++6.0 中的MFC 基本應(yīng)用時(shí), 由于

MFC 制作的工程由很多文件構(gòu)成, 它不能象一般C++程序那樣隨意在類外定義全局變量, 那樣有時(shí)會(huì)在運(yùn)行程序時(shí)出現(xiàn)問(wèn)。

在軟件開發(fā)過(guò)程中, 有時(shí)需要在不同的類之間利用全局變量傳遞數(shù)據(jù), 利用全局函數(shù)處理相同問(wèn)題, 而MFC 沒有提供類似其他開發(fā)

工具的模塊功能, 因此我們只得自己完成。實(shí)際上有多種方法可以實(shí)現(xiàn), 這里介紹三種常用的方法。

1、 定義一個(gè)全局類的對(duì)象來(lái)實(shí)現(xiàn)

其實(shí)生成這個(gè)自定義類對(duì)象, 我們可以完全參照theApp 對(duì)象的生成方式[1- 2], 自定義一個(gè)CMyPublicData 的全局類。然后生

成CMyPublicData 全局對(duì)象, 通過(guò)對(duì)象調(diào)用全局變量及全局函數(shù)。

實(shí)現(xiàn)過(guò)程如下:

(1)添加一個(gè)沒有基類的新類, 設(shè)類名起為CMyPublicData, 可稱之為公用類。

單擊“Insert”菜單下的“New Class”命令, 選擇“Class type”為

“Generic Class”, 在“Name”欄中填入類名“CMyPublicData”, 單擊

“OK”, 則新類建立完畢。

(2)創(chuàng)建全局的變量與全局函數(shù)

實(shí)際上是定義CMyPublicData 類的public 屬性的成員變量和

成員函數(shù)。

CMyPublicData.h 的內(nèi)容:

class CMyPublicData

{public:

CMyPublicData(void);

public:

virtual ~CMyPublicData(void);

public:

int Public_x;

//自定義了一個(gè)int 型全局變量Public_x

void Public_f();

//自定義了一個(gè)返回值類型void 無(wú)任何參數(shù)的全局函數(shù)Public_f

};

extern CMyPublicData MyPublicData; //這里聲明了自定義全局對(duì)象

CMyPublicData.cpp 的內(nèi)容:

#include "StdAfx.h"

#include "CMyPublicData.h"

CMyPublicData::CMyPublicData(void)

{}

CMyPublicData MyPublicData; //實(shí)例化全局對(duì)象

CMyPublicData::~CMyPublicData(void)

{}

void CMyPublicData::Public_f()//函數(shù)的定義

{//此處可增加函數(shù)完成實(shí)際功能的語(yǔ)句}

(3)包含公用類的頭文件, 使各個(gè)類都能訪問(wèn)它

CMyPublicData 的頭文件應(yīng)包含在應(yīng)用程序類的頭文件中,

這樣在其它類中引用CMyPublicData 類時(shí)就不需要再包含了。若

應(yīng)用程序類的頭文件為Example.h, 其樣式如下:

#include "CmyPublicData.h" //包含公用類頭文件

class CTestApp : public CWinApp

{??};

(4)使用全局變量和全局函數(shù)

可在整個(gè)工程中, 利用MyPublicData.Public_x 形式使用變量,

可多次賦值, 多次調(diào)用, 利用MyPublicData.Public_f()形式調(diào)用函

數(shù)??蓪?shí)現(xiàn)了全局變量和全局函數(shù)。

2、利用應(yīng)用程序類中定義實(shí)現(xiàn)

用MFC 生成的工程中都有一個(gè)名為CxxxApp 的類, 其中xxx一般為應(yīng)用程序名, 它繼承了CWinApp 類。

CxxxApp 類主要進(jìn)行程序的初始化, 生成文檔、視圖對(duì)象等工作。我們可以把需要全局訪問(wèn)的變量和函數(shù)定義為這個(gè)類的成員變量和成員函數(shù)。由于我們很容易獲得CxxxApp 類的指針, 所以可以在文檔、視圖、對(duì)話框

以及各種自定義類中訪問(wèn)到它們, 達(dá)到與全局變量類似的效果。

訪問(wèn)時(shí)用函數(shù)“AfxGetApp()”獲得CxxxApp 類的指針, 用“AfxGetApp()->成員”訪問(wèn)變量或函數(shù)[2- 3]。

例: 在Example.h 頭文件中( Example.h 為應(yīng)用程序類頭文件)

class CTestApp: public CWinApp {

public:

int Public_x; //全局變量

void Public_f(); //全局函數(shù)

};

Example.cpp:( 應(yīng)用程序類程序文件)

void CTestApp::Public_f() //全局函數(shù)定義

{//此處可增加函數(shù)完成實(shí)際功能的語(yǔ)句}

定義在CTestApp 類中的變量和函數(shù)可以在其它類中被訪問(wèn)。

比如在視圖的某函數(shù)中要訪問(wèn)變量Public_x 和函數(shù)Public_f():

void CTestView::xxx(){CTestApp *app = (CTestApp *)AfxGetApp(); //得到指向應(yīng)用程序類的指針

app- >Public_x = 0; //訪問(wèn)變量Public_xapp- >Public_f(); //訪問(wèn)函數(shù)f()??}這樣, 變量Public_x 和函數(shù)Public_f()可以視作為全的。以上兩種方法可實(shí)現(xiàn)的全局變量和全局函數(shù)的運(yùn)用。

雖比較簡(jiǎn)單, 但也有缺點(diǎn), 二者都是定義的成員變量和成員函數(shù), 在使用函數(shù)時(shí), 都要隱式地傳遞this 指針。

這樣, 有可能對(duì)類中的成員不必要的影響。而第二種方法, 每次都需要獲取應(yīng)用程序類的指針,這樣做比較麻煩。

再就是把一些與應(yīng)用程序類本身無(wú)關(guān)的變量和函數(shù)放在里面, 使這個(gè)類看上去怪怪的, 破壞了類的封裝。

3、利用靜態(tài)變量和靜態(tài)函數(shù)實(shí)現(xiàn)靜態(tài)變量和靜態(tài)函數(shù)有如下性質(zhì):

若在一個(gè)類中用關(guān)鍵字static 聲明數(shù)據(jù)成員, 則這個(gè)數(shù)據(jù)成員就只存在一個(gè)拷貝, 無(wú)論該類創(chuàng)建了多少個(gè)實(shí)例,

它始終只存在一個(gè), 即使該類的實(shí)例一個(gè)也沒創(chuàng)建, 它也存在。

若在一個(gè)類中用關(guān)鍵字static 聲明函數(shù), 該函數(shù)可以用“類名::函數(shù)名”方式訪問(wèn), 無(wú)需引用該類的實(shí)例, 甚至這個(gè)類的實(shí)例可以不存在。利用這個(gè)性質(zhì)實(shí)現(xiàn)的全局變量和函數(shù)使用起來(lái)就很方便了。

值得注意的是, 全局變量和全局函數(shù)最好集中封裝, 不要在文檔、視圖等類內(nèi)部定義, 這樣用起來(lái)才有全局的感覺。

例如:(1)添加一個(gè)沒有基類的新類, 類名為CMyPublicData。單擊“Insert”菜單下的“New Class”命令, 選擇“Class type”為“Generic Class”, 在“Name”欄中填入類名“CMyPublicData”, 單擊“OK”, 新類建立完畢。

(2)包含公用類的頭文件, 使各個(gè)類都能訪問(wèn)它。CMyPublicData 的頭文件應(yīng)包含在應(yīng)用程序類的頭文件中,這樣在其它類中引用CMyPublicData 類時(shí)就不需要再包含了。

Test.h:( 應(yīng)用程序類頭文件)#include "CMyPublicData.h" //包含公用類頭文件class CTestApp: public CWinApp{??};

(3)在公用類中定義全局變量和全局函數(shù), 均使用static 修飾,靜態(tài)變量還必須在類外定義和初始化。

CMyPublicData.h( 公用類頭文件)

class CMyPublicData

{public:CMyPublicData ();

virtual ~CPublic();public:

static int Public_x; //全局變量

static void Public_f(); //全局函數(shù)??}

在公用類中對(duì)靜態(tài)變量進(jìn)行初始化和定義函數(shù)體:

CMyPublicData.cpp( 公用類程序文件)

int CMyPublicData::Public_x = 0; //初始化全局變量

void CMyPublicData::f(int y) //全局函數(shù), 這里不再加static{}

(4)全局量的使用可利用CMyPublicData::Public_x 和CMyPublicData::Public_f()使用變量和函數(shù)。

如在視圖的某函數(shù)中訪問(wèn)變量Public_x 和函數(shù)Public_f()。

void CTestView::xxx(){CMyPublicData::Public_x = 0; //訪問(wèn)變量Public_x

CMyPublicData::Public_f(); //訪問(wèn)函數(shù)Public_f()??}

在其它類中訪問(wèn)Public_x 和Public_f()的方法與此相同。

(5) 幾點(diǎn)注意: 由于靜態(tài)量可獨(dú)立于類存在, 不需要生成CPublic 類的實(shí)例;

 靜態(tài)數(shù)據(jù)成員的定義和初始化必須在類外進(jìn)行,

如例中Public_x 的初始化。

由于沒有生成CPublic 類的實(shí)例,所以它的構(gòu)造函數(shù)和析構(gòu)函數(shù)都不會(huì)被執(zhí)行, 在里面做什么工作都沒有什么意義。

總之, 用沒有實(shí)例的類管理全局量是一個(gè)不錯(cuò)的選擇, 它具有集中管理, 使用方便的好處。4、

結(jié)束語(yǔ)從嚴(yán)格意義上講, 以上這種變量和函數(shù)并不是全局的。

只是通過(guò)定義類中的成員變量和成員函數(shù)方式實(shí)現(xiàn)。

當(dāng)然, 除非在必要情況下, 全局量還是少用為好, 一個(gè)好的編程者決不會(huì)隨意濫用全局量的,

一個(gè)封裝做得不好的程序, 在修改維護(hù)時(shí)帶來(lái)一些麻煩。

分享到:
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[VC]在MFC下如何定義全局變量和全局函數(shù)[A.C.閩字號(hào)]
靜態(tài)數(shù)據(jù)成員和靜態(tài)函數(shù)成員
this指針
Unity全局調(diào)用非靜態(tài)函數(shù)
AfxGetApp用法
MFC中五個(gè)初始類的作用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服