付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
類和對(duì)象第二章目錄類的本質(zhì)類的聲明成員函數(shù)的定義類與對(duì)象一個(gè)例子總結(jié)與進(jìn)一步說明
1.類的本質(zhì)在C++中,一個(gè)類就是一個(gè)數(shù)據(jù)類型與普通數(shù)據(jù)類型的區(qū)別整型、實(shí)型、字符型是內(nèi)建數(shù)據(jù)類型, 而類則是用戶自定義數(shù)據(jù)類型內(nèi)建數(shù)據(jù)類型(int,char…)可以直接使用, 而類則需要遵循先創(chuàng)建,后使用的2部曲。
如inti;類的這一特點(diǎn)和C中的一種構(gòu)造數(shù)據(jù)類型——結(jié)構(gòu)體(struct)非常象目錄類的本質(zhì)類的聲明成員函數(shù)的定義類與對(duì)象一個(gè)例子總結(jié)與進(jìn)一步說明
回顧:聲明一個(gè)結(jié)構(gòu)體類型的方法:structStudent//聲明了一個(gè)名為Student的結(jié)構(gòu)體類型{
intnum;charname[20];charsex;};Studentstud1,stud2;//定義了兩個(gè)結(jié)構(gòu)體變量stud1和stud2stud1.num=10;//訪問結(jié)構(gòu)體變量的成員stud1.sex=‘m’2.類的聲明2.類的聲明
類的聲明Studentmary;Studentmary,mike;Studentletvians[3600];類關(guān)鍵字class類名{成員定義};常用大寫字母開頭類名對(duì)象名;類的使用-對(duì)象的定義classStudent{
intnum;charname[20];charsex;};classStudent//以class開頭{
intnum;charname[20];charsex;//以上3行是數(shù)據(jù)成員voiddisplay()//這是成員函數(shù){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;//以上3行是函數(shù)中的操作語句}};Studentstud1,stud2;//定義了兩個(gè)Student類的對(duì)象stud1和stud2stud1.display();//調(diào)用可以看到:聲明類的方法是由聲明結(jié)構(gòu)體類型的方法發(fā)展而來的2.類的聲明
classPerson{public:voidsetAge(unsignedn);unsignedgetAge()const{returnage;}private:unsignedage;};問題:從右邊的例子來看,類和結(jié)構(gòu)體成員聲明有哪些不同??類中,不僅有數(shù)據(jù)類型成員,還有函數(shù)類型成員類中的成員有public或private之分?jǐn)?shù)據(jù)成員成員函數(shù)訪問控制訪問控制2.類的聲明—訪問權(quán)限2.類的聲明—訪問權(quán)限對(duì)外訪問權(quán)限的設(shè)定public:對(duì)外開放訪問權(quán)限的成員private:對(duì)外關(guān)閉訪問權(quán)限的成員protected:對(duì)外關(guān)閉訪問權(quán)限,但對(duì)派生類開放訪問權(quán)限的成員
公共接口信息隱藏原則實(shí)現(xiàn):通過私有相關(guān)成員來實(shí)現(xiàn)目的:可以嚴(yán)格控制對(duì)相關(guān)數(shù)據(jù)的訪問“你們要進(jìn)窄門。因?yàn)橐綔缤?,那門是寬的,路是大的,進(jìn)去的人也多;引到永生,那門是窄的,路是小的,找著的人也少?!?/p>
——《圣經(jīng)》如果在類的定義中既不指定private,也不指定public,則系統(tǒng)就默認(rèn)為是私有的。類類型的聲明一般形式如下:class類名{private:私有的數(shù)據(jù)和成員函數(shù);protected:保護(hù)的成員;
public:公用的數(shù)據(jù)和成員函數(shù);};2.類的聲明—訪問權(quán)限classCircle//聲明類類型{private://聲明以下部分為私有的
doubleradius;public://聲明以下部分為公用的
voidSet_Radius(doubler){radius=r;} doubleGet_Radius(){returnradius;} doubleGet_Girth(){return2*3.14*radius;} doubleGet_Area(){return3.14*radius*radius;}};CircleA; //創(chuàng)建Circle類型的對(duì)象AA.radius//錯(cuò)誤!訪問私有成員A.Get_Radius()//正確!2.類的聲明—訪問權(quán)限C++允許用struct來定義一個(gè)類型。如可以將前面用關(guān)鍵字class聲明的類類型改為用關(guān)鍵字struct:structStudent//用關(guān)鍵字struct來聲明一個(gè)類類型{private://聲明以下部分為私有的intnum;//以下3行為數(shù)據(jù)成員charname[20];charsex;public://聲明以下部分為公用的
voiddisplay()//成員函數(shù){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}};Studentstud1,stud2;//定義了兩個(gè)Student類的對(duì)象2.類的聲明—訪問權(quán)限(類和結(jié)構(gòu)體的區(qū)別)
class
,struct,union
都可以定義一個(gè)類:
class
缺省說明時(shí),其成員被認(rèn)為 是私有的
struct
若不特別指出,其所有成員 都是公有的
union
其所有成員都是公有的,且 不能更改
類中為什么有2種成員(數(shù)據(jù)成員和成員函數(shù))呢?語義-類就是現(xiàn)實(shí)世界中的一類對(duì)象的軟件抽象數(shù)據(jù)成員——現(xiàn)實(shí)世界對(duì)象的屬性成員函數(shù)——現(xiàn)實(shí)世界對(duì)象的動(dòng)作(行為)語法數(shù)據(jù)類型本質(zhì)是:對(duì)應(yīng)到數(shù)學(xué)上的“集合”嗎?unsignedinti;int*p;整型變量i可以進(jìn)行+-X/%等操作指針變量p可以進(jìn)行+-操作,X/%等操作沒有意義。另外,可以進(jìn)行*操作2.類的聲明—類的成員
類中為什么有2種成員(數(shù)據(jù)成員和成員函數(shù))呢?語義-類就是現(xiàn)實(shí)世界中的一類對(duì)象的軟件抽象數(shù)據(jù)成員——現(xiàn)實(shí)世界對(duì)象的屬性成員函數(shù)——現(xiàn)實(shí)世界對(duì)象的動(dòng)作(行為)語法數(shù)據(jù)類型本質(zhì)是:對(duì)應(yīng)到數(shù)學(xué)上的“集合”嗎?數(shù)據(jù)類型本質(zhì)是:數(shù)學(xué)上的“集合”以及定義在該集合上的操作——
代數(shù)系統(tǒng)?。。∨e例:cin.get();//get是istream類提供的一個(gè)成員函數(shù)strings=“abcd”;s.length(); //length是string提供的一個(gè)成員函數(shù)2.類的聲明—類的成員
成員操作成員選擇符:.指針操作符:->classPerson{public: voidsetAge(unsignedn); unsignedgetAge()const;private: unsignedage;};Personboxer,*pboxer;pboxer=&boxer;boxer.setAge(27);pboxer->setAge(28);2.類的聲明—成員的訪問方法目錄類的本質(zhì)類的聲明成員函數(shù)的定義類與對(duì)象一個(gè)例子總結(jié)與進(jìn)一步說明
3.成員函數(shù)的定義
classCircle//聲明類類型{private://聲明以下部分為私有的
doubleradius;public://聲明以下部分為公用的
voidSet_Radius(doubler);doubleGet_Radius(){returnradius;}doubleGet_Girth(){return2*3.14*radius;}doubleGet_Area(){return3.14*radius*radius;}};voidCircle::Set_Radius(doubler){ radius=r;};在類聲明內(nèi)定義函數(shù)在類聲明外定義函數(shù)3.成員函數(shù)的定義成員函數(shù)兩種定義方法在類聲明之內(nèi)進(jìn)行定義在類聲明之外進(jìn)行定義
類名::函數(shù)名()在聲明內(nèi)定義的是內(nèi)聯(lián)函數(shù)用代碼替換調(diào)用,加快執(zhí)行速度
classCircle//聲明類類型{private://聲明以下部分為私有的
doubleradius;public://聲明以下部分為公用的
voidSet_Radius(doubler);doubleGet_Radius(){returnradius;}doubleGet_Girth(){return2*3.14*radius;}doubleGet_Area(){return3.14*radius*radius;}};voidCircle::Set_Radius(doubler){ radius=r;};::作用域解析操作符目錄類的本質(zhì)類的聲明成員函數(shù)的定義類與對(duì)象一個(gè)例子總結(jié)與進(jìn)一步說明
類和對(duì)象的關(guān)系——類是對(duì)象的抽象(類型、模板……)對(duì)象是類的實(shí)例(instance),是類的具體表現(xiàn)形式。
4.類與對(duì)象用類來定義對(duì)象,定義對(duì)象的幾種方法:1.先聲明類類型,然后再定義對(duì)象2.在聲明類類型的同時(shí)定義對(duì)象3.不出現(xiàn)類名,直接定義對(duì)象4.類與對(duì)象1.先聲明類類型,然后再定義對(duì)象前面用的就是這種方法,如Studentstud1,stud2;//Student是已經(jīng)聲明的類類型(1)class類名對(duì)象名如classStudentstud1,stud2;把class和Student合起來作為一個(gè)類名,用來定義對(duì)象。(2)類名對(duì)象名如Studentstud1,stud2;直接用類名定義對(duì)象。這兩種方法是等效的。第1種方法是從C語言繼承下來的,第2種方法是C++的特色,顯然第2種方法更為簡(jiǎn)捷方便。4.類與對(duì)象2.在聲明類類型的同時(shí)定義對(duì)象classStudent//聲明類類型{public://先聲明公用部分
voiddisplay(){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}private://后聲明私有部分intnum;charname[20];charsex;}stud1,stud2;//定義了兩個(gè)Student類的對(duì)象在定義Student類的同時(shí),定義兩個(gè)Student類的對(duì)象。4.類與對(duì)象3.不出現(xiàn)類名,直接定義對(duì)象class//無類名{private://聲明以下部分為私有的┆
public://聲明以下部分為公用的┆}stud1,stud2;//定義了兩個(gè)無類名的類對(duì)象直接定義對(duì)象,在C++中是合法的、允許的,但卻很少用。匿名類,在某些開發(fā)框架下(如android)比較常用。在定義一個(gè)對(duì)象時(shí),編譯系統(tǒng)會(huì)為這個(gè)對(duì)象分配存儲(chǔ)空間,以存放對(duì)象中的成員。4.類與對(duì)象目錄類的本質(zhì)類的聲明成員函數(shù)的定義類與對(duì)象一個(gè)例子總結(jié)與進(jìn)一步說明
時(shí)間如何調(diào)整如何與對(duì)象通信?6.1類與對(duì)象內(nèi)部構(gòu)造class鐘
{private:
鐘的構(gòu)造;
public:
讀取時(shí)間值;
調(diào)整時(shí)間值;};對(duì)象通過類接口與外部通信如何與對(duì)象通信?6.1類與對(duì)象定義類和對(duì)象舉例//例
一個(gè)類的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}關(guān)鍵字定義一個(gè)類標(biāo)識(shí)符類名Tdate類型的一個(gè)對(duì)象(實(shí)例)定義類和對(duì)象舉例數(shù)據(jù)成員//例
一個(gè)類的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}定義類和對(duì)象舉例類中定義成員函數(shù)內(nèi)聯(lián)函數(shù)處理//例
一個(gè)類的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}定義類和對(duì)象舉例//例
一個(gè)類的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}voidSet(intm,intd,inty);intIsLeapYear();voidPrint();在類外定義成員函數(shù)voidTdate::Set(intm,intd,inty){month=m;day=d;year=y;}intTdate::IsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidTdate::Print(){cout<<year<<"."<<month<<"."<<day<<endl;}定義類和對(duì)象舉例//例
一個(gè)類的例子#include<iostream>usingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){cout<<year<<"."<<month<<"."<<day<<endl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}類說明的一般形式為:
class
類名{public:
公有段數(shù)據(jù)成員和成員函數(shù)
;
protected:
保護(hù)段數(shù)據(jù)成員和成員函數(shù)
;
private:
私有數(shù)據(jù)成員和成員函數(shù)
;};定義類和對(duì)象注:1.允許已定義類名出現(xiàn)在類的說明中例:
classlink
{link
*next; ……};//聲明一個(gè)指向link類類型的指針定義類和對(duì)象注:1.允許已定義類名出現(xiàn)在類的說明中例:
classX
{……};
classY
{X
dataMember; ……};//聲明一個(gè)類類型數(shù)據(jù)成員定義類和對(duì)象注:1.允許已定義類名出現(xiàn)在類的說明中例:
classX
{
X
dataMember; ……};//錯(cuò)誤錯(cuò)誤無窮遞歸結(jié)構(gòu)定義類和對(duì)象注:1.允許已定義類名出現(xiàn)在類的說明中2.類可以無名,用于直接聲明對(duì)象例:
class{……}mydate; //直接聲明一個(gè)對(duì)象定義類和對(duì)象注:1.允許已定義類名出現(xiàn)在類的說明中2.類可以無名,用于直接聲明對(duì)象//例#include<iostream>usingnamespacestd;classempty{};intmain(){emptye1;cout<<"&e1="<<&e1<<endl;
cout<<"sizeofe1="<<sizeof(e1)<<endl;}3.類是一個(gè)程序包??梢灾挥袛?shù)據(jù)成員或只有成員函數(shù),或者為空。一個(gè)空類定義類和對(duì)象注:1.允許已定義類名出現(xiàn)在類的說明中2.類可以無名,用于直接聲明對(duì)象3.類是一個(gè)程序包??梢灾挥袛?shù)據(jù)成員或只有成員函數(shù),或者為空。//例#include<iostream>usingnamespacestd;classempty{};intmain(){emptye1;cout<<"&e1="<<&e1<<endl;
cout<<"sizeofe1="<<sizeof(e1)<<endl;}一個(gè)空類對(duì)象定義類和對(duì)象注:1.允許已定義類名出現(xiàn)在類的說明中2.類可以無名,用于直接聲明對(duì)象//例#include<iostream>usingnamespace
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 景區(qū)門票贈(zèng)票管理制度模板(3篇)
- 2026山東事業(yè)單位統(tǒng)考煙臺(tái)市市屬招聘122人備考考試試題及答案解析
- 2026江西宜春市豐城市衛(wèi)健系統(tǒng)招聘編外人員18人考試備考試題及答案解析
- 2026年合肥廬江縣中醫(yī)院醫(yī)療集團(tuán)部分分院公開招聘勞務(wù)派遣人員5名備考考試題庫及答案解析
- 新能源汽車電氣系統(tǒng)檢修 課件全套 項(xiàng)目1-6 新能源汽車電氣系統(tǒng)的認(rèn)知 -新能源汽車空調(diào)系統(tǒng)檢測(cè)與維修
- 2026中國(guó)科學(xué)院昆明動(dòng)物研究所管理部門崗位招聘2人(云南)參考考試題庫及答案解析
- 2026山東濟(jì)寧金鄉(xiāng)縣事業(yè)單位招聘初級(jí)綜合類崗位人員備考考試題庫及答案解析
- 2026年商洛市洛南縣婦幼保健院招聘(4人)考試參考題庫及答案解析
- 農(nóng)發(fā)行運(yùn)營(yíng)管理制度(3篇)
- 分格縫施工方案(3篇)
- 客戶投訴理賠管理制度
- GB/T 45451.1-2025包裝塑料桶第1部分:公稱容量為113.6 L至220 L的可拆蓋(開口)桶
- 文物基礎(chǔ)知識(shí)題庫單選題100道及答案
- 四川省成都市邛崍市2024-2025學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題(含答案)
- GB/T 44819-2024煤層自然發(fā)火標(biāo)志氣體及臨界值確定方法
- 《風(fēng)力發(fā)電廠調(diào)試規(guī)程》
- 搞笑小品劇本《我的健康誰做主》臺(tái)詞完整版-宋小寶徐崢
- 正大天虹方矩管鍍鋅方矩管材質(zhì)書
- 兔子解剖實(shí)驗(yàn)報(bào)告
- 雙減背景下家校共育的問題及策略
- 管理養(yǎng)老機(jī)構(gòu) 養(yǎng)老機(jī)構(gòu)的服務(wù)提供與管理
評(píng)論
0/150
提交評(píng)論