青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 87  文章 - 279  trackbacks - 0
<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 220428
  • 排名 - 118

最新評論

閱讀排行榜

評論排行榜

來自:http://zhidao.baidu.com/question/4090232.html

用MFC制作的工程由很多文件構成,它不能象一般C++程序那樣隨意在類外定義全局變量,在這里要想定義能被工程內多個文件共享的全局變量和函數必須用一些特殊方法才行。實際上有多種方法可以實現,這里只介紹兩種方法。

一、在應用程序類中定義

用MFC生成的工程中都有一個名為CxxxApp的類,它派生于CWinApp類。這個類主要進行程序的初始化,生成文檔、視圖對象等工作。我們可以把需要全局訪問的變量和函數定義為這個類的成員變量和成員函數,就可以實現全局訪問了。

從嚴格意義上講,這種變量和函數并不是全局的,因為它仍然只是類中的成員,只是由于我們很容易獲得CxxxApp類的指針,所以我們可以在文檔、視圖、對話框以及各種自定義類中訪問到它們,達到與全局變量類似的效果。訪問時用函數“AfxGetApp()”獲得CxxxApp類的指針,用“AfxGetApp()->成員”訪問變量或函數。

例:

Test.h:(應用程序類頭文件)

class CTestApp : public CWinApp
{
public:
int x; //全局變量
int f(int y); //全局函數
…………
};

Test.cpp:(應用程序類程序文件)

int CTestApp::f(int y) //全局函數定義
{
y++;
return y;
}

定義在CTestApp類中的變量和函數可以在其它類中被訪問。比如在視圖的某函數中要訪問變量x和函數f():

void CTestView::xyz()
{
CTestApp *app = (CTestApp *)AfxGetApp(); //生成指向應用程序類的指針
app->x = 0; //訪問變量x
int z = app->f(1); //訪問函數f()
…………
}

這樣,變量x和函數f()可以視作為全局的。

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

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

很喜歡API函數的那種調用方法,不論在哪個類中只要用“::API函數”就可以調用了。合理利用靜態類型(static)可以實現與此相似的全局變量和全局函數。

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

若在一個類中用關鍵字static聲明數據成員,則這個數據成員就只存在一個拷貝,無論該類創建了多少個實例,它始終只存在一個,即使該類的實例一個也沒創建,它也存在。

若在一個類中用關鍵字static聲明函數,該函數可以用“類名::函數名”方式訪問,無需引用該類的實例,甚至這個類的實例可以不存在。

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

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

例:

1、添加一個沒有基類的新類,設類名起為CPublic,姑且稱之為公用類

單擊“Insert”菜單下的“New Class”命令,選擇“Class type”為“Generic Class”,在“Name”欄中填入類名“CPublic”,單擊“OK”,則新類建立完畢。

2、包含公用類的頭文件,使各個類都能訪問它

CPublic的頭文件應包含在應用程序類的頭文件中,這樣在其它類中引用CPublic類時就不需要再包含了。

Test.h:(應用程序類頭文件)

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

class CTestApp : public CWinApp
{
…………
};

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

Public.h:(公用類頭文件)

class CPublic
{
public:
CPublic();
virtual ~CPublic();

public:
static int x; //全局變量
static int time; //全局變量
static int f(int y); //全局函數
…………
}

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

Public.cpp:(公用類程序文件)

int CPublic::x = 0; //初始化全局變量
int CPublic::time; //定義全局變量

CPublic::CPublic()
{

}

CPublic::~CPublic()
{

}

int CPublic::f(int y) //全局函數,這里不要再加static
{
y++;
return y;
}

4、全局量的使用

使用變量:CPublic::變量名

使用函數:CPublic::函數()

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

void CTestView::xyz()
{
CPublic::x = 0; //訪問變量x
CPublic::time = CPublic::f(1); //訪問函數f()
…………
}

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

5、幾點注意:

① 由于靜態量可獨立于類存在,不需要生成CPublic類的實例。

② 靜態數據成員的定義和初始化必須在類外進行,如例中x的初始化;變量time雖然沒有初始化,但也必須在類外進行定義。由于沒有生成CPublic類的實例,所以它的構造函數和析構函數都不會被執行,在里面做什么工作都沒有什么意義。

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

class CPublic
{
public:
int x; //內部變量
static int f(int y) //全局函數
{
x++;
return x;
};
…………
};

這里x雖為類內成員,但如果不生成CPublic類的實例,就會出現函數f()存在,而變量x不存在的問題。

