freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

面向?qū)ο蟪绦蛟O(shè)計c語言三ppt-資料下載頁

2025-01-19 10:40本頁面
  

【正文】 。中間類的作用 114虛析構(gòu)函數(shù) v 析構(gòu)函數(shù)的作用是在對象撤銷之前做必要的 “清理現(xiàn)場 ”的工作。v 當(dāng)派生類的對象從內(nèi)存中撤銷時一般先調(diào)用派生類的析構(gòu)函數(shù),然后再調(diào)用基類的析構(gòu)函數(shù)。但是,如果用 new運算符動態(tài)生成一個派生類的堆對象,并讓基類指針指向該派生類對象。v 當(dāng)程序用 delete運算符通過基類指針刪除派生類對象時,會發(fā)生一種情況:系統(tǒng)會只執(zhí)行基類的析構(gòu)函數(shù),而不執(zhí)行派生類的析構(gòu)函數(shù)。115【例 】基類中有非虛析構(gòu)函數(shù)時的執(zhí)行情況。 /**/includeiostreamusingnamespacestd。classBase //定義基類 Base{public:Base() //Base類構(gòu)造函數(shù){coutConstructBase.endl。}~Base() //Base類析構(gòu)函數(shù){coutDeconstructBase.endl。}}。116classDerived:publicBase //定義公有派生類 Derived{public:Derived() //Derived類構(gòu)造函數(shù){coutConstructDerived.endl。}~Derived() //Derived類析構(gòu)函數(shù){coutDeconstructDerived.endl。}}。intmain() //主函數(shù)測試{Base*pb。 //定義基類指針pb=newDerived()。 //基類指針指向新生成的派生類堆對象deletepbreturn1。}117ConstructBase.ConstructDerived.DestructBase.程序的 運行結(jié)果為:118v 在程序的 main()函數(shù)中, pb是基類的指針,指向了一個派生類 Derived的堆對象。希望用 delete釋放 pb所指向的空間。但運行結(jié)果為:DestructBase.v 表示只執(zhí)行了基類 Base的析構(gòu)函數(shù),而沒有執(zhí)行派生 類Derived的析構(gòu)函數(shù)。如果希望執(zhí)行派生類 Derived的析構(gòu)函數(shù),則應(yīng)將基類的析構(gòu)函數(shù)聲明為虛析構(gòu)函數(shù),例如:virtual~Base() //Base類析構(gòu)函數(shù){coutDeconstructBase.endl。}v 程序其他部分不改動,再運行程序,其結(jié)果為:DestructDerived.DestructBase.119v 如果將基類的析構(gòu)函數(shù)聲明為虛函數(shù)時,由該基類所派生的所有派生類的析構(gòu)函數(shù)也都自動成為虛函數(shù),即使派生類的析構(gòu)函數(shù)與基類的析構(gòu)函數(shù)名字不同。v 最好把基類的析構(gòu)函數(shù)聲明為虛函數(shù)。這將使所有派生類的析構(gòu)函數(shù)自動成為虛函數(shù)。這樣,如果程序中顯式地用了 delete運算符準(zhǔn)備刪除一個對象,而 delete運算符的操作對象用了指向派生類對象的基類指針,則系統(tǒng)會調(diào)用相應(yīng)類的析構(gòu)函數(shù)。120v 虛析構(gòu)函數(shù)的概念和用法很簡單,但它在面向?qū)ο蟪绦蛟O(shè)計中卻是很重要的技巧。專業(yè)人員一般都習(xí)慣聲明虛析構(gòu)函數(shù),即使基類并不需要析構(gòu)函數(shù),也顯式地定義一個函數(shù)體為空的虛析構(gòu)函數(shù),以保證在撤銷動態(tài)分配空間時能得到正確的處理。v 構(gòu)造函數(shù)不能聲明為虛函數(shù)。這是因為在執(zhí)行構(gòu)造函數(shù)時類對象還未完成建立過程,當(dāng)然談不上函數(shù)與類對象的綁定。1216.3純虛函數(shù)和抽象類 v 有時在基類中將某一成員函數(shù)聲明為虛函數(shù),并不是類本身的要求,而是考慮到派生類的需要,在基類中只定義一個函數(shù)名,具體功能留給派生類根據(jù)需要去實現(xiàn) 。v 因此可以對這種虛函數(shù)只在基類中說明函數(shù)原型,用來定義繼承體系中的統(tǒng)一接口形式,然后在派生類的虛函數(shù)中重新定義具體實現(xiàn)代碼,而這種基類中的虛函數(shù)就是 純虛函數(shù) ,其聲明一般形式為:virtual函數(shù)類型 函數(shù)名(參數(shù)表) =0122關(guān)于純虛函數(shù),有以下問題需要說明: ( 1)純虛函數(shù)沒有函數(shù)體;( 2)最后面的 “=0”并不表示函數(shù)返回值為 0,它只起形式上的作用,告訴編譯系統(tǒng) “這是純虛函數(shù) ”;( 3)這是一個聲明語句,后面應(yīng)有分號;( 4)純虛函數(shù)只有函數(shù)的名字而不具備函數(shù)的功能,不能被調(diào)用,它只是通知編譯器在這時聲明一個虛函數(shù),留待派生類中定義。在派生類中對此函數(shù)提供定義后,它才能具備函數(shù)的功能,可以被調(diào)用。v 如果在一個類中聲明了純虛函數(shù),而在其派生類中沒有對該函數(shù)定義,則該虛函數(shù)在派生類中仍然為純虛函數(shù)。 123【例 】 分析下列程序的輸出的結(jié)果。 /**/includeiostreamusingnamespacestd。classVehicle //定義交通工具類{protected:intpos,speed。 //定義成員變量位置和速度public:Vehicle(intps=0,intspd=0) //構(gòu)造函數(shù){pos=psspeed=spd}voidSetSpeed(intspd) //設(shè)置速度值{ speed=spd}voidShow() //顯示交通工具位置{cout”Positionat”posendl。}virtualvoidRun()=0。 //聲明純虛函數(shù) Run()}。124classCar:publicVehicle //小汽車類{public:voidRun() //重寫虛函數(shù)Run(){pos+=speed。} //位置變化}。intmain() //主函數(shù){Vehicle*pvh。Car car。pvh=amp。car。 //基類指針指向派生類對象pvhSetSpeed(5)。 //調(diào)用基類的普通成員函數(shù)pvhShow()。 //顯示位置pvhRun()。 //運行pvhShow()。pvhRun()。pvhShow()。return0。}125Positionat0Positionat5Positionat10程序的 運行結(jié)果為:程序分析:該程序在基類 Vehicle中定義了一個純虛函數(shù) Run(), 其形式如下:virtual void Run()= 0。程序中用 Vehicle類定義的指針指向了一個 Car類的實例 car, 然后就可以調(diào)用純虛函數(shù) Run(), 從而實現(xiàn)動態(tài)綁定的效果。126 v 包含有 純虛函數(shù)的類 是 抽象類 。v 由于抽象類常用作基類,通常稱為 抽象基類 。v 抽象基類的主要作用是 :通過它為一個類族建立一個公共的接口,使它們能夠更有效地發(fā)揮多態(tài)特性。v 抽象基類聲明了一族派生類的共同接口,而接口的具體實現(xiàn)代碼,即純虛函數(shù)的函數(shù)體,要由派生類自己定義。127v 抽象類派生出新的類之后,如果派生類給出所有純虛函數(shù)的函數(shù)實現(xiàn),這個派生類就可以定義自己的對象,因而不再是抽象類;反之,如果派生類沒有給出全部純虛函數(shù)的實現(xiàn),這時的派生類仍然是一個抽象類。v 抽象類不能實例化,即不能定義一個抽象類的對象,但是,可以聲明一個抽象類的指針或引用。通過指針或引用,就可以指向并訪問派生類對象。進而訪問派生類的成員,這種訪問是具有多態(tài)特征的。用抽象類實現(xiàn)多態(tài)性。128【例 】設(shè)計一個抽象類 Shape, 用來表示形狀的抽象概念,并定義求面積 Area()和打印 Print()兩個純虛函數(shù),然后設(shè)計圓類和矩形兩個派生類,各自重寫基類中的虛函數(shù)。 /**/includeiostreamusingnamespacestd。classShape{protected:doublex,y。public:Shape(doublea,doubleb) //構(gòu)造函數(shù){x=a。y=b。}virtualdoubleArea()=0。 //求面積函數(shù),聲明為虛函數(shù) virtualvoidPrint()=0。 //打印輸出形狀信息,聲明為純虛函數(shù)}。129//定義圓派生類classCircle:publicShape {private:doubleradius。 //半徑public:Circle(doubler=0,doublea=0,doubleb=0)。doubleArea()。voidPrint()。}。Circle::Circle(doubler,doublea,doubleb):Shape(a,b){radius=r。}doubleCircle::Area() //實現(xiàn)求圓形面積{return*radius*radius。}voidCircle::Print() //打印輸出圓形信息{coutCircleCenter=(x,y),Radius=radiusendl。}130//定義矩形派生類classRectangle:publicShape{private:doublewidth, height。 //矩形寬和高public:Rectangle(doublea=0,doubleb=0,doublew=0,doubleh=0)。doubleArea()。voidPrint()。}。Rectangle::Rectangle(doublea,doubleb,doublew,doubleh):Shape(a,b){ width=w。height=h。}doubleRectangle::Area() //實現(xiàn)求矩形面積{ returnwidth*height。}voidRectangle::Print() //打印輸出矩形信息{ coutRectanglePosition=(x,y),Size=(width,height)endl。}131intmain(){ Shape*ps1,*ps2。 //定義抽象類的指針變量//Shapes1(5,10)。 //如果不注釋該語句,編譯程序時將出錯Circlec1(10,30,15)。 //圓對象Rectangler1(20,20,100,40)。 //矩形對象ps1=amp。c1。ps2=amp。r1。ps1Print()。 //通過基類指針調(diào)用虛函數(shù) Print()coutArea=ps1Area()endl。 //通過基類指針調(diào)用虛函數(shù) Area()ps2Print()。coutArea=ps2Area()endl。return0。}132CircleCenter=(30,15),Radius=10Area=RectanglePosition=(20,20),Size=(100,40)Area=4000程序的 運行結(jié)果為:133綜合應(yīng)用舉例 v 本節(jié)以一個小型的汽車信息處理程序為例,說明虛函數(shù)、抽象類應(yīng)用。有一個 ASCII文件存儲不同類型汽車信息 :216。 普通汽車 Car216。 卡車 Truck216。 吊車 Cranev 編寫三個類實現(xiàn)這三種汽車類,并且設(shè)計虛函數(shù) Input() 讀入對應(yīng)車型的有關(guān)信息,然后按照指定的格式輸出到屏幕 ,文件名設(shè)為 。v 文件中的汽車信息如表 。 134表 文件中的汽車信息CarVolkswagen5TruckGM25CraneFord1420…… 汽車類型 普通汽車廠商乘客人數(shù)汽車類型 卡車廠商乘客人數(shù)載重噸數(shù)汽車類型 吊車廠商乘客人數(shù)起重量噸數(shù)起升高度(米)……文件內(nèi)容 說明135讀入以上文件實例內(nèi)容后,將以如下格式輸出:Style:CarManufacturer:VolkswagenPassenger:5Style:TruckManufacturer:GMPassenger:2Load:5Style:CraneManufacture:FordPassenger:2Load:4Height:20136【例 】 汽車信息處理程序。 /**/includeiostreamincludestringusingnamespacestd。//定義汽車抽象基類classAuto {protected:stringstypename。 //類型名int npassengers。 //乘客數(shù)量stringsmanufacturer。 //廠商名稱public:Auto() //構(gòu)造函數(shù){stypename=Auto。npassengers=0。smanufacturer=nomanufacturer。}137virtual~Auto(){} //虛析構(gòu)函數(shù)//靜態(tài)函數(shù) TrimLine(), 用于整理字符串,去掉串尾部換行字符staticvoidTrimLine(char*sbuf){while(sbuf!=39。\039。){if(*sbuf==39。\r39。||*sbuf==39。\n39。){*sbuf=39。
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1