面向?qū)ο缶幊碳夹g(shù)第四章_第1頁(yè)
面向?qū)ο缶幊碳夹g(shù)第四章_第2頁(yè)
面向?qū)ο缶幊碳夹g(shù)第四章_第3頁(yè)
面向?qū)ο缶幊碳夹g(shù)第四章_第4頁(yè)
面向?qū)ο缶幊碳夹g(shù)第四章_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

面向?qū)ο缶幊碳夹g(shù)第四章第一頁(yè),共六十五頁(yè),2022年,8月28日一、類(lèi)與對(duì)象類(lèi)概述類(lèi)是具有相同屬性和行為的一組對(duì)象的抽象集合,為該類(lèi)的全部對(duì)象提供了統(tǒng)一的抽象描述,包括屬性和行為兩個(gè)主要部分。利用類(lèi)可以實(shí)現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承與派生。利用類(lèi)易于編寫(xiě)大型復(fù)雜程序,其模塊化程度比C中采用函數(shù)更高。慢慢體會(huì)…第二頁(yè),共六十五頁(yè),2022年,8月28日類(lèi)是一種用戶(hù)自定義類(lèi)型,聲明形式:class類(lèi)名{

public:公有成員(外部接口)private:私有成員protected:保護(hù)型成員}2.類(lèi)的定義:第三頁(yè),共六十五頁(yè),2022年,8月28日時(shí)鐘類(lèi)的成員(數(shù)據(jù)成員與函數(shù)成員聲明)classClock{private:intHour,Minute,Second;public:

voidSetTime(intNewH,intNewM,

intNewS);

voidShowTime();

};成員函數(shù)數(shù)據(jù)成員第四頁(yè),共六十五頁(yè),2022年,8月28日voidClock::SetTime(intNewH,intNewM,intNewS){Hour=NewH;Minute=NewM;Second=NewS;}voidClock::ShowTime(){cout<<Hour<<":"<<Minute<<":"<<Second;}時(shí)鐘類(lèi)的函數(shù)成員(定義部分)第五頁(yè),共六十五頁(yè),2022年,8月28日說(shuō)明:關(guān)鍵字public后面聲明公有類(lèi)型成員它們是類(lèi)與外部的接口,任何外部函數(shù)都可以訪(fǎng)問(wèn)公有類(lèi)型數(shù)據(jù)和函數(shù)關(guān)鍵字private后面聲明私有類(lèi)型成員允許本類(lèi)中的函數(shù)訪(fǎng)問(wèn),類(lèi)外部的任何函數(shù)都不能訪(fǎng)問(wèn)。緊跟在類(lèi)名稱(chēng)的后面聲明私有成員,關(guān)鍵字private可省略(不提倡)第六頁(yè),共六十五頁(yè),2022年,8月28日說(shuō)明:保護(hù)類(lèi)型與private類(lèi)似,其差別表現(xiàn)在繼承與派生時(shí)對(duì)派生類(lèi)的影響不同,在第七章介紹。下頁(yè)例子第七頁(yè),共六十五頁(yè),2022年,8月28日classcircle{public:circle::circle(intr){radius=r;}intarea(){return(int)3.14*radius*radius;

}voidcircle_prt(){cout<<"theprivateradiusis:"<<radius<<endl;}private:intradius;

};voidmain(){circlecircle1(1),circle2(3);

cout<<"theprivateradiusis:"<<circle1.radius<<endl;circle1.circle_prt();Circle2.circle_prt();}ERROR!不允許訪(fǎng)問(wèn)私有數(shù)據(jù)!如何解決?OK構(gòu)造函數(shù),后面介紹另一例子第八頁(yè),共六十五頁(yè),2022年,8月28日說(shuō)明:數(shù)據(jù)成員:1.與一般的變量聲明相同,但需要將它放在類(lèi)的聲明體中。2.不能在定義時(shí)初始化賦值定義成員時(shí)并不分配存儲(chǔ)空間,如inthour=0

