版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年知識(shí)產(chǎn)權(quán)運(yùn)營(yíng)居間合同范本6篇
- 2024年行政報(bào)告模板在線定制與交付合同3篇
- 2024年限定墻體租賃商務(wù)協(xié)議版B版
- 2024年生物制藥原料供應(yīng)與技術(shù)轉(zhuǎn)讓合同
- 2024年物業(yè)綜合服務(wù)補(bǔ)充合同:業(yè)主權(quán)益保障與溝通機(jī)制一
- 2024年股權(quán)質(zhì)押合同樣本:確保資金安全
- 2024年電子商務(wù)平臺(tái)全渠道零售合同
- 2024年簡(jiǎn)化版售后服務(wù)代理協(xié)議樣本一
- 2024年規(guī)范化土方工程施工合作合同
- 2024年生物質(zhì)能源利用技術(shù)研發(fā)合同
- 2025年八省聯(lián)考高考語(yǔ)文作文真題及參考范文
- 科研倫理與學(xué)術(shù)規(guī)范(研究生)期末試題庫(kù)及答案
- 中國(guó)聯(lián)通MPLS VPN業(yè)務(wù)開(kāi)通測(cè)試報(bào)告
- 中國(guó)風(fēng)鎏金年終總結(jié)PPT模板
- 年產(chǎn)萬(wàn)噸丁二烯畢業(yè)設(shè)計(jì)
- 醫(yī)學(xué)課件-檢驗(yàn)科質(zhì)量控制教學(xué)課件
- 收款賬戶確認(rèn)書(shū)
- 消防水池 (有限空間)作業(yè)安全告知牌及警示標(biāo)志
- 修復(fù)學(xué)全口義齒
- 機(jī)械設(shè)備租賃合同范本簡(jiǎn)單版(9篇)
- 美甲顧客檔案表Excel模板
評(píng)論
0/150
提交評(píng)論