煙大14級程序設(shè)計基礎(chǔ)ch11_第1頁
煙大14級程序設(shè)計基礎(chǔ)ch11_第2頁
煙大14級程序設(shè)計基礎(chǔ)ch11_第3頁
煙大14級程序設(shè)計基礎(chǔ)ch11_第4頁
煙大14級程序設(shè)計基礎(chǔ)ch11_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、11.6 共用數(shù)據(jù)的保護可修飾的有:1、常對象 2、常數(shù)據(jù)成員 3、常成員函數(shù)4、常指針 5、常引用 使用共用數(shù)據(jù)的目的:在一定范圍內(nèi)共享。 如果數(shù)據(jù)要保證它不被任意修改,可以使用const修飾。常對象定義常對象的一般形式為: 類名 const 對象名(實參表列);或: const 類名 對象名(實參表列);對常對象的限制: 不能調(diào)用該對象的非const型的成員函數(shù) (除隱式的構(gòu)造函數(shù)和析構(gòu)函數(shù))。 定義常對象并指定初值 , 如: Time const t1(12 , 34 , 46); /t1是常對象例如:class Time public: Time(int h,int m,int s)

2、void get_time( );int main() const Time t1(10,15,36); /定義常對象t1 t1.get_time( ); /試圖調(diào)用普通函數(shù)error C2662: get_time : cannot convert this pointer from const class Time to class Time &正確引用常對象中數(shù)據(jù)成員class Time public: Time(int h,int m,int s) void set_time( ) const ;int main() const Time t1(10,15,36); /定義常對象t1

3、t1.set_time( ); /常對象調(diào)用常成員函數(shù)試圖修改常對象中的數(shù)據(jù)成員void Time:set_time( ) const cinhourminutesec; int main() const Time t1(10,15,36); /定義常對象t1 t1.get_time( ); /常對象調(diào)用常成員函數(shù)error C2679: binary : no operator defined which takes a right-hand operand of type const int (or there is no acceptable conversion)正確修改常對象中的數(shù)據(jù)

4、成員的值class Time public: void Time:set_time( ) const cinhourminutesec; private: mutable int hour; mutable int minute; mutable int sec; ;class Doc public: mutable int count; /聲明為可變的數(shù)據(jù)成員 Doc(int c=0) :count(c) int getcount( ) const return count; void print( ) const count+; cout輸出相關(guān)信息endl; ;int main( ) c

5、onst Doc t1; t1.print(); t1.print(); coutt1.setcount( )endl; / 輸出結(jié)果:2例: 記錄輸出次數(shù)常對象成員TimeTime(int h) hour=h; /非法TimeTime(int h):hour(h) /合法1、常數(shù)據(jù)成員 const來聲明常數(shù)據(jù)成員,其值是不能改變的;如類體中定義了常數(shù)據(jù)成員,形式如下:class Time const int hour ; 注意:只能用參數(shù)初始化表對常數(shù)據(jù)成員進行初始化。常成員函數(shù)特性: 可以引用本類中的所有數(shù)據(jù)成員,但不能修改它們,例如用于輸出數(shù)據(jù)。不可以調(diào)用另一個非const成員函數(shù)。聲明

6、形式: void set_time( ) const; 普通的成員函數(shù),可以引用本類中的所有數(shù)據(jù)成員,并可修改非const數(shù)據(jù)成員。2、常成員函數(shù) class R public: int a; /普通數(shù)據(jù)成員 const int b; /常數(shù)據(jù)成員 R():a(1),b(2) ; int f ( ) const return +a; /常成員函數(shù)訪問普通成員 int g ( ) return +b ; /普通成員函數(shù)訪問常成員 ;10error C2166: l-value specifies const objectmutable int a; 使用說明: (1) const聲明常數(shù)據(jù)成員,

7、值不允許改變;允許非const的成員函數(shù)引用常數(shù)據(jù)成員;(2) 常對象,只能調(diào)用其中的const成員函數(shù),而不能調(diào)用非const成員函數(shù);(3) 常對象中的成員函數(shù)并不都是常成員函數(shù)。聲明為const的作用: 數(shù)據(jù)成員和對象聲明為const,起到“雙保險”的作用,切實保證了數(shù)據(jù)成員不被修改。指向?qū)ο蟮某V羔槼V羔樚匦裕褐赶虿荒芨淖?,常用于函數(shù)形參 定義對象常指針的一般形式: 類名 * const 指針變量名;如:Time t1(10,12,15),t2; /定義對象 Time * const ptr1=&t1; /指定ptr1指向t1 ptr1=&t2; /試圖改變指向編譯錯誤:“l(fā)-val

8、ue specifies const object”解釋:常指針一經(jīng)初始化,則不能再次改變其自身值,即不能修改其指向。 注意常指針定義時必須有初值 Time * const ptr1; ptr1=&t1; /試圖給常量賦值編譯錯誤:“ptr1 : const object must be initialized if not extern”指向常對象的指針變量(1)常對象的指針-常對象必須用常指針指向定義形式: const 類型名 *指針變量名;例如有: const Time t1(10,13,56);有常指針: const Time *p1; p1=&t1; /合法如果用: Time *p2

9、=&t1;/ 普通指針,不合法編譯錯誤: initializing : cannot convert from const class Time * to class Time * (2) 指向常對象的指針變量還可以指向非const型的對象;但不能通過該指針改變其值。例如: Time t1(10,13,56); const Time *p=&t1; /合法 t1.hour=11; /通過t1合法 (*p).hour=11; /改變其值不合法 編譯錯誤:“l(fā)-value specifies const object”(3) 函數(shù)傳遞參數(shù)時,形參和實參的對應(yīng)關(guān)系 形參 實參 合法 能否改值非con

10、st指針 非const 地址 Y Y非const指針 const 地址 N /const指針 const 地址 Y Nconst指針 非 const 地址 Y N請記住這樣一條規(guī)則: 當希望在調(diào)用函數(shù)時對象的值不被修改,就應(yīng)當把形參定義為指向常對象的指針變量。對象的常引用函數(shù)原型為: void fun(const Time &t);作用:函數(shù)中不能改變 t 的值 C+編程使用常指針和常引用作函數(shù)參數(shù)其優(yōu)點是:保證數(shù)據(jù)安全,在調(diào)用函數(shù)時又不必建立實參的拷貝;可以提高程序運行效率。class Time public: Time(int,int,int); int hour; int minute; int sec; ;TimeTime(int h,int m,int s) hour=h; minute=m; sec=s; void fun(Time &t) /一般引用 ,可以改變值 t.hour=18;int main( ) Time t1(10,13,56); fun(t1); coutt1.hourendl; return 0; void fun(const Time &t); /常引用,值不變例11.8 對象的引用和常引用在函數(shù)中不希望修改實參的值const型數(shù)據(jù)的小結(jié)形 式含 義Time const t1; t1是常對象

溫馨提示

  • 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

提交評論