第五章數(shù)據(jù)的共享與保護研究報告_第1頁
第五章數(shù)據(jù)的共享與保護研究報告_第2頁
第五章數(shù)據(jù)的共享與保護研究報告_第3頁
第五章數(shù)據(jù)的共享與保護研究報告_第4頁
第五章數(shù)據(jù)的共享與保護研究報告_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第五章數(shù)據(jù)的共享與保護佘欣媛5.1作用域與可見性作用域:是標識符的有效范圍;可見性:標識符是否可以引用的問題;5.1.1作用域1、函數(shù)原型的作用域2、塊作用域3、類作用域4、命名空間作用域1、函數(shù)原型的作用域函數(shù)原型中的參數(shù),其作用域始于

"(",結(jié)束于")"。例如,設(shè)有下列原型聲明:doubleArea(doubleradius);//函數(shù)的聲明radius的作用域僅在于此,不能用于程序正文其它地方,因而可有可無。3、類作用域classX{public: intm; intGetM();};intX::GetM(){ returnm;}X類的成員m具有類作用域3、對類的成員三種訪問方式(1)如果在X的成員函數(shù)中沒有聲明相同的局部作用域標識符,那么在該函數(shù)內(nèi)可以直接訪問成員m(2)通過表達式x.m或X::m訪問(3)通過表達式ptr->m訪問,ptr為指向X類的一個對象的指針(1)如果在X的成員函數(shù)中沒有聲明相同的局部作用域標識符,那么在該函數(shù)內(nèi)可以直接訪問成員m

classX{public: intm; intGetM();};intX::GetM(){ returnm;}成員函數(shù)成員數(shù)據(jù)類內(nèi)成員可以互相直接訪問classX{public:

int

m; voidGetM(intm);};voidX::GetM(int

m){ cout<<m<<endl; return;}成員函數(shù)函數(shù)GetM的形參——局部變量這是哪個m局部變量(2)通過表達式x.m或X::m訪問classX{public: intm; voidGetM(intm);};voidmain(){ Xx;

x.m=3; return;}(3)通過表達式ptr->m訪問,ptr為指向X類的一個對象的指針classX{public: intm; voidGetM(intm);};voidmain(){ Xx; X*pClass=x; pClass->m=3; return;}等同于x.m=34、命名空間作用域namespace命名空間名{命名空間名內(nèi)的各種聲明; };可以是各種東西的聲明都行:函數(shù)、類、變量……namespaceshe{ intiSheNum; classTestClass { public: intiNum; };voidfunction1();};命名空間名字數(shù)據(jù)變量類函數(shù)命名空間中標識符的引用 usingnamespace命名空間名;using命名空間::標識符名;命名空間::標識符名usingnamespace命名空間名;#include<iostream>usingnamespacestd;voidmain(){

cout<<“命名空間引用”;}using命名空間::標識符名;namespaceshe{ intiSheNum;int

iNotUsing;};usingshe::iSheNum;voidmain(){

iSheNum=2; cout<<iSheNum<<endl;iNotUsing=3; return;}一旦使用了紅色聲明,那么用到iSheNum的各處都不用指明出處iNotUsing的使用會報錯嗎會,因為沒有聲明引用命名空間::標識符名namespaceshe{ intiSheNum;int

iNotUsing;};usingshe::iSheNum;voidmain(){

iSheNum=2; cout<<iSheNum<<endl;

she::iNotUsing=3; return;}這樣子就對了命名空間是開放的,即可以隨時把新的成員名稱加入到已有的命名空間之中去。方法:多次聲明和定義同一命名空間,每次添加自己的新成員和名稱。namespace

A

{

inti;

voidf();

}//現(xiàn)在A有成員i和f()

namespaceA{

intj;

voidg();

}//現(xiàn)在A有成員i、f()、j和g()

