計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:類和對(duì)象_第1頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:類和對(duì)象_第2頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:類和對(duì)象_第3頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:類和對(duì)象_第4頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:類和對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

類和對(duì)象本章內(nèi)容第一節(jié)類第二節(jié)對(duì)象第三節(jié)構(gòu)造函數(shù)和析構(gòu)函數(shù)第一節(jié)類一、類的概念抽象是對(duì)事物進(jìn)行分析找出本質(zhì),提煉出事物的公共性質(zhì)并加以描述的過(guò)程。類用來(lái)描述抽象的結(jié)果。類包含兩個(gè)成員:數(shù)據(jù)成員和成員函數(shù)。數(shù)據(jù)成員:表達(dá)數(shù)據(jù)抽象,用數(shù)據(jù)變量來(lái)描述屬性。成員函數(shù):表達(dá)行為抽象,用函數(shù)來(lái)描述功能。二、類的定義類在使用前必須定義。class類名

{public:<數(shù)據(jù)成員或成員函數(shù)的說(shuō)明>;//公有成員

private:<數(shù)據(jù)成員或成員函數(shù)的說(shuō)明>;//私有成員

protected:<數(shù)據(jù)成員或成員函數(shù)的說(shuō)明>;//保護(hù)成員

};類頭用關(guān)鍵字class,類名是一個(gè)標(biāo)識(shí)符定義一個(gè)點(diǎn)(Point)類,具有以下屬性和方法:

