公用數(shù)據(jù)友元類模板.ppt_第1頁(yè)
公用數(shù)據(jù)友元類模板.ppt_第2頁(yè)
公用數(shù)據(jù)友元類模板.ppt_第3頁(yè)
公用數(shù)據(jù)友元類模板.ppt_第4頁(yè)
公用數(shù)據(jù)友元類模板.ppt_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

3.4 共用數(shù)據(jù)的保護(hù),本節(jié)主要內(nèi)容 3.4.1 常對(duì)象 3.4.2 常對(duì)象成員 3.4.3 指向?qū)ο蟮某V羔?3.4.4 指向常對(duì)象的指針變量 3.4.5 對(duì)象的常引用,1,3.4 共用數(shù)據(jù)的保護(hù),3.4.1 常對(duì)象 作用:定義一個(gè)對(duì)象時(shí),當(dāng)其數(shù)據(jù)成員的值不希望被修改時(shí),定義該對(duì)象為常對(duì)象。 與定義常變量類似,必須賦初值。 定義格式: 類名 const 對(duì)象名 (實(shí)參列表) 或 const 類名 對(duì)象名 (實(shí)參列表),2,3.4 共用數(shù)據(jù)的保護(hù),3.4.1 常對(duì)象 常對(duì)象不能調(diào)用非const型的成員函數(shù),除系統(tǒng)自動(dòng)調(diào)用的構(gòu)造函數(shù)和析構(gòu)函數(shù)之外。 常對(duì)象的所有數(shù)據(jù)成員的值是不能被修改的。 例: const time t(10,15,15); 或 time const t(10,15,15); t.get_time(); /要求必須是常成員函數(shù),3,3.4 共用數(shù)據(jù)的保護(hù),3.4.1 常對(duì)象 常對(duì)象的所有數(shù)據(jù)成員的值是不能被修改的。 編程時(shí)出現(xiàn)修改常對(duì)象數(shù)據(jù)成員值的需求,則將數(shù)據(jù)成員聲明為可變的數(shù)據(jù)成員,加mutable。 例: class mutable int hour; ; const time t(10,15,15); t.get_time(); void time:get_time() hour+=10; ,4,3.6 共用數(shù)據(jù)的保護(hù),本節(jié)主要內(nèi)容 3.6.1 常對(duì)象 3.6.2 常對(duì)象成員 3.6.3 指向?qū)ο蟮某V羔?3.6.4 指向常對(duì)象的指針變量 3.6.5 對(duì)象的常引用,5,3.6 共用數(shù)據(jù)的保護(hù),3.6.2 常對(duì)象成員 (一)常數(shù)據(jù)成員 與定義常變量一樣。 int const year; 或 const int year; 只能通過構(gòu)造函數(shù)的參數(shù)初始化表對(duì)常數(shù)據(jù)成員進(jìn)行初始化。 Date:Date (int y):year(y) 對(duì)常數(shù)據(jù)成員,該類所有對(duì)象中的該數(shù)據(jù)成員的值都是不能改變的,但不同的對(duì)象中該數(shù)據(jù)成員的值是可以不同的。,6,3.6 共用數(shù)據(jù)的保護(hù),3.6.2 常對(duì)象成員 (二)常成員函數(shù) 常成員函數(shù)只能引用本類中的數(shù)據(jù)成員,而不能修改它們。 注意:聲明和定義時(shí)都要加const關(guān)鍵字。 例:void get_time( ) const; 常成員函數(shù)引用數(shù)據(jù)成員情況表 (p90) 常對(duì)象中的成員函數(shù)未加const聲明,編譯器默認(rèn)為非const成員函數(shù)。,7,3.6 共用數(shù)據(jù)的保護(hù),本節(jié)主要內(nèi)容 3.6.1 常對(duì)象 3.6.2 常對(duì)象成員 3.6.3 指向?qū)ο蟮某V羔?3.6.4 指向常對(duì)象的指針變量 3.6.5 對(duì)象的常引用,8,3.6 共用數(shù)據(jù)的保護(hù),3.6.3 指向?qū)ο蟮某V羔?指向?qū)ο蟮某V羔槪簩⒅赶驅(qū)ο蟮闹羔樧兞柯暶鳛閏onst。 特點(diǎn):指向不能改變,即聲明時(shí)必須初始化。但可以改變指向?qū)ο髷?shù)據(jù)成員的值。 一般形式: 類名 * const 指針變量名= 常用作函數(shù)的形參,避免在函數(shù)的執(zhí)行過程中改變指針變量的指向。,9,P只能指向t1,3.4 共用數(shù)據(jù)的保護(hù),本節(jié)主要內(nèi)容 3.4.1 常對(duì)象 3.4.2 常對(duì)象成員 3.4.3 指向?qū)ο蟮某V羔?3.4.4 指向常對(duì)象的指針變量 3.4.5 對(duì)象的常引用,10,3.4 共用數(shù)據(jù)的保護(hù),3.4.4 指向常對(duì)象的指針變量 (一)指向常變量的指針變量 格式: const 類型 * 指針 或者 類型 const * 指針; 例如:const int a=5; /定義常變量 const int *p= /指向一個(gè)常變量 特點(diǎn):定義后,指針的指向可以改變,但指針指向?qū)ο蟮膬?nèi)容(值)不可以改變。 例:,11,12,void main( ) const int a = 78 ; const int b = 25 ; int c = 13 ; const int *pi = /正確 ,3.4 共用數(shù)據(jù)的保護(hù),3.4.4 指向常對(duì)象的指針變量 (二)指向常對(duì)象的指針變量 常對(duì)象,只能用指向常對(duì)象的指針指向它。 指向常對(duì)象的指針可以指向一個(gè)非常對(duì)象。 如果要改變非常對(duì)象數(shù)據(jù)成員的值可以直接改,但不能通過該指針改變。 例: Time t1(2,34,54); const Time *p=(),13,指向常對(duì)象的指針,非常對(duì)象,3.4 共用數(shù)據(jù)的保護(hù),本節(jié)主要內(nèi)容 3.4.1 常對(duì)象 3.4.2 常對(duì)象成員 3.4.3 指向?qū)ο蟮某V羔?3.4.4 指向常對(duì)象的指針變量 3.4.5 對(duì)象的常引用,14,3.4 共用數(shù)據(jù)的保護(hù),3.4.5 對(duì)象的常引用 (一)變量的常引用 例: int a=24; const int /錯(cuò)誤,常引用不能被更改,15,3.5 共用數(shù)據(jù)的保護(hù),3.4.5 對(duì)象的常引用 (二)對(duì)象的常引用 例: void fun(const Time ,16,在函數(shù)中不能改變t的值,t1的值也不能改變,3.4 共用數(shù)據(jù)的保護(hù),小結(jié) 理解常對(duì)象、常對(duì)象成員的定義和引用方式 理解指向?qū)ο蟮某V羔樀亩x和引用方式 了解指向常對(duì)象的指針變量的定義和引用方式 理解對(duì)象的常引用的定義和引用方式,17,在一個(gè)類中可以有公用的(public)成員和私有的(private)成員。在類外可以訪問公用成員,只有本類中的函數(shù)可以訪問本類的私有成員。現(xiàn)在,我們來補(bǔ)充介紹一個(gè)例外友元(friend)。 友元可以訪問與其有好友關(guān)系的類中的私有成員。友元包括友元函數(shù)和友元類。,9.10 友元,如果在本類以外的其他地方定義了一個(gè)函數(shù),在類體中用friend對(duì)其進(jìn)行聲明,此函數(shù)就稱為本類的友元函數(shù)。友元函數(shù)不屬于該類,但可以訪問該類中的私有成員。,9.10.1 友元函數(shù),1、將普通函數(shù)聲明為友元函數(shù) 2、友元成員函數(shù): friend函數(shù)是另一個(gè)類中的成員函數(shù)。 類的提前引用聲明 3、 一個(gè)函數(shù)(包括普通函數(shù)和成員函數(shù))可以被多個(gè)類聲明為“朋友”,這樣就可以引用多個(gè)類中的私有數(shù)據(jù),將一個(gè)類(例如B類)聲明為另一個(gè)類(例如A類)的“朋友”。則友元類B中的所有函數(shù)都是A類的友元函數(shù),可以訪問A類中的所有成員。 聲明友元類的一般形式為 friend 類名; 如:class A friend B; ;,9.10.2 友元類,說明: (1) 友元的關(guān)系是單向的而不是雙向的。 (2) 友元的關(guān)系不能傳遞。 在實(shí)際工作中,除非確有必要,一般并不把整個(gè)類聲明為友元類,而只將確實(shí)有需要的成員函數(shù)聲明為友元函數(shù),這樣更安全一些。,友元的利弊: 面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)基本原則是封裝性和信息隱蔽,而友元卻可以訪問其他類中的私有成員,不能不說這是對(duì)封裝原則的一個(gè)小的破壞。 但是它能有助于數(shù)據(jù)共享,能提高程序的效率,在使用友元時(shí),要注意到它的副作用,不要過多地使用友元,只有在使用它能使程序精煉,并能大大提高程序的效率時(shí)才用友元。,3.8 類模板,函數(shù)模板 一般形式 Template 類模板 為什么要有類模板,為什么要使用類模板 如果要對(duì)功能相同、僅類的數(shù)據(jù)類型不同的各種情況,都重新定義一種新的類型,會(huì)產(chǎn)生較大的重復(fù)。例如:,class compare_int public: compare_int (int a, int b ) x=a; y=b; int max( ) return (xy)? x : y; private: int x,y; ; class compare_char public: compare_char (char a, char b ) x=a; y=b; char max( ) return (xy)? x : y; private: char x,y; ;,void main( ) compare_int c1( 5, 6 ); cout c1.max( ) endl; compare_char c2(a, f); cout c2.max( ) endl; ,類模板的定義: 為解決這一問題,C+引進(jìn)類模板的概念。我們?cè)陬惖穆暶髑跋燃右恍心0尻P(guān)鍵字。它用一個(gè)通用參數(shù) T 來替代不同的數(shù)據(jù)類型。類模板的定義格式為: template class /類體說明 ; 其中template 是關(guān)鍵字;中可以有多個(gè)參數(shù),其間用逗號(hào)分隔。 使用類模板定義對(duì)象的: 類模板名 對(duì)象名( 實(shí)參列表 ); 例如:下面是一個(gè)數(shù)組類模板的例子,#include template class compare public:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論