命名空間可以嵌套定義Namespace命名空間名1{ namespace命名空間名2 { };};namespaceouter{ intiOuter; namespaceinner { intiInner; };};voidmain(){

outer::iOuter=5;

outer::inner::iInner=6;}5.1.2可見性程序運行到某一點。能夠引用到的標識符,就是該處可見的標識符??梢娦员硎緩膬?nèi)層作用域向外層作用域“看”時能看見什么。塊作用域類作用域命名空間作用域作用域包含關(guān)系作用域可見性的一般規(guī)則:標識符應(yīng)聲明在先,引用在后。在同一作用域中,不能聲明同名的標識符。如果某個標識符在外層中聲明,且在內(nèi)層中沒有同一標識符的聲明,則該標識符在內(nèi)層可見。對于兩個嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標識符,則外層作用域的標識符在內(nèi)層不可見。1、標識符應(yīng)聲明在先,引用在后voidmain(){

iNum=9;intiNum;}voidmain(){

intiNum;

iNum=9;}2、在同一作用域中,不能聲明同名的標識符。voidmain(){

intiNum;//變量的聲明intiNum=9;//重復(fù)定義}//提示redefinition如果某個標識符在外層中聲明,且在內(nèi)層中沒有同一標識符的聲明,則該標識符在內(nèi)層可見。對于兩個嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標識符,則外層作用域的標識符在內(nèi)層不可見。voidmain(){inta=1;{ inta=2; cout<<a<<endl;}}5.2對象的生存期產(chǎn)生結(jié)束生存期靜態(tài)生存期動態(tài)生存期5.2.1靜態(tài)生存期生存期與程序的運行期相同從執(zhí)行程序開始到退出程序命名空間中的函數(shù)內(nèi)部有static修飾的staticintiNum;開始運行程序退出程序voidfunction1(){intiNum=0;iNum++;cout<<iNum<<endl;}voidmain(){

function1();

function1();}運行結(jié)果?11voidfunction1(){

staticintiNum=0;iNum++;cout<<iNum<<endl;}voidmain(){

function1();

function1();}運行結(jié)果?125.2.2動態(tài)生存期聲明處所在作用域結(jié)束除了靜態(tài)生存期的都是動態(tài)生存期#include<iostream.h>voidfun();voidmain(){fun();fun();}voidfun(){

staticinta=1;inti=5;

a++;i++;cout<<"i="<<i<<",a="<<a<<endl;}這里所講靜態(tài)、動態(tài)生存期不單單針對普通變量,同樣適用于類對象voidcrePoint(){

point

myPoint; myPoint.iNum=1; myPoint.set(); myPoint.set(); myPoint.show();}intmain(){ crePoint();

myPoint.show();}pointmyPoint;看到這voidcrePoint(){

myPoint.iNum=1; myPoint.set(); myPoint.set(); myPoint.show();}intmain(){ crePoint(); myPoint.show();}5.3類的靜態(tài)成員5.3.1靜態(tài)數(shù)據(jù)成員5.3.2靜態(tài)函數(shù)成員普通的類IntiNumvoidfunction()Point類IntiNumvoidfunction()對象1IntiNumvoidfunction()對象2……分配了內(nèi)存分配了內(nèi)存沒有分配內(nèi)存是虛無的各個對象有各自的數(shù)據(jù)和函數(shù)5.3.1靜態(tài)數(shù)據(jù)成員在普通數(shù)據(jù)成員的聲明前面加了static標志classPoint {public: Point(); intX;

static

intcountP;

};intcountP=0;需要在類外單獨初始化有靜態(tài)數(shù)據(jù)的類intX;static

intcountP;Point();Point類intX;

Point();對象1intX;

Point();對象2……分配了內(nèi)存分配了內(nèi)存其他沒有分配內(nèi)存是虛無的各個對象有各自的數(shù)據(jù)和函數(shù)countP分配了內(nèi)存,為各個對象共享classPoint {public: Point(); intX;private:

static

intcountP;

};intcountP=0;用來分配內(nèi)存雖然是私有變量但是可以在類外初始化voidmain(){PointmyPoint;}Point::

countP;如何引用靜態(tài)成員countPmyPoint::

X;如何引用普通成員X5.3.2靜態(tài)函數(shù)成員有靜態(tài)數(shù)據(jù)的類intX;static

voidf();Point();Point類intX;

Point();對象1intX;

Point();對象2……分配了內(nèi)存分配了內(nèi)存其他沒有分配內(nèi)存是虛無的各個對象有各自的數(shù)據(jù)和函數(shù)static

voidf(),為各個對象共享classA{public:st

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論