版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)第6講
C++程序結(jié)構(gòu)習(xí)題講解4-194-203本章主要內(nèi)容作用域與可見(jiàn)性對(duì)象的生存期數(shù)據(jù)與函數(shù)靜態(tài)成員共享數(shù)據(jù)的保護(hù)友元編譯預(yù)處理命令多文件結(jié)構(gòu)和工程深度探索4函數(shù)原形的作用域函數(shù)原型中的參數(shù),其作用域始于
"(",結(jié)束于")"。例如,設(shè)有下列原型聲明:doublearea(doubleradius);radius的作用域僅在于此,不能用于程序正文其他地方,因而可有可無(wú)。作用域與可見(jiàn)性5局部作用域函數(shù)的形參,在塊中聲明的標(biāo)識(shí)符,其作用域自聲明處起,限于塊中,例如:voidfun(inta){intb=a;cin>>b;if(b>0){intc;......}}c的作用域b的作用域作用域與可見(jiàn)性a的作用域6類作用域類作用域作用于特定的成員名。類X的成員m具有類作用域,對(duì)m的訪問(wèn)方式如下:如果在X的成員函數(shù)中沒(méi)有聲明同名的局部作用域標(biāo)識(shí)符,那么在該函數(shù)內(nèi)可以訪問(wèn)成員m。通過(guò)表達(dá)式x.m或者X::m訪問(wèn)。通過(guò)表達(dá)式ptr->M作用域與可見(jiàn)性7命名空間命名空間可以解決類名、函數(shù)名等的命名沖突命名空間的聲明namespace命名空間名{
各種聲明(函數(shù)聲明、類聲明、……)}例namespaceSomeNs
{ classSomeClass{...};}特殊的命名空間全局命名空間:默認(rèn)的命名空間匿名命名空間:對(duì)每個(gè)源文件是唯一的(注意其作用)作用域與可見(jiàn)性命名空間作用域一個(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作用域與可見(jiàn)性9可見(jiàn)性可見(jiàn)性是從對(duì)標(biāo)識(shí)符的引用的角度來(lái)談的概念可見(jiàn)性表示從內(nèi)層作用域向外層作用域“看”時(shí)能看見(jiàn)什么。如果標(biāo)識(shí)在某處可見(jiàn),則就可以在該處引用此標(biāo)識(shí)符。塊作用域類作用域命名空間作用域作用域與可見(jiàn)性10可見(jiàn)性標(biāo)識(shí)符應(yīng)聲明在先,引用在后。如果某個(gè)標(biāo)識(shí)符在外層中聲明,且在內(nèi)層中沒(méi)有同一標(biāo)識(shí)符的聲明,則該標(biāo)識(shí)符在內(nèi)層可見(jiàn)。對(duì)于兩個(gè)嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標(biāo)識(shí)符,則外層作用域的標(biāo)識(shí)符在內(nèi)層不可見(jiàn)。作用域與可見(jiàn)性11同一作用域中的同名標(biāo)識(shí)符在同一作用域內(nèi)的對(duì)象名、函數(shù)名、枚舉常量名會(huì)隱藏同名的類名或枚舉類型名。重載的函數(shù)可以有相同的函數(shù)名。作用域與可見(jiàn)性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;}作用域與可見(jiàn)性例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)生存期塊作用域中聲明的,沒(méi)有用static修是的對(duì)象是動(dòng)態(tài)生存期的對(duì)象(習(xí)慣稱局部生存期對(duì)象)。開(kāi)始于程序執(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變量的生存期與可見(jiàn)性#include<iostream>usingnamespacestd;inti=1;//i為全局變量,具有靜態(tài)生存期。voidother(){staticinta=2;staticintb;//a,b為靜態(tài)局部變量,具有全局壽命,局部可見(jiàn)。
//只第一次進(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)局部變量,有全局壽命,局部可見(jiàn)。
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ì)象中,通過(guò)參數(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è)拷貝必須在類外定義和初始化,用(::)來(lái)指明所屬的類。靜態(tài)成員函數(shù)類外代碼可以使用類名和作用域操作符來(lái)調(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年陜西職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試備考試題含詳細(xì)答案解析
- 2026年湖南化工職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)筆試模擬試題含詳細(xì)答案解析
- 2026年安徽醫(yī)學(xué)高等??茖W(xué)校單招綜合素質(zhì)考試備考題庫(kù)含詳細(xì)答案解析
- 2026年畢節(jié)職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 2026年廣東松山職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試參考題庫(kù)含詳細(xì)答案解析
- 2026年貴州電子信息職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試參考題庫(kù)含詳細(xì)答案解析
- 2026首都經(jīng)濟(jì)貿(mào)易大學(xué)招聘103人參考考試試題及答案解析
- 2026年上半年合肥高新區(qū)管委會(huì)公開(kāi)招聘工作人員45名參考考試試題及答案解析
- 2026年武夷學(xué)院?jiǎn)握芯C合素質(zhì)考試參考題庫(kù)含詳細(xì)答案解析
- 2026年貴州盛華職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考題庫(kù)及答案詳細(xì)解析
- 2026年深圳市離婚協(xié)議書(shū)規(guī)范范本
- 2026年及未來(lái)5年中國(guó)飼料加工設(shè)備行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2026年自動(dòng)駕駛政策法規(guī)報(bào)告
- 醫(yī)療數(shù)據(jù)倫理治理的國(guó)際經(jīng)驗(yàn)借鑒
- 浙江省《檢驗(yàn)檢測(cè)機(jī)構(gòu)技術(shù)負(fù)責(zé)人授權(quán)簽字人》考試題及答案
- 子午流注在護(hù)理中的應(yīng)用
- 新媒體評(píng)論管理制度規(guī)范(3篇)
- 劑量反應(yīng)曲線的統(tǒng)計(jì)分析方法-洞察及研究
- 2025年高職室內(nèi)藝術(shù)設(shè)計(jì)(室內(nèi)設(shè)計(jì))試題及答案
- 2025課堂懲罰 主題班會(huì):馬達(dá)加斯加企鵝課堂懲罰 課件
- 2025年初會(huì)職稱《經(jīng)濟(jì)法基礎(chǔ)》真題匯編
評(píng)論
0/150
提交評(píng)論