




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、常對(duì)象定義類名 const 對(duì)象名(實(shí)參表);const 類名 對(duì)象名(實(shí)參表)常對(duì)象的所有數(shù)據(jù)成員的值均不能修改必須修改的數(shù)據(jù)成員必須聲明為mutable常對(duì)象只能調(diào)用常成員函數(shù)。 常對(duì)象成員常數(shù)據(jù)成員用const聲明只能通過構(gòu)造函數(shù)的參數(shù)初始化表對(duì)常數(shù)據(jù)成員進(jìn)行初始化。常成員函數(shù)聲明:類型名 函數(shù)名(參數(shù)表) const常成員函數(shù)的使用:P279表9.1#include using namespace std;class Xpublic: X(int k=0):m(k) const int m;int main( ) X a(5), b; couta.m b.mendl; return 0
2、;#include using namespace std;class Xpublic: X( ):m_flag(true), m_accessCount(0) void GetFlag( ) const m_accessCount+; coutm_flag m_accessCountendl; private: bool m_flag; mutable int m_accessCount;int main( )const X myX;for(int i=0; i10; i+) myX.GetFlag();return 0;指向?qū)ο蟮某V羔?const pointer)將指針變量聲明為cons
3、t型,則指針變量的值將不能改變定義形式:類名 * const 指針變量名一般作為函數(shù)的形參指向常對(duì)象的指針變量(pointer to const)如果一個(gè)對(duì)象被聲明為常對(duì)象,則只能用指向常對(duì)象的指針變量指向它如果定義了一個(gè)指向常對(duì)象的指針變量,并使它指向一個(gè)非const的對(duì)象,則其指向的對(duì)象是不能通過該指針變量來改變的。指向常對(duì)象的指針最常用于函數(shù)的形參當(dāng)希望在調(diào)用函數(shù)時(shí)對(duì)象的值不被改變,就應(yīng)把形參定義為指向常對(duì)象的指針變量,同時(shí)用對(duì)象的地址作實(shí)參。#include using namespace std;class Xpublic: X(int k=0):m(k) int m;int mai
4、n( ) const X a(5); X b; const X *p; X *q; p=&a; q=&b; coutm mendl; return 0;能不能p=&b;能不能q=&a;#include using namespace std;class Timepublic:Time(int h, int m, int s):hour(h),minute(m),sec(s)int hour,minute,sec;void fun(Time &t)t.hour=18;int main( ) Time t1(10,13,56); fun(t1); coutt1.hourendl; return 0
5、;對(duì)象的常引用 P283 例9.8紅色部分能不能改成const Time&t18對(duì)象的動(dòng)態(tài)建立和釋放可以用new運(yùn)算符動(dòng)態(tài)建立對(duì)象,用delete運(yùn)算符撤銷對(duì)象。建立對(duì)象時(shí),將開辟空間存儲(chǔ)對(duì)象,并且調(diào)用對(duì)象所屬類的構(gòu)造函數(shù)來初始化對(duì)象。執(zhí)行new運(yùn)算時(shí),如果無法開辟內(nèi)存空間,則返回 NULL。執(zhí)行delete運(yùn)算時(shí),在釋放內(nèi)存空間之前,自動(dòng)調(diào)用析構(gòu)函數(shù)。對(duì)象的賦值和復(fù)制同類對(duì)象間可以相互賦值。形式:對(duì)象名1=對(duì)象名2;賦值時(shí)將一個(gè)對(duì)象的數(shù)據(jù)成員在存儲(chǔ)空間的狀態(tài)復(fù)制給另一個(gè)對(duì)象的數(shù)據(jù)成員的存儲(chǔ)空間。數(shù)據(jù)成員中不能包括動(dòng)態(tài)分配的數(shù)據(jù)復(fù)制:用已有的對(duì)象去克隆出一個(gè)新對(duì)象形式1:類名 對(duì)象2(對(duì)象1)
6、;形式2:類名 對(duì)象2=對(duì)象1;區(qū)別賦值與復(fù)制的區(qū)別賦值是對(duì)一個(gè)已經(jīng)存在的對(duì)象賦值復(fù)制是從無到有的建立一個(gè)新對(duì)象,并使它與一個(gè)已有的對(duì)象完全相同。普通構(gòu)造函數(shù)與復(fù)制構(gòu)造函數(shù)的區(qū)別:復(fù)制構(gòu)造函數(shù)的參數(shù)是對(duì)象,目的是用已有對(duì)象去復(fù)制一個(gè)新對(duì)象。#include using namespace std;class Boxpublic: Box(int h=10, int w=10, int l=10):height(h), width(w), length(l) int volume( ) const return height*width*length; private: int height,
7、width, length;int main( ) Box box1(15,30,25), box2; coutbox1.volume=box1.volume( ), box2.volume= ; coutbox2.volume( )endl; box2=box1; coutbox2.volume=box2.volume( )endl; return 0;P286 例9.9#include using namespace std;class Boxpublic: Box(int h=10, int w=10, int l=10):height(h), width(w), length(l) i
8、nt volume( ) const return height*width*length; private: int height, width, length;int main( ) Box box1(15,30,25); Box box2=box1, box3(box1); coutbox2.volume=box2.volume( ); cout, box3.volume=box3.volume( )endl; return 0;例 dog5.cppint main( )Dog d1(fido,3,15,brown);Dog d2(pooch,4,20,white);d1.print(
9、);Dog d3(d1);d3.print( );d3=d2;return 0;例 dog6.cppclass Dog string name; int age, weight ;string color ;public:Dog(string n, int a, int w, string c):name(n), age(a), weight(w), color(c) Dog(const Dog& d) name=+1; age=d.age+1; weight=d.weight+1; color=d.color;Dog( )coutBye nameendl;void print(
10、) coutname is a age year old color;cout dog who weighs weight pounds.n;靜態(tài)成員支持同類的多個(gè)對(duì)象之間實(shí)現(xiàn)數(shù)據(jù)共享。靜態(tài)數(shù)據(jù)成員以關(guān)鍵字static開頭為各對(duì)象所共有,在內(nèi)存中只占一份空間在程序開始時(shí),被分配空間;程序結(jié)束時(shí),才釋放空間只能在類體外進(jìn)行初始化形式:數(shù)據(jù)類型 類名:靜態(tài)數(shù)據(jù)成員名=初值;不能用參數(shù)初始化表初始化。既可以通過對(duì)象名引用,也可以通過類名引用#include using namespace std;class Boxpublic: Box(int w=10, int l=10) : width(w),
11、 length(l) int volume( ) const return height*width*length; static int height; int width, length;int Box:height = 10;int main( ) Box a(15,20), b(20,30); couta.heightendl; coutb.heightendl; coutBox:heightendl; couta.volume( )endl; return 0;P291 例9.10能不能static int height=10;靜態(tài)成員函數(shù)在類中聲明函數(shù)的前面加上static就成了靜
12、態(tài)成員函數(shù)。靜態(tài)成員函數(shù)是類的一部分,而不是對(duì)象的一部分。在類外調(diào)用公用的靜態(tài)成員函數(shù),要用類名和域運(yùn)算符。靜態(tài)成員函數(shù)沒有this指針靜態(tài)成員函數(shù)主要用來訪問靜態(tài)數(shù)據(jù)成員訪問本類的非靜態(tài)成員時(shí),要加上對(duì)象名和成員運(yùn)算符#include using namespace std;class Studentpublic:Student(int n, int a, float s):num(n), age(a), score(s)void total( ) sum+=score;count+;static float average( )return sum/count;private:int nu
13、m, age;float score;static float sum;static int count;float Student:sum=0;int Student:count=0;P293 例9.11total能否改成const函數(shù)?average能否改成const函數(shù)?int main( ) Student stud3=Student(1001,18,70),Student(1002,19,78),Student(1005,20,98); int n; coutn; for(int i=0; in; i+) studi.total( ); coutthe average score o
14、f n students is ; coutStudent:average( )endl; return 0;例 dog7.cppclass Dog string name; int age, weight ;string color ;static string owner; public:Dog(string n, int a, int w, string c):name(n), age(a), weight(w), color(c) Dog( )coutBye nameendl;void print( ) cout name is a age year old color;cout do
15、g who weighs weight pounds.n;void printOwner( )coutowner:ownerendl;static void setOwner(const string& o)owner=o;string Dog:owner = Tom;例 dog7.cppint main()Dog d1(fido,3,15,brown);Dog d2(pooch,4,20,white);d1.printOwner( );d2.setOwner(Jack);d1.printOwner( );return 0;友元友元可以訪問與其有好友關(guān)系的類中的私有成員。友元函數(shù):如果在本類以
16、外定義了一個(gè)函數(shù),并在類體中用friend對(duì)其進(jìn)行聲明,則此函數(shù)為本類的友元函數(shù)。將普通函數(shù)聲明為友元函數(shù)友元成員函數(shù)友元類:可以將B類聲明為A類的“朋友”,此時(shí)B類就是A類的友元類。#includeusing namespace std;class Timepublic:Time(int h, int m, int s):hour(h), minute(m), sec(s)friend void display(const Time &) ;private:int hour, minute, sec;void display(const Time &t)coutt.hour:t.minute
17、:t.secendl;int main( )Time t1(10,13,56);display(t1);return 0;普通函數(shù)聲明為友元函數(shù)P296 例9.1210:13:56例 dog8.cppclass Dog string name; int age, weight ;string color ;public:Dog(string n, int a, int w, string c):name(n), age(a), weight(w), color(c) Dog( )coutBye nameendl;void print( ) cout name is a age year old
18、 color;cout dog who weighs weight pounds.n;friend void welcome(const Dog& );例 dog8.cppvoid welcome(const Dog& d)coutwelcome !n;int main()Dog d1(fido,3,15,brown);welcome(d1);Dog d2(pooch,4,20,white);welcome(d2);return 0;#include using namespace std;class Date;class Timepublic:Time(int h, int m,
19、 int s): hour(h), minute(m), sec(s)void display(const Date&);private:int hour, minute, sec;class Datepublic:Date(int m, int d, int y):month(m), day(d), year(y)friend void Time:display(const Date&);private:int month, day, year;成員函數(shù)聲明為友元函數(shù)P297 例9.13void Time:display(const Date& d)coutd.month/d.day/d.y
20、earendl;couthour:minute:secendl;int main( )Time t1(10,13,56);Date d1(12,25,2004);t1.display(d1);return 0;class Datepublic:Date(int m, int d, int y):month(m), day(d), year(y)friend Time;/ friend void Time:display(const Date&);private:int month, day, year;友元類P307 練習(xí)11#include using namespace std;class
21、 Date;class Timepublic:Time(int h, int m, int s): hour(h), minute(m), sec(s)friend void display(const Date&, const Time&);private:int hour, minute, sec;class Datepublic:Date(int m, int d, int y):month(m), day(d), year(y)friend void display(const Date&, const Time&);private:int month, day, year;同時(shí)成為兩
22、個(gè)類的友元函數(shù)P307 練習(xí)10void display(const Date& d, const Time& t)coutd.month/d.day/d.yearendl;coutt.hour:t.minute:t.secendl;int main( )Time t1(10,13,56);Date d1(12,25,2004);display(d1, t1);return 0;類模板可能有兩個(gè)或多個(gè)類,其功能是相同的,僅僅是數(shù)據(jù)類型不同。class Compare_intpublic:Compare_int(int, int);int max( );int min( );private:in
23、t x, y;class Compare_floatpublic:Compare_float(float, float);float max( );float min( );private:float x, y;類模板(2)可以聲明一個(gè)通用的類模板,它可以有一個(gè)或多個(gè)虛擬的類型參數(shù)。類模板是類的抽象,類是類模板的實(shí)例。template class Compare public:Compare (numtype, numtype); numtype max( ); numtype min( );private: numtype x, y;#include #include using namespace std;templa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地暖太陽能工程施工方案
- 管道跨越施工方案
- 醫(yī)療機(jī)構(gòu)水污染物排放的法律責(zé)任與監(jiān)管措施
- 【專精特新】印制電路板行業(yè)市場份額證明材料(智研咨詢發(fā)布)
- 食品加工企業(yè)食品安全事件應(yīng)急預(yù)案
- 基于大觀念的高中英語單元整體教學(xué)設(shè)計(jì)探究
- 湖北省2024-2025學(xué)年高二上學(xué)期1月期末物理試題(原卷版)
- 四川羅渡中學(xué)20172018人教地理必修二綜合訓(xùn)練(四)及解析
- 北京市房山區(qū)2024-2025學(xué)年高三上學(xué)期期末學(xué)業(yè)水平調(diào)研(二)物理試卷2
- 安徽省亳州市2024-2025學(xué)年高二上學(xué)期期末考試地理試卷
- 【課件】溶質(zhì)的質(zhì)量分?jǐn)?shù)(第1課時(shí))九年級(jí)化學(xué)人教版(2024)下冊
- 2025高考數(shù)學(xué)專項(xiàng)復(fù)習(xí):導(dǎo)數(shù)的27個(gè)模塊專練(含答案)
- 《云南民風(fēng)民俗》課件
- 【MOOC】通信原理-中原工學(xué)院 中國大學(xué)慕課MOOC答案
- 高職美育教程 課件全套 周保平 專題1-10 高職美育的意義與特點(diǎn)-藝術(shù)美
- 《智能網(wǎng)聯(lián)汽車概論(活頁式)》全套教學(xué)課件
- 市政道路工程路基水穩(wěn)層檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- 延長殼牌加油站PTW培訓(xùn)教材(工作許可證體系)
- 2024年企業(yè)消防安全培訓(xùn)課件:讓每個(gè)員工成為安全衛(wèi)士
- 計(jì)算機(jī)維修工(智能電子產(chǎn)品檢測與數(shù)據(jù)恢復(fù)方向)賽項(xiàng)考試題庫(含答案)
- 幼兒園大班健康《神奇的腦》課件
評(píng)論
0/150
提交評(píng)論