函數(shù)成員:1.成員函數(shù)分類(lèi)(1)構(gòu)造函數(shù)與析構(gòu)函數(shù)(2)其他成員函數(shù)2.在類(lèi)中說(shuō)明原形,在類(lèi)外給出函數(shù)體實(shí)現(xiàn),并在函數(shù)名前使用類(lèi)名加以限定。也可以直接在類(lèi)中給出函數(shù)體允許聲明重載函數(shù)和帶缺省形參值的函數(shù)建議定義在類(lèi)外第九頁(yè),共六十五頁(yè),2022年,8月28日3.對(duì)象的定義類(lèi)的對(duì)象是該類(lèi)的實(shí)例化,即類(lèi)類(lèi)型的變量。聲明形式:類(lèi)名對(duì)象名;例:ClockmyClock;第十頁(yè),共六十五頁(yè),2022年,8月28日4.類(lèi)、對(duì)象中成員的訪(fǎng)問(wèn)方式類(lèi)中成員互訪(fǎng)直接使用成員名類(lèi)外訪(fǎng)問(wèn)使用“對(duì)象名.成員名”方式訪(fǎng)問(wèn)public屬性的成員使用“對(duì)象名指針->成員名”方式訪(fǎng)問(wèn)public屬性的成員返回第十一頁(yè),共六十五頁(yè),2022年,8月28日二、構(gòu)造函數(shù)與析構(gòu)函數(shù)構(gòu)造函數(shù)名與類(lèi)名相同構(gòu)造函數(shù)的作用是在對(duì)象被創(chuàng)建時(shí)使用特定的值構(gòu)造對(duì)象,或者說(shuō)將對(duì)象初始化為一個(gè)特定的狀態(tài)。在對(duì)象創(chuàng)建時(shí)由系統(tǒng)自動(dòng)調(diào)用。如果程序中未聲明,則系統(tǒng)自動(dòng)產(chǎn)生出一個(gè)缺省形式的構(gòu)造函數(shù)1.構(gòu)造函數(shù)定義及使用第十二頁(yè),共六十五頁(yè),2022年,8月28日構(gòu)造函數(shù)舉例classcircle{public:

intradius;intarea();circle(intr);intarea(intr);};circle::circle(intr){radius=r;}intcircle::area(){return(int)3.14*radius*radius;}voidmain(){circlecircle1(5);cout<<"thecircle'sareais";cout<<circle1.area()<<endl;}定義部分第十三頁(yè),共六十五頁(yè),2022年,8月28日構(gòu)造函數(shù)與類(lèi)同名不能指定返回值類(lèi)型可以是重載函數(shù)可以是內(nèi)聯(lián)函數(shù)如無(wú)自定義構(gòu)造函數(shù),C++系統(tǒng)自動(dòng)產(chǎn)生空的的構(gòu)造函數(shù)如構(gòu)造函數(shù)帶有參數(shù),則在定義對(duì)象時(shí)必須帶上相同類(lèi)型的實(shí)參通過(guò)定義類(lèi)的實(shí)例-對(duì)象,只分配數(shù)據(jù)成員空間,共享類(lèi)的代碼空間注意:第十四頁(yè),共六十五頁(yè),2022年,8月28日析構(gòu)函數(shù)名:~類(lèi)名完成對(duì)象被刪除前的一些清理工作。在對(duì)象的生存期結(jié)束的時(shí)刻系統(tǒng)自動(dòng)調(diào)用它,然后再釋放此對(duì)象所屬的空間。如果程序中未聲明析構(gòu)函數(shù),編譯器將自動(dòng)產(chǎn)生一個(gè)缺省的析構(gòu)函數(shù)。析構(gòu)函數(shù)不帶任何參數(shù)2.析構(gòu)函數(shù)定義及使用請(qǐng)關(guān)注后面的內(nèi)容!第十五頁(yè),共六十五頁(yè),2022年,8月28日析構(gòu)函數(shù)舉例classPoint{public:Point(intxx,intyy);

~Point();//...其它函數(shù)原形private:intX,intY;};包含:deleteAdeleteB…第十六頁(yè),共六十五頁(yè),2022年,8月28日注意命名方式一般類(lèi)中設(shè)計(jì)有動(dòng)態(tài)對(duì)象,則要設(shè)計(jì)析構(gòu)函數(shù)析構(gòu)函數(shù)不帶任何參數(shù)第十七頁(yè),共六十五頁(yè),2022年,8月28日課堂練習(xí)(5分鐘):1.定義一個(gè)表述圓的類(lèi)(數(shù)據(jù)成員和函數(shù)成員),并提供相應(yīng)的方法2.定義一個(gè)表述人的類(lèi),(數(shù)據(jù)成員和函數(shù)成員),并提供相應(yīng)的方法體會(huì)面向?qū)ο蟮木幊痰奶攸c(diǎn)第十八頁(yè),共六十五頁(yè),2022年,8月28日3.內(nèi)聯(lián)成員函數(shù)為了提高運(yùn)行時(shí)的效率,對(duì)于較簡(jiǎn)單的函數(shù)可以聲明為內(nèi)聯(lián)形式。內(nèi)聯(lián)函數(shù)體中不要有復(fù)雜結(jié)構(gòu)(如循環(huán)語(yǔ)句和switch語(yǔ)句)。類(lèi)中聲明內(nèi)聯(lián)成員函數(shù)的方式:將函數(shù)體放在類(lèi)的聲明中。使用inline關(guān)鍵字。內(nèi)聯(lián)函數(shù)兩種聲明方式:顯示與隱式隱式:直接定義在類(lèi)主體內(nèi)顯示:定義在類(lèi)主體外,用inline說(shuō)明請(qǐng)看下頁(yè)注意何時(shí)采用?第十九頁(yè),共六十五頁(yè),2022年,8月28日classPoint{public:

voidInit(intinitX,intinitY){X=initX;Y=initY;}intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};classPoint{public:voidInit(intinitX,intinitY);intGetX();intGetY();private:intX,Y;};inlinevoidPoint::Init(intinitX,intinitY){X=initX;Y=initY;}inlineintPoint::GetX(){returnX;}隱式: 顯式:第二十頁(yè),共六十五頁(yè),2022年,8月28日