總之,用沒有實例的類管理全局量是一個不錯的選擇,它具有集中管理,使用方便的好處。當然,除非特別必要,全局量還是少用為好,一個好的編程者決不會隨意濫用全局量的,一個封裝做得不好的程序,在修改維護時會讓你吃足苦頭。
posted on 2007-09-27 11:39 閱讀(451) 評論(0)  編輯 收藏 引用 所屬分類: MFC

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在现视频| 99re6热只有精品免费观看 | 国产伦精品一区二区三区高清版| 在线观看91精品国产入口| 性欧美精品高清| 久久激情视频久久| 最近中文字幕mv在线一区二区三区四区| 欧美99在线视频观看| 精品999日本| 亚洲第一二三四五区| 亚洲美女尤物影院| 欧美日本高清一区| 在线视频欧美日韩精品| 亚洲一区二区三区精品视频| 一本到12不卡视频在线dvd | 亚洲影院一区| 红桃视频成人| 亚洲激情在线| 国产视频一区在线观看一区免费 | 午夜免费电影一区在线观看| 国产伪娘ts一区| 欧美激情视频免费观看| 伊人男人综合视频网| 亚洲国产一区二区三区高清| 国产日产欧美一区| 久久网站热最新地址| 欧美激情女人20p| 亚洲欧美在线另类| 欧美电影电视剧在线观看| 亚洲欧美日韩另类| 欧美精品自拍| 欧美国产成人在线| 狠狠久久五月精品中文字幕| 亚洲婷婷综合久久一本伊一区| 国产欧美韩日| 美女诱惑一区| 一区二区三区在线不卡| 欧美制服丝袜第一页| 亚洲激精日韩激精欧美精品| 日韩午夜三级在线| 国产一区二区三区四区| 久久国产日本精品| 亚洲啪啪91| 午夜视频一区在线观看| 亚洲国产日韩一区| 国内精品久久久| 欧美性事在线| 噜噜爱69成人精品| 亚洲欧美激情视频在线观看一区二区三区| 国产欧美精品一区aⅴ影院| 一区二区三区日韩精品视频| 老司机午夜精品视频在线观看| 欧美性理论片在线观看片免费| 欧美视频二区| 久久久久国产一区二区三区四区| 国产精品无码永久免费888| 久热国产精品| 久久爱另类一区二区小说| 久久成人免费视频| 亚洲成在人线av| 亚洲自拍偷拍麻豆| 国产综合亚洲精品一区二| 欧美激情第三页| 亚洲综合视频1区| 亚洲成色www8888| 欧美怡红院视频一区二区三区| 激情五月婷婷综合| 久久久久九九九九| 亚洲一区三区在线观看| 欧美好吊妞视频| 欧美主播一区二区三区美女 久久精品人 | 国产在线一区二区三区四区 | 99re热这里只有精品免费视频| 欧美激情一区二区三区不卡| 性娇小13――14欧美| 亚洲国产婷婷香蕉久久久久久99| 亚洲欧美日韩视频一区| 亚洲人成毛片在线播放| 亚洲福利视频一区| 亚洲国产一区二区三区高清| aaa亚洲精品一二三区| 亚洲国产成人不卡| 蜜桃av一区二区| 老司机精品久久| 久久综合久久综合九色| 久久午夜精品一区二区| 久久精品视频亚洲| 久久一区二区三区四区| 久久综合99re88久久爱| 久久亚洲综合色一区二区三区| 久久久久.com| 亚洲电影有码| 中文日韩在线视频| 欧美怡红院视频| 免费欧美在线视频| 一区二区精品| 欧美一区91| 欧美日韩激情网| 国产农村妇女毛片精品久久麻豆| 国产一区欧美| 日韩亚洲精品在线| 久久精品卡一| 亚洲人成亚洲人成在线观看| 亚洲一区中文| 欧美激情久久久久久| 国产精品久久影院| 亚洲精品123区| 亚洲伊人网站| 欧美成人精品| 久久精品99国产精品| 欧美激情综合亚洲一二区| 国产精品免费视频xxxx| 亚洲三级视频| 欧美成人一区二区三区在线观看| 亚洲人线精品午夜| 欧美日韩一区二区在线播放| 国产日韩欧美日韩大片| 亚洲午夜高清视频| 亚洲国产日韩欧美一区二区三区| 亚洲电影中文字幕| 久久爱www久久做| 国产精品制服诱惑| 亚洲欧美日韩综合一区| 亚洲国产99| 可以免费看不卡的av网站| 亚洲欧美日韩一区二区在线| 欧美日韩国产综合网| 一本大道久久精品懂色aⅴ| 亚洲第一页在线| 欧美电影在线观看完整版| 亚洲激情啪啪| 日韩一级在线观看| 亚洲在线视频| 亚洲娇小video精品| 欧美一区中文字幕| 欧美中文在线观看| 亚洲成人在线视频网站| 欧美电影免费| 国产精品高潮在线| 欧美在线综合| 欧美大成色www永久网站婷| 国产精品99久久不卡二区| 亚洲一区二区三区高清| 一区二区三区在线免费观看| 欧美韩国在线| 国产欧美综合一区二区三区| 亚洲欧洲av一区二区| 狠狠综合久久av一区二区老牛| 欧美aaaaaaaa牛牛影院| 欧美三级乱人伦电影| 久久综合久久综合久久综合| 欧美日韩高清区| 可以看av的网站久久看| 国产精品sss| 亚洲欧洲日本国产| 国产日产欧美一区| 亚洲美女av在线播放| 亚洲国产成人精品女人久久久 | 欧美日韩精品一区视频| 久久蜜桃精品| 国产欧美1区2区3区| 一本一本a久久| 狼人天天伊人久久| 亚洲欧洲一区二区在线播放| 午夜精品福利在线| 欧美激情第10页| 欧美v日韩v国产v| 国产日韩欧美三区| 午夜老司机精品| 久久精品91久久香蕉加勒比 | 免费不卡欧美自拍视频| 久久久精品久久久久| 国产精品日韩在线播放| 亚洲精品免费在线播放| 亚洲精品老司机| 欧美日韩mv| 亚洲女人天堂av| 久久夜色精品亚洲噜噜国产mv| 国产在线观看91精品一区| 欧美专区在线| 欧美风情在线观看| 一本色道久久综合亚洲精品高清 | 1000部精品久久久久久久久| 亚洲欧美资源在线| 欧美激情第4页| 亚洲欧美国产精品桃花| 国产一区二区主播在线| 久久人人97超碰精品888| 国内精品久久久久久久影视麻豆| 久久国产加勒比精品无码| 亚洲国产精彩中文乱码av在线播放| 日韩小视频在线观看| 国产精品久久亚洲7777| 免费日韩视频| 性色av一区二区三区| 亚洲精品日韩在线观看| 亚洲综合色在线| 在线播放豆国产99亚洲| 国产精品人人做人人爽人人添| 久久美女艺术照精彩视频福利播放|