版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)第6講
C++程序結(jié)構(gòu)習(xí)題講解4-194-203本章主要內(nèi)容作用域與可見性對(duì)象的生存期數(shù)據(jù)與函數(shù)靜態(tài)成員共享數(shù)據(jù)的保護(hù)友元編譯預(yù)處理命令多文件結(jié)構(gòu)和工程深度探索4函數(shù)原形的作用域函數(shù)原型中的參數(shù),其作用域始于
"(",結(jié)束于")"。例如,設(shè)有下列原型聲明:doublearea(doubleradius);radius的作用域僅在于此,不能用于程序正文其他地方,因而可有可無。作用域與可見性5局部作用域函數(shù)的形參,在塊中聲明的標(biāo)識(shí)符,其作用域自聲明處起,限于塊中,例如:voidfun(inta){intb=a;cin>>b;if(b>0){intc;......}}c的作用域b的作用域作用域與可見性a的作用域6類作用域類作用域作用于特定的成員名。類X的成員m具有類作用域,對(duì)m的訪問方式如下:如果在X的成員函數(shù)中沒有聲明同名的局部作用域標(biāo)識(shí)符,那么在該函數(shù)內(nèi)可以訪問成員m。通過表達(dá)式x.m或者X::m訪問。通過表達(dá)式ptr->M作用域與可見性7命名空間命名空間可以解決類名、函數(shù)名等的命名沖突命名空間的聲明namespace命名空間名{
各種聲明(函數(shù)聲明、類聲明、……)}例namespaceSomeNs
{ classSomeClass{...};}特殊的命名空間全局命名空間:默認(rèn)的命名空間匿名命名空間:對(duì)每個(gè)源文件是唯一的(注意其作用)作用域與可見性命名空間作用域一個(gè)命名空間確定了一個(gè)命名空間作用域引用其它命名空間作用域中的標(biāo)識(shí)符命名空間名::標(biāo)識(shí)符名例:聲明一個(gè)SomeClass型的對(duì)象SomeNs::SomeClassobj1;將其它命名空間作用域的標(biāo)識(shí)符暴露于當(dāng)前作用域?qū)χ付?biāo)識(shí)符using命名空間名::標(biāo)識(shí)符名;對(duì)所有標(biāo)識(shí)符usingnamespace命名空間名;8作用域與可見性9可見性可見性是從對(duì)標(biāo)識(shí)符的引用的角度來談的概念可見性表示從內(nèi)層作用域向外層作用域“看”時(shí)能看見什么。如果標(biāo)識(shí)在某處可見,則就可以在該處引用此標(biāo)識(shí)符。塊作用域類作用域命名空間作用域作用域與可見性10可見性標(biāo)識(shí)符應(yīng)聲明在先,引用在后。如果某個(gè)標(biāo)識(shí)符在外層中聲明,且在內(nèi)層中沒有同一標(biāo)識(shí)符的聲明,則該標(biāo)識(shí)符在內(nèi)層可見。對(duì)于兩個(gè)嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標(biāo)識(shí)符,則外層作用域的標(biāo)識(shí)符在內(nèi)層不可見。作用域與可見性11同一作用域中的同名標(biāo)識(shí)符在同一作用域內(nèi)的對(duì)象名、函數(shù)名、枚舉常量名會(huì)隱藏同名的類名或枚舉類型名。重載的函數(shù)可以有相同的函數(shù)名。作用域與可見性12#include<iostream>usingnamespacestd;inti; //在全局命名空間中的全局變量namespaceNs{ intj; //在Ns命名空間中的全局變量}intmain(){ i=5; //為全局變量i賦值
Ns::j=6; //為全局變量j賦值
{ //子塊1 usingnamespaceNs;//當(dāng)前塊中可以直接引用Ns中的標(biāo)識(shí)符
inti; //局部變量,局部作用域
i=7; cout<<"i="<<i<<endl;//輸出7 cout<<"j="<<j<<endl;//輸出6 } cout<<"i="<<i<<endl; //輸出5 return0;}作用域與可見性例5.113對(duì)象的生存期對(duì)象從產(chǎn)生到結(jié)束的這段時(shí)間就是它的生存期。在對(duì)象生存期內(nèi),對(duì)象將保持它的值,直到被更新為止。14靜態(tài)生存期這種生存期與程序的運(yùn)行期相同。在文件作用域中聲明的對(duì)象具有這種生存期。在函數(shù)內(nèi)部聲明靜態(tài)生存期對(duì)象,要冠以關(guān)鍵字static
。只生成一次,只初始化一次對(duì)象的生存期voidfun(){ staticintk=10;
k++; cout<<k<<endl;}voidfun(){ staticintk; k=10; k++; cout<<k<<endl;}結(jié)果一樣嗎?voidmain(){
for(intI=0;I<10;I++) fun();
}15#include<iostream>usingnamespacestd;inti=5;//文件作用域intmain(){cout<<"i="<<i<<endl;return0;}i具有靜態(tài)生存期對(duì)象的生存期例16動(dòng)態(tài)生存期塊作用域中聲明的,沒有用static修是的對(duì)象是動(dòng)態(tài)生存期的對(duì)象(習(xí)慣稱局部生存期對(duì)象)。開始于程序執(zhí)行到聲明點(diǎn)時(shí),結(jié)束于命名該標(biāo)識(shí)符的作用域結(jié)束處。對(duì)象的生存期17#include<iostream>usingnamespacestd;voidfun();intmain(){fun();fun();}voidfun(){
staticinta=1;inti=5;
a++;
i++;cout<<"i="<<i<<",a="<<a<<endl;}運(yùn)行結(jié)果:i=6,a=2i=6,a=3i是動(dòng)態(tài)生存期a是靜態(tài)生存期對(duì)象的生存期例變量類型總結(jié)19例5-2變量的生存期與可見性#include<iostream>usingnamespacestd;inti=1;//i為全局變量,具有靜態(tài)生存期。voidother(){staticinta=2;staticintb;//a,b為靜態(tài)局部變量,具有全局壽命,局部可見。
//只第一次進(jìn)入函數(shù)時(shí)被初始化。
intc=10;//C為局部變量,具有動(dòng)態(tài)生存期,
//每次進(jìn)入函數(shù)時(shí)都初始化。
a+=
2;i+=
32;c+=
5;cout<<"---OTHER---\n";cout<<"i:"<<i<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;
b=a;}對(duì)象的生存期intmain(){staticinta;//靜態(tài)局部變量,有全局壽命,局部可見。
intb=-10;//b,c為局部變量,具有動(dòng)態(tài)生存期。
intc=0; cout<<"---MAIN---\n";cout<<"i:"<<i<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;c+=8;other();cout<<"---MAIN---\n";cout<<"i:"<<i<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;
i+=
10;other(); return0;}17運(yùn)行結(jié)果:---MAIN---
i:1
a:0b:-10c:0---OTHER---
i:33
a:4b:0c:15---MAIN---
i:33
a:0b:-10c:8---OTHER---
i:75
a:6b:4c:151822例5-3具有靜態(tài)、動(dòng)態(tài)生存期對(duì)象的時(shí)鐘程序#include<iostream>usingnamespacestd;classClock{ //時(shí)鐘類定義public: //外部接口
Clock(); voidsetTime(intnewH,intnewM,intnewS);//三個(gè)形參均具有函數(shù)原型作用域
voidshowTime();private: //私有數(shù)據(jù)成員
inthour,minute,second;};對(duì)象的生存期Clock::Clock():hour(0),minute(0),second(0){} //構(gòu)造函數(shù)voidClock::setTime(intnewH,intnewM,intnewS){//三個(gè)形參均具有局部作用域
hour=newH; minute=newM; second=newS;}voidClock::showTime(){ cout<<hour<<":"<<minute<<":"<<second<<endl;}20ClockglobClock;//聲明對(duì)象globClock,
//具有靜態(tài)生存期,文件作用域intmain(){//主函數(shù) cout<<"Firsttimeoutput:"<<endl;
//引用具有文件作用域的對(duì)象:
globClock.showTime();//對(duì)象的成員函數(shù)具有類作用域
globClock.setTime(8,30,30); ClockmyClock(globClock);
//聲明具有塊作用域的對(duì)象myClock cout<<"Secondtimeoutput:"<<endl;
myClock.showTime(); //引用具有塊作用域的對(duì)象 return0;}21程序的運(yùn)行結(jié)果為:Firsttimeoutput:0:0:0Secondtimeoutput:8:30:302226數(shù)據(jù)與函數(shù)數(shù)據(jù)存儲(chǔ)在局部對(duì)象中,通過參數(shù)傳遞實(shí)現(xiàn)共享——函數(shù)間的參數(shù)傳遞。數(shù)據(jù)存儲(chǔ)在全局對(duì)象中。將數(shù)據(jù)和使用數(shù)據(jù)的函數(shù)封裝在類中。數(shù)據(jù)與函數(shù)27使用全局對(duì)象#include<iostream>usingnamespacestd;intglobal;voidf(){global=5;}voidg(){cout<<global<<endl;}intmain(){f();g();//輸出“5”return0;}數(shù)據(jù)與函數(shù)28將函數(shù)與數(shù)據(jù)封裝#include<iostream>usingnamespacestd;classApplication{public:voidf();voidg();private:intglobal;};voidApplication::f(){
global=5;}voidApplication::g(){cout<<global<<endl;}intmain(){ApplicationMyApp;MyApp.f();MyApp.g();return0;}數(shù)據(jù)與函數(shù)29靜態(tài)成員靜態(tài)數(shù)據(jù)成員用關(guān)鍵字static聲明該類的所有對(duì)象維護(hù)該成員的同一個(gè)拷貝必須在類外定義和初始化,用(::)來指明所屬的類。靜態(tài)成員函數(shù)類外代碼可以使用類名和作用域操作符來調(diào)用靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)只能引用屬于該類的靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù)。靜態(tài)成員30例5-4
具有靜態(tài)數(shù)據(jù)成員的Point類#include<iostream>usingnamespacestd;classPoint {public: Point(intx=0,inty=0):x(x),y(y){count++;} Point(Point&p); intgetX(){returnx;} intgetY(){returny;} voidshowCount(){ cout<<"Objectcount=“<<count<<endl;}private: intx,y;
staticintcount;};靜態(tài)成員Point::Point(Point&p){ x=p.x; x=p.y; count++;}intPoint::count=0;intmain(){ Pointa(4,5); cout<<"PointA:"<<a.getX()<<","<<a.getY(); a.showCount(); Pointb(a); cout<<"PointB:"<<b.getX()<<","<<b.getY(); b.showCount(); return0;}2832靜態(tài)成員函數(shù)舉例#include<iostream>usingnamespacestd;classApplication{public:staticvoidf();staticvoidg();private:staticintglobal;};intApplication::global=0;voidApplication::f(){ global=5;}voidApplication::g(){ cout<<global<<endl;}intmain(){ Application::f(); Application::g(); return0;}靜態(tài)成員33靜態(tài)成員函數(shù)舉例classA{public: staticvoidf(Aa);private: intx;};voidA::f(Aa){ cout<<x;//對(duì)x的引用是錯(cuò)誤的 cout<<a.x;//正確}靜態(tài)成員34具有靜態(tài)數(shù)據(jù)、函數(shù)成員的Point類#include<iostream>usingnamespace
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 賓館短租房合同模板
- 運(yùn)營場(chǎng)地合同模板
- 石土方工程合同模板
- 房屋贈(zèng)與比例合同模板
- 酒店酒水采購合同模板
- 杭州商鋪房租合同模板
- 溫泉施工合同模板
- 用工合同模板 cdr
- 轉(zhuǎn)按揭房貸合同模板
- 專用醫(yī)療器械購買合同:2024年標(biāo)準(zhǔn)版版
- 第6章 金屬基復(fù)合材料的界面及其表征
- 第一單元 歲月回聲- 保衛(wèi)黃河 課件 2023-2024學(xué)年人音版初中音樂九年級(jí)下冊(cè)
- 實(shí)施書記項(xiàng)目工作總結(jié)
- 新媒體視覺設(shè)計(jì)之新媒體動(dòng)態(tài)交互視覺設(shè)計(jì)
- 《治安管理處罰法》課件
- 咳嗽暈厥綜合征查房
- 2024年中國長江三峽集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 胎膜早破教學(xué)查房
- 消毒供應(yīng)中心消毒隔離質(zhì)量控制評(píng)價(jià)標(biāo)準(zhǔn)
- 視覺與視覺環(huán)境設(shè)計(jì)
- 建筑工程管理(建筑材料)專業(yè)中級(jí)職稱理論練習(xí)試題及答案(一)
評(píng)論
0/150
提交評(píng)論