屬性:x坐標(biāo),y坐標(biāo)功能:1.設(shè)置x,y的坐標(biāo)值;2.輸出坐標(biāo)的信息。大括號(hào)是類體,定義的是類的數(shù)據(jù)成員和成員函數(shù)數(shù)據(jù)成員可以是基本數(shù)據(jù)類型(如int、float、double等),也可以是引用數(shù)據(jù)類型(如數(shù)組等)成員函數(shù)實(shí)現(xiàn)類的功能成員訪問(wèn)限定符,如果不寫(xiě)限定符,默認(rèn)為private。public表示公有成員,不僅可以被本類訪問(wèn)或調(diào)用,外界也可以直接訪問(wèn)或者調(diào)用。private表示私有成員,該部分內(nèi)容是私密的,不能被外部所訪問(wèn)或調(diào)用,只能被本類內(nèi)部訪問(wèn)。protected表示保護(hù)成員,與private類似,差別在于繼承與派生時(shí)對(duì)派生類的影響不同。類定義以分號(hào)“;”結(jié)束例14-1:求長(zhǎng)方體的體積和表面積。數(shù)據(jù)成員有長(zhǎng)、寬和高?!伴L(zhǎng)方體”類的組成部分,如圖所示。cubiod類將不同類型的數(shù)據(jù)變量和對(duì)數(shù)據(jù)操作的函數(shù)封裝在一起,是C++封裝的基本單元。classcubiod {private: doubled,w,h;public: voidset(doubled1,doublew1,doubleh1) //成員函數(shù):設(shè)置數(shù)據(jù)成員值

{ d=d1;w=w1;h=h1; } voiddisplay() //成員函數(shù):輸出數(shù)據(jù)成員值

{ cout<<"長(zhǎng)="<<d<<'\t'<<"寬="<<w<<'\t'<<"高="<<w<<endl; } doublegetVolume() //成員函數(shù):計(jì)算體積

{ returnd*w*h; } doublegetArea() //成員函數(shù):計(jì)算表面積

{ return(d*w+d*h+h*w)*2; }};三、成員函數(shù)函數(shù)頭函數(shù)體函數(shù)頭包括函數(shù)名、函數(shù)的參數(shù)列表和函數(shù)的返回值類型函數(shù)體實(shí)現(xiàn)成員函數(shù)的功能成員函數(shù)與一般函數(shù)的區(qū)別在于:它屬于類的一部分,可以直接訪問(wèn)類的成員。1、成員函數(shù)在類體中定義在類體中定義的成員函數(shù)一般規(guī)模比較小,語(yǔ)句只有幾句。成員函數(shù)在類體中的定義形式:返回值類型函數(shù)名(參數(shù)表){ //函數(shù)體}2、成員函數(shù)在類體外定義成員函數(shù)也可以在類體中只聲明原型,而成員函數(shù)的具體實(shí)現(xiàn)在類的外部。類體外成員函數(shù)定義的形式:返回值類型類名::函數(shù)名(參數(shù)表){ //函數(shù)體}例14-2:定義“長(zhǎng)方體”類,求長(zhǎng)方體的表面積和體積。其中成員函數(shù)體在類的外部定義。classcubiod {private: doubled,w,h;public: voidset(doubled1,doublew1,doubleh1);//函數(shù)原型聲明

voiddisplay(); //函數(shù)原型聲明

doublegetVolume(); //函數(shù)原型聲明

doublegetArea(); //函數(shù)原型聲明};voidcubiod::set(doubled1,doublew1,doubleh1) //成員函數(shù)體在類的外部{ d=d1;w=w1;h=h1;}voidcubiod::display() { cout<<"長(zhǎng)="<<d<<'\t'<<"寬="<<w<<'\t'<<"高="<<w<<endl;}doublecubiod::getVolume() { returnd*w*h;}doublecubiod::getArea() { return(d*w+d*h+h*w)*2;}第二節(jié)對(duì)象一、對(duì)象的概念類是抽象的:類只是一個(gè)模板,系統(tǒng)不為其分配空間對(duì)象是具體的:對(duì)象是類的一個(gè)具體實(shí)例類只有通過(guò)對(duì)象才可以使用類與對(duì)象的關(guān)系就好比數(shù)據(jù)類型與變量的關(guān)系二、對(duì)象的定義對(duì)象名表有多個(gè)對(duì)象時(shí),各對(duì)象名之間用逗號(hào)隔開(kāi)。類名對(duì)象名表;例如:cubiodx; //定義一個(gè)cubiod類型的變量xcubiodx,y; //定義兩個(gè)cubiod類型的變量x和y三、對(duì)象的訪問(wèn)定義對(duì)象后,即可訪問(wèn)對(duì)象中的數(shù)據(jù)成員和成員函數(shù)。1、通過(guò)對(duì)象來(lái)訪問(wèn)成員對(duì)象名.公有數(shù)據(jù)成員對(duì)象名.公有成員函數(shù)名(參數(shù)表)點(diǎn)運(yùn)算符“.”左側(cè)是一個(gè)類類型的對(duì)象,右側(cè)是該類型的一個(gè)成員名,運(yùn)算結(jié)果為右側(cè)指定的成員。例14-3:利用定義好“長(zhǎng)方體”類,從鍵盤(pán)輸入長(zhǎng)、寬和高,輸出長(zhǎng)方體的體積和表面積。#include<iostream>usingnamespacestd;classcubiod{private: doubled,w,h;public: voidset(doubled1,doublew1,doubleh1);//函數(shù)原型聲明

voiddisplay(); doublegetVolume(); doublegetArea();};voidcubiod::set(doubled1,doublew1,doubleh1) //成員函數(shù)體在類的外部{ d=d1;w=w1;h=h1;}voidcubiod::display(){ cout<<"長(zhǎng)="<<d<<'\t'<<"寬="<<w<<'\t'<<"高="<<h<<endl;}doublecubiod::getVolume(){ returnd*w*h;}doublecubiod::getArea(){ return(d*w+d*h+h*w)*2;}intmain(){ cubiodx; //定義對(duì)象 doublea,b,c; cin>>a>>b>>c; //輸入長(zhǎng)寬高 x.set(a,b,c); //調(diào)用對(duì)象的成員函數(shù)set,將長(zhǎng)寬高的值傳遞給私有成員 x.display(); //調(diào)用對(duì)象的成員函數(shù)display,輸出長(zhǎng)寬高 cout<<x.getVolume()<<endl;//調(diào)用對(duì)象的成員函數(shù)getVolume,輸出體積 cout<<x.getArea()<<endl; //調(diào)用對(duì)象的成員函數(shù)getArea,輸出表面積 return0;}2、通過(guò)對(duì)象指針來(lái)訪問(wèn)成員對(duì)象的指針->公有數(shù)據(jù)成員對(duì)象的指針->公有成員函數(shù)名(參數(shù)表)箭頭運(yùn)算符“->”左側(cè)是一個(gè)類類型的對(duì)象指針,右側(cè)是該類型的一個(gè)成員名,運(yùn)算結(jié)果為右側(cè)指定的成員。對(duì)象指針需先賦值再使用。例14-4:定義一個(gè)公司的“員工”類,包含工號(hào)和姓名兩個(gè)數(shù)據(jù)成員,完成設(shè)置和輸出員工信息的功能。#include<iostream>#include<string>usingnamespacestd;classemployee{private: stringnumber,name; //私有成員:工號(hào)和姓名public: voidset(stringgh,stringxm); //函數(shù)原型聲明