當(dāng)構(gòu)造函數(shù)的參數(shù)為自身類(lèi)對(duì)象的引用時(shí),這個(gè)構(gòu)造函數(shù)稱(chēng)為拷貝構(gòu)造函數(shù).

拷貝構(gòu)造函數(shù)的功能是用一個(gè)已有對(duì)象初始化一個(gè)正在建立的同類(lèi)對(duì)象.4.拷貝構(gòu)造函數(shù)已存在對(duì)象新對(duì)象克隆第二十一頁(yè),共六十五頁(yè),2022年,8月28日拷貝構(gòu)造函數(shù)在以下三種情況下會(huì)被調(diào)用:⑴當(dāng)用類(lèi)的一個(gè)對(duì)象去初始化該類(lèi)的另一個(gè)對(duì)象時(shí);⑵如果函數(shù)的形參是類(lèi)對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí);⑶如果函數(shù)的返回值是類(lèi)對(duì)象,函數(shù)調(diào)用完成返回時(shí)。何時(shí)需要它?第二十二頁(yè),共六十五頁(yè),2022年,8月28日定義:class

類(lèi)名{public:類(lèi)名(形參);//構(gòu)造函數(shù)類(lèi)名(類(lèi)名&對(duì)象名);//拷貝構(gòu)造函數(shù)...};類(lèi)名::類(lèi)名(類(lèi)名&對(duì)象名)//拷貝構(gòu)造函數(shù)的實(shí)現(xiàn){函數(shù)體}第二十三頁(yè),共六十五頁(yè),2022年,8月28日Pointa=a1;//拷貝構(gòu)造函數(shù)

等價(jià)于Pointa(a1);//可以改成這種形式

Point::Point(Point&p){X=p.X;Y=p.Y;cout<<"拷貝構(gòu)造函數(shù)被調(diào)用"<<endl;}classPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;}

