《面向?qū)ο蟪绦蛟O(shè)計》中國科學(xué)技術(shù)大學(xué)計算機系馬建輝.ppt
《《面向?qū)ο蟪绦蛟O(shè)計》中國科學(xué)技術(shù)大學(xué)計算機系馬建輝.ppt》由會員分享,可在線閱讀,更多相關(guān)《《面向?qū)ο蟪绦蛟O(shè)計》中國科學(xué)技術(shù)大學(xué)計算機系馬建輝.ppt(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第六章類成員(二),面向?qū)ο蟪绦蛟O(shè)計(C++),6類成員(二),6.1成員變量與成員函數(shù)6.2this指針6.3成員對象6.4const(常量)6.5const對象與const成員函數(shù)6.6靜態(tài)成員變量與靜態(tài)成員函數(shù),6.4const量(常量),從高質(zhì)量程序設(shè)計的角度考察C++中的const!,6.4.1const的意義,最低權(quán)限原則:軟件工程的基本原則之一。const的意義:在可更改與不可更改之間畫一條明確的界線,提高程序的安全性和可控性。eg:constinti=100;i++;//編譯錯誤,6.4.2C中的const(常量),“一個不能被改變的普通變量”。因此:--總是占用存儲;--名字是全局的。也就是說,默認情況下,const是外部連接的(容易引起“名字沖突”)。constintbufsize;//無需初始化constintbufsize=100;charbuf[bufsize];//error!!Why??在編譯時,編譯器并不知道const的值,它只是一個“運行時常量”。,6.4.3C++的Const,通常,C++編譯器不為const創(chuàng)建存儲空間,而是把它保存在“符號表”里,即“編譯時常量”。constintbufsize;//非法,未賦初值constintbufsize=100;charstrbuf[bufsize];//OK,Why?默認情況下,C++中的const是內(nèi)部連接的,也就是說,const僅在const被定義過的文件里才是可見的。(因此,不用擔(dān)心名字沖突)當(dāng)定義一個const時,必須賦一個值給它,除非用extern做出了清楚的說明。當(dāng)用extern說明了const時,編譯器會強制為const分配空間,而不是保存在符號表中。externconstintbufsize;//未賦初值,但extern聲明了bufsize在另一個文件中定義及賦初值。,6.4.3C++的Const(續(xù)),const用于集合,必須為其分配內(nèi)存,(因為編譯器“不愿意”把集合保存到符號表中,太復(fù)雜)。constinti[]={1,2,3,4};floatf[i[3]];//非法,編譯期間無法知道存儲空間的值。structS{inti,j;};constSs[]={{1,2},{3,4}};doubled[s[1].j];//非法,理由同上intmain(){}///:~,6.4.4C++中const的作用,值替代:C++的constvsC中的宏替換#defineBUFSIZE100;//宏替換charstr[BUFSIZE];vsconstintbufsize=100;//C++的constcharstr[bufsize];在宏替換中,BUFSIZE沒有類型信息,不能進行類型檢查;宏定義是全局的,容易名字沖突。,6.4.4C++中const的作用(續(xù)),安全性如果想用運行期間產(chǎn)生的值初始化一個變量,并且知道在該變量的生命期內(nèi)其值不變,則可用const限定該變量,達到最大限度地保證改變量安全性的目的。intmain(){cout<<"typeacharacter}///:~,6.4.5const的應(yīng)用:const指針,1.指向const的指針(指針指向的內(nèi)存地址的值不能改變)constint*u;//u是一個指針,它指向constint;intconst*v;//v是一個指向恰好是const的int的普通指針;2.const指針(指針的值不能改變)constintd=1;int*constw=//w是一個指針,這個指針是指向int的const指針注意:C++中,const指針必須賦初值,6.4.5const的應(yīng)用:const指針(續(xù)),3.const指針指向const對象intd=1;constint*constx=//x,x2,*x,*x2都不能改變,非const對象的地址可以賦給const指針;const對象的地址絕不可以賦給非const指針。(因為這樣做可能導(dǎo)致通過非const指針改變const對象的值的后果)intd=1;constinte=2;int*u=//legalbutbadpracticeintmain(){}///:~,?注意,6.4.6const的應(yīng)用:const參數(shù),1.傳遞const值voidf1(constinti){i++;//編譯時錯誤,i不能改變}“形參”不能被改變or“實參”不能被改變???,,6.4.7const的應(yīng)用:const返回值,2.按值返回內(nèi)部const常量intf3(){return1;}constintf4(){return1;}//返回constint;intmain(){constintj=f3();//Worksfineintk=f4();//Butthisworksfinetoo!}///:~對內(nèi)部類型來說,按值返回const量并沒有什么特別的意義。,6.4.7const的應(yīng)用:const返回值(續(xù)),3.按值返回自定義類型的const:實際上阻止了返回值作為左值出現(xiàn)。classX{inti;public:X(intii=0);voidmodify();};X::X(intii){i=ii;}voidX::modify(){i++;},Xf5(){Xx(2)returnx;//返回變量}constXf6(){returnX();//按值返回const;}voidf7(X//Error:Why??}///:~,error2664:cannotconvertparameter1fromconstclassXtoclassX//Error:試圖改變值inti=*cip;//OK--copiesvalueint*ip2=cip;//Error:試圖讓非const*指向const*}constint*constw(){staticinti;return//返回靜態(tài)局部量的地址},intmain(){intx=0;int*ip=//NotOK}///:~,,當(dāng)傳遞一個或返回一個地址時(指針或引用),設(shè)置為const可以阻止客戶程序員修改其值。,對參數(shù)傳遞而言,C++建議用const引用傳遞替代值傳遞。?問:有什么好處??答:兼顧了效率和易用性傳遞地址比傳遞整個對象更有效;引用傳遞比指針傳遞形式上更簡單。,作業(yè):,8.5(上機)8.16(上機),6.5const對象與const成員函數(shù),本節(jié)討論const在類中的應(yīng)用const數(shù)據(jù)成員const成員函數(shù)const對象,6.5.1const數(shù)據(jù)成員,classFred{constintsize;public:Fred(intsz);voidprint();};Fred::Fred(intsz):size(sz){}voidFred::print(){cout<- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 面向?qū)ο蟪绦蛟O(shè)計 面向 對象 程序設(shè)計 中國科學(xué)技術(shù)大學(xué) 計算機系 馬建輝
鏈接地址:http://m.appdesigncorp.com/p-12672790.html