voiddisplay(); };voidemployee::set(stringgh,stringxm) //函數(shù)實(shí)現(xiàn),設(shè)置員工信息{ number=gh;name=xm;}voidemployee::display() //函數(shù)實(shí)現(xiàn),輸出員工信息{ cout<<"工號(hào)是"<<number<<endl; cout<<"姓名是"<<name<<endl;}intmain(){ employee*p; //定義對(duì)象指針

stringgh,xm; //定義兩個(gè)字符串變量

getline(cin,gh); //輸入工號(hào)

getline(cin,xm); //輸入姓名

p=newemployee; //為對(duì)象指針賦值,申請(qǐng)內(nèi)存空間

p->set(gh,xm); //調(diào)用成員函數(shù)

p->display(); return0;}三、面向?qū)ο蟪绦蛟O(shè)計(jì)第三節(jié)構(gòu)造函數(shù)和析構(gòu)函數(shù)一、構(gòu)造函數(shù)構(gòu)造函數(shù)是一種特殊的成員函數(shù),構(gòu)造函數(shù)的作用是初始化對(duì)象的數(shù)據(jù)成員。構(gòu)造函數(shù)的名稱與類的名稱是完全相同的。構(gòu)造函數(shù)可以有參數(shù),但不能指定函數(shù)類型。1、構(gòu)造函數(shù)的概念

如果定義類時(shí)沒(méi)寫(xiě)構(gòu)造函數(shù),則編譯器自動(dòng)生成一個(gè)默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)的形式:類名::類名(){}默認(rèn)構(gòu)造函數(shù)無(wú)參數(shù),不做任何操作。2、默認(rèn)構(gòu)造函數(shù)如果定義了構(gòu)造函數(shù),則編譯器不生成默認(rèn)構(gòu)造函數(shù)。3、定義構(gòu)造函數(shù)類名::類名(參數(shù)表){ //函數(shù)體}可以定義多個(gè)參數(shù)個(gè)數(shù)不同的構(gòu)造函數(shù),即構(gòu)造函數(shù)允許重載。二、析構(gòu)函數(shù)析構(gòu)函數(shù)也是一種特殊的成員函數(shù),它的作用與構(gòu)造函數(shù)相反,一般是執(zhí)行對(duì)象的清理工作。析構(gòu)函數(shù)的名稱與類的名稱完全相同,前面加字符~。析構(gòu)函數(shù)沒(méi)有參數(shù),沒(méi)有返回值。1、析構(gòu)函數(shù)的概念

如果在類的定義中沒(méi)有編寫(xiě)析構(gòu)函數(shù),系統(tǒng)會(huì)自動(dòng)生成默認(rèn)析構(gòu)函數(shù)。默認(rèn)析構(gòu)函數(shù)的形式:類名::~類名(){}析構(gòu)函數(shù)沒(méi)有參數(shù),一個(gè)類僅有一個(gè)析構(gòu)函數(shù)。2、默認(rèn)析構(gòu)函數(shù)如果定義了析構(gòu)函數(shù),則系統(tǒng)不生成默認(rèn)析構(gòu)函數(shù)。3、定義析構(gòu)函數(shù)類名::~類名(參數(shù)表){ //函數(shù)體}當(dāng)一個(gè)對(duì)象的生存周期結(jié)束的時(shí)候,系統(tǒng)將自動(dòng)執(zhí)行析構(gòu)函數(shù)來(lái)撤銷該對(duì)象,返還它所占用的內(nèi)存空間。例14-5:構(gòu)造函數(shù)和析構(gòu)函數(shù)簡(jiǎn)單示例。定義一個(gè)“圓”類,數(shù)據(jù)成員為半徑,計(jì)算圓的面積。#include<iostream>usingnamespacestd;classcircle{private: doubler; //數(shù)據(jù)成員半徑public: circle(); //構(gòu)造函數(shù)1,無(wú)參數(shù)

circle(doubler1); //構(gòu)造函數(shù)2,有參數(shù)

~circle(); //析構(gòu)函數(shù)

voidarea(); //成員函數(shù),計(jì)算并輸出圓面積};circle::circle() { r=2.5; cout<<"自動(dòng)調(diào)用構(gòu)造函數(shù)1"<<endl;}circle::circle(doubler1) { r=r1; cout<<"自動(dòng)調(diào)用構(gòu)造

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論