C語言程序設(shè)計4_第1頁
C語言程序設(shè)計4_第2頁
C語言程序設(shè)計4_第3頁
C語言程序設(shè)計4_第4頁
C語言程序設(shè)計4_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

會計學1C語言程序設(shè)計4標識符的作用域與可見性(1/4)什么是標識符?某內(nèi)存空間的代號什么是標識符的作用域?標識符的有效范圍什么是標識符的可見性?如果在當前位置能使用指定的標識符,則該標識符可見第2頁/共46頁第1頁/共46頁標識符的作用域與可見性(2/4)標識符有哪些作用域?函數(shù)原形作用域函數(shù)聲明中的形參的作用域塊作用域從聲明標識符的語句起到包含該聲明的}之間通常稱具有塊作用域的變量為局部變量第3頁/共46頁第2頁/共46頁標識符的作用域與可見性(3/4)類作用域類的成員在類內(nèi)的作用域類內(nèi)是類聲明的{}和所有類的函數(shù)的定義部分文件作用域在文件中聲明,但沒被任何一對{}包括的標識符的作用域通常稱之為全局變量第4頁/共46頁第3頁/共46頁標識符的作用域與可見性(4/4)標識符的可見性有哪些規(guī)則?標識符要先聲明,后使用同一作用域內(nèi),標識符不能重名不同作用域內(nèi),標識符可以重名特例:如果A作用域包含B作用域,B內(nèi)的標識符會掩蔽掉A中的同名標識符,使其不可見第5頁/共46頁第4頁/共46頁思考閱讀下述代碼,說明其中標識符的作用域Eye::Eye(boolleftIsSmall,boolleftIsSingle):left(leftIsSmall,leftIsSingle){

Eyeleft(leftIsSmall,leftIsSingle);}第6頁/共46頁第5頁/共46頁看例子思考本例中變量的作用域?可見性?哪些量是全局變量?如何訪問被掩蔽的全局變量?如果將Point::Point(inta,intb)改為Point::Point(intx,inty)會怎樣?此時如何訪問被掩蔽的類的屬性?全局變量在其他文件中能使用嗎?第7頁/共46頁第6頁/共46頁注意一定要注意變量間的掩蔽效應破除掩蔽效應的方法是“稱呼變量的全名”如:類名::變量名對于全局變量為:::變量名注意關(guān)鍵字extern的使用第8頁/共46頁第7頁/共46頁對象的生存期(1/3)變量和對象有關(guān)系嗎?什么關(guān)系?變量就是對象!默認情況下:變量和對象指內(nèi)存中的一段連續(xù)空間變量名和對象名則是該段內(nèi)存空間的起始地址的代號第9頁/共46頁第8頁/共46頁對象的生存期(2/3)對象的動態(tài)生存期:對象在被聲明時創(chuàng)建,在它的對象名的作用域結(jié)束時銷毀具有動態(tài)生存期的對象都儲存在“?!敝械?0頁/共46頁第9頁/共46頁對象的生存期(3/3)對象的靜態(tài)生存期:對象的生存期與程序的運行期相同全局變量具有靜態(tài)生存期局部變量如果希望具有靜態(tài)生存期,則必須在聲明時用static關(guān)鍵字說明通常這些對象被放在“堆”中第11頁/共46頁第10頁/共46頁看例子思考本例中k的生存期?本例中k的可見性?第12頁/共46頁第11頁/共46頁思考局部變量具有靜態(tài)生存期有什么好處?第13頁/共46頁第12頁/共46頁注意如果你沒有對具有靜態(tài)生存期的變量做初始化,則編譯器會將它初始化為0使用具有靜態(tài)生存期的變量應謹慎因為雖然這樣做會使變量的使用更加方便,但卻會破壞安全性第14頁/共46頁第13頁/共46頁類的靜態(tài)成員(1/6)類的封裝機制使對象的數(shù)據(jù)成員在類內(nèi)能共享訪問,但在類外嚴格限制對對象的數(shù)據(jù)成員的訪問什么是類內(nèi)?什么是類外?第15頁/共46頁第14頁/共46頁類的靜態(tài)成員(2/6)類的數(shù)據(jù)成員是什么意思?類的函數(shù)成員是什么意思?類的屬性是什么意思?通常情況下:類的屬性指類的所有對象共同具有的屬性第16頁/共46頁第15頁/共46頁思考飯卡類中:所有飯卡共用一個賬戶,還是每個飯卡均有自己的賬戶?在類中:每個對象共用一個屬性,還是每個對象都有自己的屬性?同一類的對象間,可不可以擁有共同的屬性?可不可以有屬于類,但不屬于任何對象的屬性?第17頁/共46頁第16頁/共46頁類的靜態(tài)成員(3/6)類內(nèi)可以有靜態(tài)成員靜態(tài)數(shù)據(jù)成員靜態(tài)函數(shù)成員什么樣的成員應寫成靜態(tài)數(shù)據(jù)成員?如果類有某屬性,該屬性獨立于該類的任何一個對象(即:要么被所有對象共用,要么與任何對象無關(guān)),則該屬性應被聲明為靜態(tài)數(shù)據(jù)成員第18頁/共46頁第17頁/共46頁類的靜態(tài)成員(4/6)靜態(tài)數(shù)據(jù)成員的應用場合:用來保存流動變化的對象個數(shù)用做一個標志如果類的對象的數(shù)據(jù)結(jié)構(gòu)是鏈表,則通常指向第一個成員或最后一個成員的指針用靜態(tài)數(shù)據(jù)成員表示靜態(tài)數(shù)據(jù)成員不依附于任何一個對象而存在第19頁/共46頁第18頁/共46頁類的靜態(tài)成員(5/6)靜態(tài)數(shù)據(jù)成員的聲明:用static關(guān)鍵字指明靜態(tài)數(shù)據(jù)成員的初始化:在該類的所有成員函數(shù)的實現(xiàn)前實現(xiàn)靜態(tài)數(shù)據(jù)成員的使用:與動態(tài)數(shù)據(jù)成員的使用方式一樣第20頁/共46頁第19頁/共46頁變形金剛類例:Transformer引入:靜態(tài)數(shù)據(jù)成員:number第21頁/共46頁第20頁/共46頁思考本例中用什么方式聲明的類內(nèi)靜態(tài)數(shù)據(jù)成員?怎么初始化的該成員?怎么使用的該成員?如果讓計數(shù)器number正確工作需要修改哪些函數(shù)?第22頁/共46頁第21頁/共46頁類的靜態(tài)成員(6/6)靜態(tài)函數(shù)成員的應用場合:獨立于任何對象的函數(shù)專門用來訪問靜態(tài)數(shù)據(jù)成員的函數(shù)靜態(tài)函數(shù)成員不依附于任何一個對象而存在因此:靜態(tài)函數(shù)成員可以直接訪問的只有該類的靜態(tài)成員如果要訪問非靜態(tài)成員,必須要用對象做媒介第23頁/共46頁第22頁/共46頁變形金剛類例:Transformer引入:靜態(tài)函數(shù)成員:voidFortify()靜態(tài)函數(shù)成員:voidResetNumber()靜態(tài)函數(shù)成員:voidCharge(……)第24頁/共46頁第23頁/共46頁思考本例中用幾種方式使用類內(nèi)的靜態(tài)函數(shù)成員?Transformer::Fortify();在邏輯上應該如何解釋?prime.Fortify();又應該怎么解釋?第25頁/共46頁第24頁/共46頁思考閱讀下述代碼,找出錯誤并解釋原因classA{ private: inti=1;};第26頁/共46頁第25頁/共46頁思考閱讀下述代碼,找出錯誤并解釋原因classA{ private: staticinti=1;};第27頁/共46頁第26頁/共46頁思考閱讀下述代碼,找出錯誤并解釋原因classA{ private: staticinti;};A::i=1;第28頁/共46頁第27頁/共46頁思考閱讀下述代碼,找出錯誤并解釋原因classA{ private: inti; public: staticvoidTest();};voidA::Test(){i=100;}第29頁/共46頁第28頁/共46頁總結(jié)類中所有動態(tài)數(shù)據(jù)成員,只能通過構(gòu)造的方式創(chuàng)建,它們依附于對象類中的所有靜態(tài)數(shù)據(jù)成員,在類存在的那一刻起就被創(chuàng)建了,它們獨立于對象類中所有動態(tài)數(shù)據(jù)成員,只能通過非靜態(tài)函數(shù)成員訪問和修改類中所有靜態(tài)數(shù)據(jù)成員,在類內(nèi)可以被任意修改第30頁/共46頁第29頁/共46頁類的友元(1/2)什么是友元?友元就是類的好友因此:類內(nèi)所有信息對友元是可見的為什么被封裝的類還要使用友元?為了提高訪問對象的效率,節(jié)省訪問對象的時間第31頁/共46頁第30頁/共46頁類的友元(2/2)有哪些友元?友元函數(shù)友元類怎么指明友元?用friend關(guān)鍵字指明必須要在類內(nèi)聲明友元classWallet{ double balance;public: voidIncrease(doublemoney); voidDecrease(doublemoney); voidSetBalance(doublemoney); doubleGetBalance(); friendvoidFriendGate(WallettheFriend, doublemoney); friendclassGirlFriend;};第32頁/共46頁第31頁/共46頁注意友元函數(shù)可以是普通函數(shù)友元函數(shù)也可以是其他類的成員函數(shù)友元可以直接訪問和修改類或?qū)ο蟮某蓡T如果A類為B類的友元類,則A類的所有成員函數(shù)都是B類的友元函數(shù)見書136~139頁第33頁/共46頁第32頁/共46頁注意友元關(guān)系不能傳遞友元關(guān)系是單向的友元關(guān)系不能被繼承第34頁/共46頁第33頁/共46頁常量(1/6)字面值常量與“不能變的變量”怎么能指明某個變量為常量?用const關(guān)鍵字指明例:constdoublei=100.0;conststringname="zhangsan";也可以:doubleconsti(100.0);第35頁/共46頁第34頁/共46頁常量(2/6)constdoublepi=3.1416與#definePI3.1416的區(qū)別?pi在程序運行期間有自己專門的空間,空間內(nèi)存儲3.1416程序中的PI會在編譯后被替換成3.1416第36頁/共46頁第35頁/共46頁常量(3/6)常引用語法:const類型&變量名例:constdouble&r=a;作用:r在其作用域內(nèi)不能被修改常引用多用于函數(shù)的參數(shù)傳遞,即:既希望用引用來提高效率,又不希望修改原有的值時。constdouble&r=a;作用:r在其作用域內(nèi)不能被修改但a能不能被修改?第37頁/共46頁第36頁/共46頁思考閱讀下述代碼,找出錯誤并解釋原因inttest(int&val){returnval++;}voidmain(){ shortv1=0; constintv2=100; intv3=test(v1); v3=test(v2); v3=test(100); v3=test(v1+v2);}第38頁/共46頁第37頁/共46頁注意引用要求“一模一樣”!但常引用限制沒有這么多!好的編程習慣:設(shè)計形參時,將所有不希望在函數(shù)體內(nèi)改變其值的參數(shù)設(shè)計為——常引用第39頁/共46頁第38頁/共46頁常量(4/6)常對象語法:類型const變量名例:Pointconstorigin(0,0);作用:origin在它的生存期內(nèi)不能被改變常對象必須進行初始化,而且不能被更新第40頁/共46頁第39頁/共46頁思考如何修改對象的屬性值?對常對象而言,這些修改方式有作用嗎?第41頁/共46頁第40頁/共46頁注意為了防止通過行為修改常對象的值,C++規(guī)定常對象不能調(diào)用任何普通成員函數(shù)!可是,不能調(diào)用行為的對象有什么用?第42頁/共46頁第41頁/共46頁常量(5/6)常成員函數(shù)語法:類型函數(shù)名(形參表)const例:voidShow(inttest)const;作用:該函數(shù)專供常對象使用第43頁/共46頁第42頁/共46頁注意const在函數(shù)定義和聲明中都不能省略!常成員函數(shù)不能更新對象的數(shù)據(jù)成員,也不能調(diào)用該類中沒有用const修飾的成員函數(shù)!常對象只能調(diào)用常成員函數(shù),不能調(diào)用其它成員函數(shù)const

溫馨提示

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

評論

0/150

提交評論