Point(Point&p);intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};請(qǐng)看下頁(yè)第二十四頁(yè),共六十五頁(yè),2022年,8月28日當(dāng)用類(lèi)的一個(gè)對(duì)象去初始化該類(lèi)的另一個(gè)對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用它實(shí)現(xiàn)拷貝賦值。voidmain(void){PointA(1,2);PointB(A);//拷貝構(gòu)造函數(shù)被調(diào)用cout<<B.GetX()<<endl;}情形之一第二十五頁(yè),共六十五頁(yè),2022年,8月28日若函數(shù)的形參為類(lèi)對(duì)象,調(diào)用函數(shù)時(shí),實(shí)參賦值給形參,系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。例如:voidfun1(Pointp){cout<<p.GetX()<<endl;}voidmain(){PointA(1,2);fun1(A);//調(diào)用拷貝構(gòu)造函數(shù)}

情形之二第二十六頁(yè),共六十五頁(yè),2022年,8月28日當(dāng)函數(shù)的返回值是類(lèi)對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。例如:Pointfun2(){PointA(1,2);returnA;//調(diào)用拷貝構(gòu)造函數(shù)}voidmain(){PointB;B=fun2();}情形之三要看明白書(shū)上的例子返回第二十七頁(yè),共六十五頁(yè),2022年,8月28日三、面向?qū)ο蟮幕咎攸c(diǎn)抽象是對(duì)具體對(duì)象(問(wèn)題)進(jìn)行概括,抽出這一類(lèi)對(duì)象的公共性質(zhì)并加以描述的過(guò)程。數(shù)據(jù)抽象:描述某類(lèi)對(duì)象的屬性或狀態(tài)(對(duì)象相互區(qū)別的物理量)。代碼抽象:描述某類(lèi)對(duì)象的共有的行為特征或具有的功能。-之抽象?如何實(shí)現(xiàn)抽象通過(guò)類(lèi)的定義。第二十八頁(yè),共六十五頁(yè),2022年,8月28日三、面向?qū)ο蟮脑O(shè)計(jì)思想層層分類(lèi),使概念逐漸細(xì)化,即具體化。例如,生物分為動(dòng)物和植物,動(dòng)物又分為脊椎動(dòng)物和無(wú)脊椎動(dòng)物,脊椎動(dòng)物包括哺乳動(dòng)物,哺乳動(dòng)物又分為貓、狗……,等等-之分類(lèi)回顧第二十九頁(yè),共六十五頁(yè),2022年,8月28日三、面向?qū)ο蟮脑O(shè)計(jì)思想將抽象出的數(shù)據(jù)成員、代碼成員相結(jié)合,將它們視為一個(gè)整體。增強(qiáng)安全性和簡(jiǎn)化編程,不必了解具體的實(shí)現(xiàn)細(xì)節(jié),只需要通過(guò)外部接口,以特定的訪(fǎng)問(wèn)權(quán)限,來(lái)使用類(lèi)的成員。實(shí)現(xiàn)封裝:類(lèi)定義中的{}-之封裝在設(shè)計(jì)者允許的權(quán)限下第三十頁(yè),共六十五頁(yè),2022年,8月28日三、面向?qū)ο蟮脑O(shè)計(jì)思想子類(lèi)與父類(lèi)子類(lèi)繼承父類(lèi)所有的屬性、方法,并可定義自己的特有屬性與方法提高軟件開(kāi)發(fā)效率,為軟件復(fù)用提供強(qiáng)有力的支持多種繼承方式:公有、私有、保護(hù);單繼承、多繼承-之繼承第三十一頁(yè),共六十五頁(yè),2022年,8月28日三、面向?qū)ο蟮脑O(shè)計(jì)思想-之多態(tài)定義:指類(lèi)具有相似功能的不同函數(shù)使用同一個(gè)名稱(chēng)來(lái)實(shí)現(xiàn)如:1.運(yùn)算符重載2.函數(shù)重載3.虛函數(shù)

…慢慢領(lǐng)會(huì)…第三十二頁(yè),共六十五頁(yè),2022年,8月28日插入語(yǔ)學(xué)習(xí)復(fù)雜、嚴(yán)密的C++語(yǔ)法體系C++既考慮設(shè)計(jì)理念的先進(jìn)性,又兼顧程序執(zhí)行的效率!理解、領(lǐng)會(huì)、運(yùn)用其中的優(yōu)秀的面向?qū)ο蟪绦蛟O(shè)計(jì)、分析思想!返回是否感覺(jué)有點(diǎn)煩!第三十三頁(yè),共六十五頁(yè),2022年,8月28日四、類(lèi)的組合類(lèi)中的成員數(shù)據(jù)是另一個(gè)類(lèi)的對(duì)象可以在已有的抽象的基礎(chǔ)上實(shí)現(xiàn)更復(fù)雜的抽象注意是對(duì)象第三十四頁(yè),共六十五頁(yè),2022年,8月28日例:classPoint{private:floatx,y;//點(diǎn)的坐標(biāo)

public:Point(floath,floatv);//構(gòu)造函數(shù)

floatGetX(void);//取X坐標(biāo)

floatGetY(void);//取Y坐標(biāo)

voidDraw(void);//在(x,y)處畫(huà)點(diǎn)};//...函數(shù)成員部分,略第三十五頁(yè),共六十五頁(yè),2022年,8月28日classLine{private:pointp1,p2;//線(xiàn)段的兩個(gè)端點(diǎn)public:Line(Pointa,Pointb);//構(gòu)造函數(shù)VoidDraw(void);//畫(huà)出線(xiàn)段};//...函數(shù)的實(shí)現(xiàn)略第三十六頁(yè),共六十五頁(yè),2022年,8月28日1.如何設(shè)計(jì)組合類(lèi)的構(gòu)造函數(shù)?原則:不僅要負(fù)責(zé)對(duì)本類(lèi)中的基本類(lèi)型成員數(shù)據(jù)賦初值,也要對(duì)對(duì)象成員初始化。聲明形式:類(lèi)名::類(lèi)名(形參,本類(lèi)成員形參):內(nèi)嵌對(duì)象1(參數(shù)),內(nèi)嵌對(duì)象2(參數(shù)),......{本類(lèi)初始化}注意否則可能是一個(gè)不確定的值第三十七頁(yè),共六十五頁(yè),2022年,8月28日2.組合類(lèi)的構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)調(diào)用順序:若調(diào)用缺省構(gòu)造函數(shù)(即無(wú)形參的),則內(nèi)嵌對(duì)象的初始化也將調(diào)用相應(yīng)的缺省構(gòu)造函數(shù)。內(nèi)嵌對(duì)象的構(gòu)造函數(shù)內(nèi)嵌對(duì)象是客人;聲明順序調(diào)用本類(lèi)的構(gòu)造函數(shù)調(diào)用本類(lèi)的析構(gòu)函數(shù)內(nèi)嵌對(duì)象的析構(gòu)函數(shù)構(gòu)造:析構(gòu):穿衣服與脫衣服第三十八頁(yè),共六十五頁(yè),2022年,8月28日classPoint //Point類(lèi)聲明{public: Point(intxx=0,intyy=0){X=xx;Y=yy;cout<<"point的構(gòu)造函數(shù)被調(diào)用"<<endl;} Point(Point&p); intGetX(){returnX;} intGetY(){returnY;}private: intX,Y;};Point::Point(Point&p) //拷貝構(gòu)造函數(shù)的實(shí)現(xiàn){ X=p.X; Y=p.Y; cout<<"Point拷貝構(gòu)造函數(shù)被調(diào)用"<<endl;}第三十九頁(yè),共六十五頁(yè),2022年,8月28日classLine //Line類(lèi)的聲明{public: //外部接口 Line(Pointxp1,Pointxp2); Line(Line&); doubleGetLen(){returnlen;}private: //私有數(shù)據(jù)成員 Pointp1,p2; //Point類(lèi)的對(duì)象p1,p2 doublelen; };//組合類(lèi)的構(gòu)造函數(shù)Line::Line(Pointxp1,Pointxp2):p1(xp1),p2(xp2){ cout<<"Line構(gòu)造函數(shù)被調(diào)用"<<endl; doublex=double(p1.GetX()-p2.GetX()); doubley=double(p1.GetY()-p2.GetY()); len=sqrt(x*x+y*y);}第四十頁(yè),共六十五頁(yè),2022年,8月28日Line::Line(Line&Seg):p1(Seg.p1),p2(Seg.p2){ cout<<"Line拷貝構(gòu)造函數(shù)被調(diào)用"<<endl; len=Seg.len;}//主函數(shù)voidmain(){ Pointmyp1(1,1),myp2(4,5); //建立Point類(lèi)的對(duì)象 Lineline(myp1,myp2); //建立Line類(lèi)的對(duì)象 Lineline2(line); //利用拷貝構(gòu)造函數(shù)建立一個(gè)新對(duì)象 cout<<"Thelengthofthelineis:"; cout<<line.GetLen()<<endl; cout<<"Thelengthoftheline2is:"; cout<<line2.GetLen()<<endl;}第四十一頁(yè),共六十五頁(yè),2022年,8月28日第四十二頁(yè),共六十五頁(yè),2022年,8月28日例2:整體類(lèi)部件子類(lèi)1部件子類(lèi)2部件子類(lèi)n……代碼框架第四十三頁(yè),共六十五頁(yè),2022年,8月28日classWhole//整體類(lèi){public:Whole();Whole(inti,intj,intk);~Whole();voidPrint();private:Partone;Parttwo;intdate;};classPart//部件類(lèi){public:Part();Part(inti);~Part();voidPrint();private:intval;};下頁(yè)定義整體類(lèi)的構(gòu)造函數(shù)第四十四頁(yè),共六十五頁(yè),2022年,8月28日Whole::Whole(){date=0;}Whole::Whole(inti,intj,intk):two(i),one(j),date(k){...}//...其它函數(shù)的實(shí)現(xiàn)略返回第四十五頁(yè),共六十五頁(yè),2022年,8月28日五、前向引用聲明類(lèi)應(yīng)該先聲明,后使用如果需要在某個(gè)類(lèi)的聲明之前,引用該類(lèi),則應(yīng)進(jìn)行前向引用聲明。前向引用聲明只為程序引入一個(gè)標(biāo)識(shí)符,沒(méi)有具體定義,不能使用該類(lèi)的具體細(xì)節(jié)(如對(duì)象)。具體參考教材P112-113第四十六頁(yè),共六十五頁(yè),2022年,8月28日前向引用聲明舉例:classB;//前向引用聲明classA{public:voidf(Bb);};classB{public:voidg(Aa);};返回第四十七頁(yè),共六十五頁(yè),2022年,8月28日template<模板參數(shù)表>類(lèi)聲明六、類(lèi)模板使用類(lèi)模板使用戶(hù)可以為類(lèi)聲明一種模式,使得類(lèi)中的某些數(shù)據(jù)成員、某些成員函數(shù)的參數(shù)、某些成員函數(shù)的返回值,能取任意類(lèi)型(包括系統(tǒng)預(yù)定義的和用戶(hù)自定義的)目的:格式:template<typename標(biāo)示符>函數(shù)模板定義比較第四十八頁(yè),共六十五頁(yè),2022年,8月28日書(shū)上的例子:請(qǐng)先閱讀5minsstructstudent{ intid; floatgpa;};template<classT>classstore{private: Titem; inthavevalue; intflag;public: store(void); Tgetelem(void); voidputelem(Tx);};template<classT>store<T>::store():havevalue(1),flag(99){}template<classT>Tstore<T>::getelem(void){ if(havevalue==0) {cout<<"noitempresent!"<<endl; exit(0); } else {cout<<"thehavevalueis:"<<havevalue<<endl; cout<<"theflagis:"<<flag<<endl; returnitem; }}這兒構(gòu)造函數(shù)定義時(shí),初始化其它數(shù)據(jù)成員可以改成class嗎?返回第四十九頁(yè),共六十五頁(yè),2022年,8月28日template<classT>voidstore<T>::putelem(Tx){havevalue++;item=x;}voidmain(){studentg={1000,23};store<int>s1,s2;s1.putelem(3);s2.putelem(7);cout<<s1.getelem()<<""<<s2.getelem()<<endl;返回第五十頁(yè),共六十五頁(yè),2022年,8月28日classcircle{public:inthavevalue;circle(intr);intarea(){return(int)3.14*radius*radius;}voidcircle_prt(){cout<<"theprivateradiusis:"<<radius<<endl;}private:intradius;};circle::circle(intr):havevalue(3){radius=r;}voidmain(){circlecircle1(1);circle*cp;cp=&circle1;cout<<"havevalue=:“;cout<<circle1.havevalue<<endl;circle1.circle_prt();cout<<"outbypointer:“;cout<<cp->havevalue<<endl;cout<<"outtheprivatedata”;cout<<circle1.radius<<cp->radius;//error}初始化禁止訪(fǎng)問(wèn)私有數(shù)據(jù)返回返回返回第五十一頁(yè),共六十五頁(yè),2022年,8月28日七、面向?qū)ο髽?biāo)記兩種方法UML:統(tǒng)一建模語(yǔ)言

專(zhuān)業(yè)的面向?qū)ο蠼UZ(yǔ)言,功能強(qiáng)大較復(fù)雜

Coad/Yourdon類(lèi)圖描述

簡(jiǎn)單明晰難以描述成員的訪(fǎng)問(wèn)控制第五十二頁(yè),共六十五頁(yè),2022年,8月28日UML對(duì)象名數(shù)據(jù)成員函數(shù)成員類(lèi)名數(shù)據(jù)成員函數(shù)成員Coad/Yourdon消息繼承包含返回第五十三頁(yè),共六十五頁(yè),2022年,8月28日要點(diǎn)回顧1.類(lèi)與對(duì)象的概念2.基本類(lèi)的定義與使用1.類(lèi)定義的格式:classname{…}2.訪(fǎng)問(wèn)控制3.對(duì)象創(chuàng)建與撤銷(xiāo)1.類(lèi)內(nèi)、類(lèi)外的理解2.數(shù)據(jù)成員與函數(shù)成員的區(qū)別3.public與private:公共接口與隱藏1.構(gòu)造、析構(gòu)函數(shù):公有、無(wú)返回值2.拷貝構(gòu)造函數(shù)3.組合類(lèi)1.定義:類(lèi)中內(nèi)嵌對(duì)象

?問(wèn):內(nèi)嵌類(lèi)的定義是組合類(lèi)嗎2.組合類(lèi)構(gòu)造與析構(gòu):調(diào)用順序4.類(lèi)模板1.設(shè)計(jì)思想:數(shù)據(jù)處理的通用性,參數(shù)化程序設(shè)計(jì)2.適用范圍:普通數(shù)據(jù)類(lèi)型、自定義數(shù)據(jù)類(lèi)型、類(lèi)3.注意事項(xiàng):成員函數(shù)是模板函數(shù)、代碼要通用返回第五十四頁(yè),共六十五頁(yè),2022年,8月28日ClassA{public:inta,b,c;……private:intx,y,z;……}返回Aa1,a2,a3;第五十五頁(yè),共六十五頁(yè),2022年,8月28日ClassA{public:inta,b,c;……private:intx,y,z;……}公共接口內(nèi)部數(shù)據(jù),隱私返回第五十六頁(yè),共六十五頁(yè),2022年,8月28日1.構(gòu)造函數(shù)與析構(gòu)函數(shù)的功能?2.默認(rèn)構(gòu)造函數(shù):系統(tǒng)可以產(chǎn)生缺省的構(gòu)造函數(shù)與析構(gòu)函數(shù)3.構(gòu)造函數(shù)可以重載,析構(gòu)函數(shù)可以重載嗎?返回第五十七頁(yè),共六十五頁(yè),2022年,8月28日為什么需要拷貝構(gòu)造函數(shù)?格式:類(lèi)名(類(lèi)名&對(duì)象名){……}那些情形調(diào)用拷貝構(gòu)造函數(shù)?1.用同類(lèi)對(duì)象初始化另一個(gè)對(duì)象2.用于對(duì)象參數(shù)傳遞3.函數(shù)的返回值是對(duì)象?如何理解返回第五十八頁(yè),共六十五頁(yè),2022年,8月28日classouter{public:inta;classinner{public: intb; inner(){cout<<"runtheinnerconstructor"<<endl; }voidshow(){cout<<"thedataofinneris:"<<b<<endl; } }inn;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論