版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面向對象程序設計(C++)第6講
C++程序結構習題講解4-194-203本章主要內容作用域與可見性對象的生存期數(shù)據(jù)與函數(shù)靜態(tài)成員共享數(shù)據(jù)的保護友元編譯預處理命令多文件結構和工程深度探索4函數(shù)原形的作用域函數(shù)原型中的參數(shù),其作用域始于
"(",結束于")"。例如,設有下列原型聲明:doublearea(doubleradius);radius的作用域僅在于此,不能用于程序正文其他地方,因而可有可無。作用域與可見性5局部作用域函數(shù)的形參,在塊中聲明的標識符,其作用域自聲明處起,限于塊中,例如:voidfun(inta){intb=a;cin>>b;if(b>0){intc;......}}c的作用域b的作用域作用域與可見性a的作用域6類作用域類作用域作用于特定的成員名。類X的成員m具有類作用域,對m的訪問方式如下:如果在X的成員函數(shù)中沒有聲明同名的局部作用域標識符,那么在該函數(shù)內可以訪問成員m。通過表達式x.m或者X::m訪問。通過表達式ptr->M作用域與可見性7命名空間命名空間可以解決類名、函數(shù)名等的命名沖突命名空間的聲明namespace命名空間名{
各種聲明(函數(shù)聲明、類聲明、……)}例namespaceSomeNs
{ classSomeClass{...};}特殊的命名空間全局命名空間:默認的命名空間匿名命名空間:對每個源文件是唯一的(注意其作用)作用域與可見性命名空間作用域一個命名空間確定了一個命名空間作用域引用其它命名空間作用域中的標識符命名空間名::標識符名例:聲明一個SomeClass型的對象SomeNs::SomeClassobj1;將其它命名空間作用域的標識符暴露于當前作用域對指定標識符using命名空間名::標識符名;對所有標識符usingnamespace命名空間名;8作用域與可見性9可見性可見性是從對標識符的引用的角度來談的概念可見性表示從內層作用域向外層作用域“看”時能看見什么。如果標識在某處可見,則就可以在該處引用此標識符。塊作用域類作用域命名空間作用域作用域與可見性10可見性標識符應聲明在先,引用在后。如果某個標識符在外層中聲明,且在內層中沒有同一標識符的聲明,則該標識符在內層可見。對于兩個嵌套的作用域,如果在內層作用域內聲明了與外層作用域中同名的標識符,則外層作用域的標識符在內層不可見。作用域與可見性11同一作用域中的同名標識符在同一作用域內的對象名、函數(shù)名、枚舉常量名會隱藏同名的類名或枚舉類型名。重載的函數(shù)可以有相同的函數(shù)名。作用域與可見性12#include<iostream>usingnamespacestd;inti; //在全局命名空間中的全局變量namespaceNs{ intj; //在Ns命名空間中的全局變量}intmain(){ i=5; //為全局變量i賦值
Ns::j=6; //為全局變量j賦值
{ //子塊1 usingnamespaceNs;//當前塊中可以直接引用Ns中的標識符
inti; //局部變量,局部作用域
i=7; cout<<"i="<<i<<endl;//輸出7 cout<<"j="<<j<<endl;//輸出6 } cout<<"i="<<i<<endl; //輸出5 return0;}作用域與可見性例5.113對象的生存期對象從產(chǎn)生到結束的這段時間就是它的生存期。在對象生存期內,對象將保持它的值,直到被更新為止。14靜態(tài)生存期這種生存期與程序的運行期相同。在文件作用域中聲明的對象具有這種生存期。在函數(shù)內部聲明靜態(tài)生存期對象,要冠以關鍵字static
。只生成一次,只初始化一次對象的生存期voidfun(){ staticintk=10;
k++; cout<<k<<endl;}voidfun(){ staticintk; k=10; k++; cout<<k<<endl;}結果一樣嗎?voidmain(){
for(intI=0;I<10;I++) fun();
}15#include<iostream>usingnamespacestd;inti=5;//文件作用域intmain(){cout<<"i="<<i<<endl;return0;}i具有靜態(tài)生存期對象的生存期例16動態(tài)生存期塊作用域中聲明的,沒有用static修是的對象是動態(tài)生存期的對象(習慣稱局部生存期對象)。開始于程序執(zhí)行到聲明點時,結束于命名該標識符的作用域結束處。對象的生存期17#include<iostream>usingnamespacestd;voidfun();intmain(){fun();fun();}voidfun(){
staticinta=1;inti=5;
a++;
i++;cout<<"i="<<i<<",a="<<a<<endl;}運行結果:i=6,a=2i=6,a=3i是動態(tài)生存期a是靜態(tài)生存期對象的生存期例變量類型總結19例5-2變量的生存期與可見性#include<iostream>usingnamespacestd;inti=1;//i為全局變量,具有靜態(tài)生存期。voidother(){staticinta=2;staticintb;//a,b為靜態(tài)局部變量,具有全局壽命,局部可見。
//只第一次進入函數(shù)時被初始化。
intc=10;//C為局部變量,具有動態(tài)生存期,
//每次進入函數(shù)時都初始化。
a+=
2;i+=
32;c+=
5;cout<<"---OTHER---\n";cout<<"i:"<<i<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;
b=a;}對象的生存期intmain(){staticinta;//靜態(tài)局部變量,有全局壽命,局部可見。
intb=-10;//b,c為局部變量,具有動態(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運行結果:---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)、動態(tài)生存期對象的時鐘程序#include<iostream>usingnamespacestd;classClock{ //時鐘類定義public: //外部接口
Clock(); voidsetTime(intnewH,intnewM,intnewS);//三個形參均具有函數(shù)原型作用域
voidshowTime();private: //私有數(shù)據(jù)成員
inthour,minute,second;};對象的生存期Clock::Clock():hour(0),minute(0),second(0){} //構造函數(shù)voidClock::setTime(intnewH,intnewM,intnewS){//三個形參均具有局部作用域
hour=newH; minute=newM; second=newS;}voidClock::showTime(){ cout<<hour<<":"<<minute<<":"<<second<<endl;}20ClockglobClock;//聲明對象globClock,
//具有靜態(tài)生存期,文件作用域intmain(){//主函數(shù) cout<<"Firsttimeoutput:"<<endl;
//引用具有文件作用域的對象:
globClock.showTime();//對象的成員函數(shù)具有類作用域
globClock.setTime(8,30,30); ClockmyClock(globClock);
//聲明具有塊作用域的對象myClock cout<<"Secondtimeoutput:"<<endl;
myClock.showTime(); //引用具有塊作用域的對象 return0;}21程序的運行結果為:Firsttimeoutput:0:0:0Secondtimeoutput:8:30:302226數(shù)據(jù)與函數(shù)數(shù)據(jù)存儲在局部對象中,通過參數(shù)傳遞實現(xiàn)共享——函數(shù)間的參數(shù)傳遞。數(shù)據(jù)存儲在全局對象中。將數(shù)據(jù)和使用數(shù)據(jù)的函數(shù)封裝在類中。數(shù)據(jù)與函數(shù)27使用全局對象#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ù)成員用關鍵字static聲明該類的所有對象維護該成員的同一個拷貝必須在類外定義和初始化,用(::)來指明所屬的類。靜態(tài)成員函數(shù)類外代碼可以使用類名和作用域操作符來調用靜態(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;//對x的引用是錯誤的 cout<<a.x;//正確}靜態(tài)成員34具有靜態(tài)數(shù)據(jù)、函數(shù)成員的Point類#include<iostream>usingnamespace
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年混凝土管樁購銷協(xié)議版B版
- 滬科版九年級數(shù)學上冊期末復習考點 第24章 圓知識歸納與題型突破(17類題型清單)
- 2024-2030年中國塑料中空成型機市場供需形勢分析及未來發(fā)展策略研究報告
- 2024年版土地中介合同(精練)3篇
- 2024全新股東合作協(xié)議書下載:企業(yè)戰(zhàn)略聯(lián)盟與共同投資協(xié)議3篇
- 2024年三輪車維修保養(yǎng)及配件供應協(xié)議3篇
- 2024年樁基施工項目合作合同書版B版
- 2025年昆明貨運資格證試題答案解析
- 2024年特定借款權讓渡合同版B版
- 2025年陜西貨運從業(yè)資格證考題500道
- LNG加氣站運營與維護方案
- 人教版數(shù)學六上第四單元《比》全單元教學設計
- 2024年下半年教師資格考試高中思想政治學科知識與教學能力測試試卷及答案解析
- LY/T 3371-2024草原生態(tài)狀況評價技術規(guī)范
- 2024年中華全國律師協(xié)會招聘5人歷年(高頻重點復習提升訓練)共500題附帶答案詳解
- 供貨能力方案
- 四川2024年四川省公安廳招聘警務輔助人員186人筆試歷年典型考題及考點附答案解析
- 艾滋病性病的健康教育與行為干預
- 2023年12月遼寧大連甘井子區(qū)招考聘用社區(qū)工作者50人 筆試歷年典型考題及考點剖析附答案詳解
- 2024事業(yè)單位聘用合同書封面
- 數(shù)據(jù)通信與計算機網(wǎng)絡智慧樹知到期末考試答案章節(jié)答案2024年四川鐵道職業(yè)學院
評論
0/150
提交評論