• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    C++語(yǔ)言變量的生命期與作用域的探討

    2016-03-17 05:28:06趙魁奎趙海廷
    關(guān)鍵詞:生命期語(yǔ)句靜態(tài)

    趙魁奎 趙海廷

    (1.寧波理工環(huán)境能源科技股份有限公司 浙江 寧波:315806;2.武昌理工學(xué)院 信息工程學(xué)院 湖北 武漢:430223)

    ?

    C++語(yǔ)言變量的生命期與作用域的探討

    趙魁奎1趙海廷2

    (1.寧波理工環(huán)境能源科技股份有限公司 浙江 寧波:315806;2.武昌理工學(xué)院 信息工程學(xué)院 湖北 武漢:430223)

    變量的生命期是變量從創(chuàng)建到消亡的時(shí)間段,也稱為變量的存在性,就是說(shuō)一個(gè)變量是否還存在。變量的作用域是變量能被引用的范圍,也稱為變量的可見性,是指在變量存在的情況下能否被引用。一個(gè)變量若是可見的其必然存在,若其存在卻不一定就可見。主要討論了C++語(yǔ)言中變量的生命期、作用域、存在性及可見性等實(shí)際應(yīng)用的問(wèn)題。

    生命期;作用域;存在性;可見性

    1 C++變量的生命期與作用域

    1.1 C++變量的生命期

    變量的生命期就是變量從創(chuàng)建到消亡的時(shí)間段。C++語(yǔ)言變量的生命期可分為靜態(tài)生命期和動(dòng)態(tài)生命期。

    如果變量的生命期與系統(tǒng)程序的運(yùn)行時(shí)段相同,則該變量就具有靜態(tài)的生命期。在所有大括號(hào)對(duì)之外定義的變量具有靜態(tài)生命期。若定義變量時(shí)在數(shù)據(jù)類型之前冠以“static”關(guān)鍵字的外部變量或局部變量也具有靜態(tài)生命期。

    在大括號(hào)對(duì)內(nèi)定義的變量其生命期從變量的定義點(diǎn)開始,結(jié)束于定義該變量所對(duì)應(yīng)大括號(hào)處,這種變量具有動(dòng)態(tài)生命期。

    變量的生命期也稱為變量的存在性;在其生命期期間,該變量必然是存在的即具有存在性。

    1.2 C++變量的作用域

    變量的作用域是變量能被引用的范圍。在變量的生存期間,每個(gè)變量都有各自的作用范圍,在各自的作用域內(nèi)、外,該變量可以是可見的,也可以是不可見的,也稱為變量的可見性。

    一個(gè)變量若存在,但它能否被引用,這是該變量的作用域問(wèn)題。變量的作用域討論的是一個(gè)標(biāo)識(shí)符的有效引用范圍。

    C++語(yǔ)言變量的作用域可以分為:函數(shù)原型作用域,異常處理參數(shù)作用域,局部作用域,文件作用域、全局作用域和對(duì)象族作用域。

    (1)函數(shù)原型作用域

    所謂函數(shù)原型作用域就是在函數(shù)說(shuō)明時(shí)形式參數(shù)的作用范圍。

    例如:double Area(double radius);

    其形參radius的作用范圍就在Area函數(shù)說(shuō)明的小括號(hào)對(duì)內(nèi),在程序的其它地方將沒有意義,也就是變量radius的作用域就在Area函數(shù)的原型說(shuō)明中。

    (2)異常處理參數(shù)作用域

    所謂異常處理參數(shù)作用域就是在異常處理時(shí),異常監(jiān)控段拋出異常對(duì)象后,異常處理程序段捕獲異常參數(shù)所具有的作用域。

    例如:

    try{……;cout?"9/0="?div(c,d)?endl;……;}

    catch(int){cout?"撲獲了除數(shù)為'0'異常!"?endl;}

    catch(…){……}

    上述try{……}監(jiān)控的程序段中,若有異常發(fā)生,將拋出異常對(duì)象,異常對(duì)象將在catch(……)段被捕獲,該異常參數(shù)具有的作用域就是異常參數(shù)作用域。

    (3)局部作用域

    定義在大括號(hào)對(duì)內(nèi)的變量稱為局部變量,一個(gè)局部變量具有局部于本塊的生命期和作用域;也就是局部變量的作用域從聲明變量處開始,一直到塊結(jié)束的大括號(hào)為止。

    如果一個(gè)局部變量定義為靜態(tài)的,該變量具有全局的生命期和局部于本塊的局部作用域。

    (4)全局作用域和文件作用域

    若一個(gè)變量在大括號(hào)對(duì)之外被聲明,該變量具有全局的生命期和全局的作用域。若是多文件系統(tǒng),通過(guò)extern說(shuō)明,還可以在其它文件中引用。

    一個(gè)全局變量在定義時(shí),在其數(shù)據(jù)類型關(guān)鍵字前面冠以“static”關(guān)鍵字,這種變量的作用域開始于變量定義點(diǎn),結(jié)束于本文件,即該變量具有全局的生命期和本文件的作用域,也就是該變量只能在定義它的文件中引用。

    (5)對(duì)象族作用域

    在面向?qū)ο蟮腃++系統(tǒng)中,類的數(shù)據(jù)成員在創(chuàng)建該類的對(duì)象時(shí),該類的數(shù)據(jù)成員將被復(fù)制到各個(gè)對(duì)象之中,這些數(shù)據(jù)成員具有對(duì)象族作用域。

    靜態(tài)成員變量要在類內(nèi)進(jìn)行靜態(tài)變量的說(shuō)明,在類外進(jìn)行靜態(tài)變量的初始化。該變量在該類的所有對(duì)象間只有一個(gè)拷貝,為所有對(duì)象共享;可以認(rèn)為靜態(tài)成員變量對(duì)該類族的所有對(duì)象具有生命期和作用域。

    2 C++語(yǔ)言程序的內(nèi)存空間分配

    C++語(yǔ)言程序在內(nèi)存中一般分為如下六個(gè)區(qū):

    (1)代碼區(qū):代碼區(qū)為程序代碼在內(nèi)存中的映射。

    (2)常量區(qū):常量、字符串等存放在該區(qū)。

    (3)初始化數(shù)據(jù)(data)區(qū):已經(jīng)初始化的變量的存儲(chǔ)區(qū)域,初始化了的全局變量和靜態(tài)變量存在該區(qū)域。

    (4)未初始化數(shù)據(jù)(BSS)區(qū):全局變量和靜態(tài)變量未初始化的存儲(chǔ)區(qū)域。未初始化的數(shù)據(jù)(BSS)區(qū)位于初始化數(shù)據(jù)區(qū)相鄰的一個(gè)區(qū)。

    (5)棧(stack)區(qū):臨時(shí)變量存儲(chǔ)區(qū)。進(jìn)程進(jìn)入該程序塊時(shí)為該局部變量分配內(nèi)存空間,退出塊時(shí)釋放該空間;函數(shù)的參數(shù)也存儲(chǔ)在該區(qū)域。

    (6)堆(heap)區(qū):動(dòng)態(tài)申請(qǐng)內(nèi)存分配存儲(chǔ)區(qū)。程序執(zhí)行new運(yùn)算符時(shí)申請(qǐng)存儲(chǔ)空間,執(zhí)行delete運(yùn)算符時(shí)釋放相應(yīng)的存儲(chǔ)空間。

    通常又將(3)和(4)區(qū)域稱為靜態(tài)存儲(chǔ)區(qū),5和6區(qū)域稱為動(dòng)態(tài)存儲(chǔ)區(qū)

    3 變量生命期和作用域的舉例

    下面給出闡述上述問(wèn)題的實(shí)際應(yīng)用例子,它包括:File1.cpp、Jbjthshu.cpp和hshuMain.cpp三個(gè)文件。

    3.1 File1.cpp

    //File1.cpp

    #include

    int Iqjbl=123;//外部變量定義

    extern double Dqjbl;//外部全局變量的說(shuō)明

    extern float Fstatic;//外部靜態(tài)全局變量說(shuō)明

    void Display()//Display()函數(shù)定義

    {cout?"在Display()函數(shù)中,全局變量Dqjbl的值為:"?Dqjbl?endl;

    //cout?"在Display()函數(shù)中,靜態(tài)全局變量Fstatic的值為:"?Fstatic?endl;錯(cuò)誤

    }

    3.2 Jbjthshu.cpp

    //Jbjthshu.cpp

    #include

    void Jbjthshu(intx)

    {inty=0;//局部變量初始化

    static int Sjbjt=0;//局部靜態(tài)變量初始化

    Sjbjt++;//局部靜態(tài)變量后置加1運(yùn)算

    cout?"在Jbjthshu()函數(shù)中,函數(shù)參數(shù)x和局部變量y的值為:x="?x?",y="?y?endl;

    cout?"在Jbjthshu()函數(shù)中,局部靜態(tài)變量Sjbjt的值為:Sjbjt="?Sjbjt?endl;

    }

    3.3 hshuMain.cpp

    //hshuMain.cpp

    #include

    class Clock//時(shí)鐘類的聲明

    {public://公有成員函數(shù),外部公共接口

    //Clock類的構(gòu)造函數(shù)

    Clock(int NewH,int NewM,int NewS)

    {Hour=NewH;Minute=NewM;Second=NewS;}

    void ShowTime()//Clock類的成員函數(shù)

    {cout?"現(xiàn)在是"?Hour?"小時(shí)"?Minute?"分鐘"?Second?"秒鐘。"?endl;}

    //私有數(shù)據(jù)成員

    private: int Hour,Minute,Second;

    };

    extern Iqjbl;//外部變量的說(shuō)明

    extern void Display();//外部函數(shù)的說(shuō)明

    extern void Jbjthshu(int);//外部函數(shù)的說(shuō)明

    double Dqjbl=12.345;//外部變量定義初始化

    //外部靜態(tài)變量的定義及初始化

    static float Fstatic=5.4321f;

    int div(intx, inty)//外部函數(shù)的定義

    {if (y==0) throwy;

    returnx/y;

    }

    void main()

    {cout?"在main()主函數(shù)中,全局變量Iqjbl的值為:"?Iqjbl?endl;//①

    cout?"在main()主函數(shù)中,靜態(tài)全局變量Fstatic的值為:"?Fstatic?endl;//②

    Display();//③外部函數(shù)的調(diào)用

    //④帶參外部函數(shù)的調(diào)用

    Jbjthshu(5);Jbjthshu(8);

    int sum=0;//sum定義為局部變量

    //⑤i定義為局部變量

    for(inti=1;i<11;i++) sum+=i;

    cout?"sum="?sum?endl;

    //局部變量定義

    inta=8,b=2,c=9,d=0,x=7,y=3;

    cout?"除數(shù)為零異常舉例 ";

    try//⑥異常監(jiān)控程序段

    {cout?"8/2="?div(a,b)?endl;

    cout?"9/0="?div(c,d)?endl;

    cout?"7/3="?div(x,y)?endl;

    }

    //異常捕獲程序段,int具有異常參數(shù)作用域

    catch(int )

    {cout?"撲獲了除數(shù)為'0'異常!"?endl;}

    //⑦輸出局部變量i的值

    cout?"i="?i?endl;

    cout?"對(duì)象當(dāng)前的時(shí)間是:";

    //⑧設(shè)置時(shí)間為:7:0:0

    Clock MyClock1(7,0,0);

    //調(diào)用MyClock1對(duì)象ShowTime()輸出時(shí)間

    MyClock1.ShowTime();

    }

    4 變量生命期和作用域舉例的說(shuō)明

    在上述例子中:

    語(yǔ)句①引用的是File1.cpp文件的全局變量,要用“extern Iqjbl;”說(shuō)明,也就是Iqjbl變量具有全局的存在性和全局的可見性。語(yǔ)句②引用的是本文件的靜態(tài)全局變量,在本文件中引用,不需要說(shuō)明;但在File1.cpp文件中不能引用,即Fstatic變量具有全局的生命期,只具有所在文件的作用域;也就是Fstatic具有全局的存在性和本文件的可見性。語(yǔ)句①、②的輸出為:

    在main()主函數(shù)中,全局變量Iqjbl的值為:123

    在main()主函數(shù)中,靜態(tài)全局變量Fstatic的值為:5.4321

    語(yǔ)句③調(diào)用File1.cpp文件的函數(shù),需要“extern void Display();”語(yǔ)句進(jìn)行函數(shù)說(shuō)明。在Display()函數(shù)中,調(diào)用了外部變量Dqjbl,要“extern double Dqjbl;”外部變量說(shuō)明,但靜態(tài)全局變量Fstatic即使用“extern float Fstatic;”進(jìn)行了說(shuō)明也不能進(jìn)行引用,其原因是該變量在其它文件中的可見性為不可見。該語(yǔ)句的輸出為:

    “在Display()函數(shù)中,全局變量Dqjbl的值為:12.345”。

    語(yǔ)句④兩次調(diào)用Jbjtbl()函數(shù),第1次調(diào)用Jbjthshu(5)函數(shù),輸出為:

    “在Jbjtbl()函數(shù)中,函數(shù)參數(shù)x和局部變量y的值為:x=5,y=0”

    “在Jbjtbl()函數(shù)中,局部靜態(tài)變量Sjbbl的值為:Sjbjt=1”。

    第2次調(diào)用Jbjthshu(8)函數(shù),輸出為:

    “在Jbjthshu()函數(shù)中,函數(shù)參數(shù)x和局部變量y的值為:x=8,y=0”

    “在Jbjthshu()函數(shù)中,局部靜態(tài)變量Sjbbl的值為:Sjbjt=2”。

    Jbjthshu()函數(shù)的形參x和函數(shù)的局部變量y都具有該函數(shù)的生命期和作用域,即它們?cè)谠摵瘮?shù)中有存在性和可見性。而局部靜態(tài)變量Sjbjt具有全局的生命期和局部的作用域,即Sjbjt具有全局的存在性和局部于該函數(shù)的可見性。

    語(yǔ)句⑤,在for語(yǔ)句中定義了局部變量i,其后通過(guò)“sum+=i;”進(jìn)行累加,sum的值輸出為:

    “sum=55”。

    語(yǔ)句⑥,通過(guò)try{……}實(shí)施對(duì)異常監(jiān)控,有異常發(fā)生時(shí),該監(jiān)控段拋出異常對(duì)象,由“catch(int )”對(duì)異常對(duì)象進(jìn)行捕獲,其catch(int )的參數(shù)就具有異常參數(shù)作用域,也就是該參數(shù)只有在該程序段才具有可見性。其輸出為:

    “除數(shù)為零異常舉例”

    “8/2=4”

    “撲獲了除數(shù)為'0'異常!”

    語(yǔ)句⑦,輸出局部變量i的值,其輸出值為:

    “i=11”

    此i是語(yǔ)句⑤在for語(yǔ)句中定義的局部變量,其生命期及作用域均從定義點(diǎn)開始到本局部的結(jié)束,也就是其存在性和可見性都是局部的。

    語(yǔ)句⑧,創(chuàng)建一個(gè)“Clock MyClock1(7,0,0);”對(duì)象,本語(yǔ)句將在MyClock1對(duì)象中設(shè)置其類中的數(shù)據(jù)成員“Hour、Minute和Second;”分別為:7:0:0。該類的數(shù)據(jù)成員“Hour、Minute和Second”具有類族的存在性和可見性。其輸出為:

    “對(duì)象當(dāng)前的時(shí)間是:現(xiàn)在是7小時(shí)0分鐘0秒鐘”。

    需要注意:

    (1)在hshuMain.cpp文件的main函數(shù)for(inti=1;i<11;i++)中的inti具有從定義點(diǎn)開始到本函數(shù)結(jié)束的生命期和作用域;但在Java語(yǔ)言中,i變量只具有本語(yǔ)句的生命期和作用域。

    (2)在Jbjthshu.cpp文件的Sjbjt具有全局的生命期和局部于Jbjthshu本函數(shù)的作用域。

    5 結(jié)束語(yǔ)

    變量或?qū)ο蟮拇嬖谛员砻饕粋€(gè)變量或?qū)ο笫欠翊嬖冢蛔兞炕驅(qū)ο蟮目梢娦詣t是指變量或?qū)ο蟠嬖诘那闆r下能否被引用;對(duì)于一個(gè)變量或?qū)ο蠖裕骸按嬖诘牟灰欢梢?,可見的一定存在”?/p>

    [1] 趙海廷等編著.C++引言程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2014.

    [2] 嚴(yán)運(yùn)國(guó),趙海廷主編.C++程序設(shè)計(jì)基礎(chǔ)[M].北京:科學(xué)出版社,2005.

    [3] 趙海廷,嚴(yán)運(yùn)國(guó)主編.C++程序設(shè)計(jì)基礎(chǔ)導(dǎo)學(xué)[M].北京:科學(xué)出版社,2006.

    [4] 趙海廷主編.C++語(yǔ)言程序設(shè)計(jì)[M].北京:北京理工大學(xué)出版社,2009

    (責(zé)任編輯:李文英)

    Discussion of Life Cycle and Scope of C++ Language Variations

    Zhao Kuikui1Zhao Haiting2

    (1.Ningbo Ligong Environment and Energy Technology Co., LTD, Ningbo 315806, Zhejiang;2.Wuchang University of Technology, Wuhan 430223, Hubei)

    Life cycle of a variation is the period in which a variation is created and disappears; it is also called as the existence of a variation. A variation’s function is the scope in which it can be quoted, that is, the visibility of a variation, which means whether a variation is quoted in the period it exists. A visible variation does exist while an existing variation is not necessary visible. This paper mainly discusses the life cycle, scope, existence, and visibility of C++ language variations.

    life cycle; scope; existence; visibility

    2016-10-21

    2016-11-04

    趙魁奎(1981~),男,大學(xué),工程師.E-mail:28712870@qq.com

    TP312

    A

    1671-3524(2016)04-0037-04

    猜你喜歡
    生命期語(yǔ)句靜態(tài)
    靜態(tài)隨機(jī)存儲(chǔ)器在軌自檢算法
    重點(diǎn):語(yǔ)句銜接
    精彩語(yǔ)句
    冬季歐亞大陸反氣旋活動(dòng)特征及其與中國(guó)氣溫的關(guān)系
    飛行試驗(yàn)項(xiàng)目生命期研究
    機(jī)床靜態(tài)及動(dòng)態(tài)分析
    具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
    無(wú)線傳感器網(wǎng)絡(luò)最大生命期聚合樹路由算法*
    如何搞定語(yǔ)句銜接題
    智慧城市的全生命期評(píng)價(jià)和成本分析
    永泰县| 安宁市| 山西省| 龙里县| 宕昌县| 长沙县| 永昌县| 游戏| 崇州市| 民乐县| 本溪市| 奉化市| 伊川县| 东乡族自治县| 伊春市| 江都市| 密山市| 金寨县| 奉贤区| 丰城市| 平潭县| 任丘市| 巴楚县| 灵台县| 保德县| 赤城县| 西和县| 岳西县| 耿马| 普安县| 璧山县| 南康市| 嵊州市| 沙田区| 渝北区| 五莲县| 谷城县| 岱山县| 新丰县| 万山特区| 明星|