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

正文內(nèi)容

[高等教育]第8章多態(tài)性new-資料下載頁

2025-01-19 18:53本頁面
  

【正文】 ptr1=amp。obj。 ptr1who()。 ptr2=amp。obj。 ptr2who()。 } 此時 , 程序執(zhí)行的結(jié)果為 61 ? 從本例題可以看出,虛特性是可以傳遞的。 base類作為 base1和 base2類的直接基類,它的成員函數(shù) who()被聲明為虛函數(shù) ,則 base1和 base2類中的 who()都具有虛特性,即均為虛函數(shù);而 derive類為base1和 base2類的派生類,因此,它的成員函數(shù) who()也為虛函數(shù)。 62 虛函數(shù)的限制 ? 如果我們將所有的成員函數(shù)都設(shè)置為虛函數(shù) , 當然是很有益的 。 它除了會增加一些額外的資源開銷 , 沒有什么壞處 。但設(shè)置虛函數(shù)須注意以下幾點 。 ① 只有成員函數(shù)才能聲明為虛函數(shù) 。 因為虛函數(shù)僅適用于有繼承關(guān)系的類對象 ,所以普通函數(shù)不能聲明為虛函數(shù) 。 ② 虛函數(shù)必須是非靜態(tài)成員函數(shù) 。 這是因為靜態(tài)成員函數(shù)不受限于某個對象 。 ③ 內(nèi)聯(lián)函數(shù)不能聲明為虛函數(shù) 。 因為內(nèi)聯(lián)函數(shù)不能在運行中動態(tài)確定其位置 。 ④構(gòu)造函數(shù)不能聲明為虛函數(shù)。多態(tài)是指不同的對象對同一消息有不同的行為特性。虛函數(shù)作為運行過程中多態(tài)的基礎(chǔ),主要是針對對象的,而構(gòu)造函數(shù)是在對象產(chǎn)生之前運行的,因此,虛構(gòu)造函數(shù)是沒有意義的。 ⑤析構(gòu)函數(shù)可以聲明為虛函數(shù)。析構(gòu)函數(shù)的功能是在該類對象消亡之前進行一些必要的清理工作。析構(gòu)函數(shù)沒有類型,也沒有參數(shù),和普通成員函數(shù)相比,虛析構(gòu)函數(shù)情況略為簡單些。 64 虛析構(gòu)函數(shù)的聲明語法如下: virtual~類名 例如: class B { public: //… virtual ~B()。 }。 65 抽象類 純虛函數(shù) ? 一個抽象類至少帶有一個純虛函數(shù) 。 純虛函數(shù)是一個在基類中說明的虛函數(shù) , 它在該基類中沒有定義具體的操作內(nèi)容 , 要求各派生類根據(jù)實際需要定義自己的實現(xiàn)內(nèi)容 。 純虛函數(shù)的聲明形式如下: virtual函數(shù)類型 函數(shù)名 (參數(shù)表 )=0 ? 純虛函數(shù)與一般虛函數(shù)在書寫形式上的不同在于其后面加了 “ =0”,表明在基類中不用定義該函數(shù),它的實現(xiàn)部分 —— 函數(shù)體留給派生類去做。 66 抽象類 ? 抽象類的主要作用是通過它為一個類族建立一個公共的接口 , 使它們能夠更有效地發(fā)揮多態(tài)特性 。 使用抽象類時需注意以下幾點 。 ① 抽象類只能用作其它類的基類 , 不能建立抽象類對象 。 抽象類處于繼承層次結(jié)構(gòu)的較上層 , 一個抽象類自身無法實例化 , 而只能通過繼承機制 , 生成抽象類的非抽象派生類 , 然后再實例化 。 67 ② 抽象類不能用作參數(shù)類型 、 函數(shù)返回值或顯式轉(zhuǎn)換的類型 。 ③ 可以聲明一個抽象類的指針和引用 。 通過指針或引用 , 我們就可以指向并訪問派生類對象 ,以訪問派生類的成員 。 抽象類派生出新的類之后 , 如果派生類給出所有純虛函數(shù)的函數(shù)實現(xiàn) , 這個派生類就可以聲明自己的對象 , 因而不再是抽象類;反之 ,如果派生類沒有給出全部純虛函數(shù)的實現(xiàn) , 這時的派生類仍然是一個抽象類 。 68 【 例 88】 抽象類例題 。 我們來看這個例題 。 在基類 Shapes中將成員 display()聲明為純虛函數(shù) , 這樣 ,基類 Shapes就是一個抽象類 , 我們無法聲明 Shapes類的對象 , 但是可以聲明Shapes類的指針和引用 。 Shapes類經(jīng)過公有派生產(chǎn)生了 Rectangle類和 Circle類 。使用抽象類 Shapes類型的指針 , 當它指向某個派生類的對象時 , 就可以通過它訪問該對象的虛成員函數(shù) 。 69 includeiostream const double PI=。 class Shapes //抽象基類 Shapes聲明 { protected: int x,y。 public: void setvalue(int xx,int yy=0){x=xx。y=yy。} virtual void display()=0。 //純虛函數(shù)成員 }。 class Rectangle:public Shapes //派生類 Rectangle聲明 { public: //虛成員函數(shù) void display(){coutThe area of rectangle is: x*yendl。} }。 class Circle:public Shapes //派生類 Circle聲明 { public: //虛成員函數(shù) void display(){coutThe area of circle is: PI*x*xendl。} }。 void main() { Shapes *ptr[2]。 //聲明抽象基類指針 Rectangle rect1。 Circle cir1。 ptr[0]=amp。rect1。 //指針指向 Rectangle類對象 ptr[0]setvalue(5,8)。 ptr[0]display()。 ptr[1]=amp。cir1。 //指針指向 Circle類對象 ptr[1]setvalue(10)。 ptr[1]display()。 } 72 ? 程序中類 Shapes、 Rectangle和 Circle屬于同一個類族 , 抽象類 Shapes通過純虛函數(shù)為整個類族提供了通用的外部接口語義 。 通過公有派生而來的子類給出了純虛函數(shù)的具體函數(shù)體實現(xiàn) ,因此是非抽象類 。 我們可以定義非抽象類的對象 , 同時根據(jù)賦值兼容規(guī)則 , 抽象類 Shapes類型的指針也可以指向任何一個派生類的對象 ,通過基類 Shapes的指針可以訪問到正在指向的派生類 Rectangle和 Circle類對象的成員 , 這樣就實現(xiàn)了對同一類族中的對象進行統(tǒng)一的多態(tài)處理 。 73 本例的程序運行結(jié)果為 ? 另外 , 程序中派生類的虛成員函數(shù)display()并沒有用關(guān)鍵字 virtual顯式說明 ,因為它們與基類的純虛函數(shù)具有相同的名稱及參數(shù)和返回值 , 由系統(tǒng)自動判斷確定其為虛成員函數(shù) 。 74 ? 定義 Point類,有坐標 x,y兩個成員變量,對Point 類重載 “ ++”(自增)、 “ ”(自減)前置 /后置運算符,實現(xiàn)對坐標值的改變。 ? 注意: ++,運算符對 x,y坐標都加一。 ? 包含構(gòu)造函數(shù)和析構(gòu)函數(shù) 上機作業(yè) 75 ? 定義一個車( vehicle)基類,有 run()、stop()等成員函數(shù),由此派生出 bicycle和motorcar,由 bicycle和 motorcar派生出摩托車( motorcycle) ,他們都有 Run和 Stop成員。 ? 定義一個 vehicle指針,分別聲明三個類的對象,調(diào)用他們的 run()函數(shù),觀察使用虛函數(shù)和不使用虛函數(shù)的區(qū)別。
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1