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

正文內(nèi)容

面向?qū)ο蟪绦蛟O(shè)計c語言三ppt(編輯修改稿)

2025-02-15 10:40 本頁面
 

【文章內(nèi)容簡介】 l。return0。}60BottomArea=314Area=942Volume=1570程序的 運(yùn)行結(jié)果為:61v 從上述程序可以看出,用派生類對象訪問與基類中同名的成員時,會調(diào)用本類中的成員,而不會訪問到基類成員。為訪問到基類的同名成員,需要以成員名限定的方法來指明,如在Cylinder類中的求面積和體積函數(shù)就用到了基類的 Circle::Area()函數(shù)。 v 另外,要注意的一點(diǎn)是,在派生類如果定義了和基類中同名的函數(shù),則基類中所有的同名的重載函數(shù)都將被覆蓋,即在派生類中或通過派生類對象都無法直接訪問基類的任何一個同名函數(shù),如圖 ,62圖 派生類對基類的名字覆蓋 63 v 在派生類對象和基類對象之間賦值時需要注意賦值的方向,即這些賦值操作需要滿足賦值兼容規(guī)則。賦值兼容規(guī)則包括:( 1)基類對象可以賦值給基類對象,也可以把派生類對象賦值給基類對象。( 2)基類指針可以指向基類對象,也可以指向派生類對象。( 3)基類引用可以指向基類對象,也可以指向派生類對象。64v 例如,有基類 Base和其派生類 Derived, 可以定義相應(yīng)的對象、指針:Baseb1。Base*pb。Derivedd1。v 根據(jù)賦值兼容規(guī)則,在基類 Base對象可以出現(xiàn)的任何地方都可以用派生類 Derived對象來替代。( 1)派生類對象可以賦值給基類對象,即派生類對象中來自基類成員,逐個賦值給基類對象的成員:b1=d1。( 2) 派生類的對象也可以初始化基類對象的引用:Baseamp。rb=d1。( 3) 基類的指針賦值為派生類對象的地址:pb=amp。d1。65【例 】 賦值兼容實(shí)例。 /**/includeiostreamusingnamespacestd。classBase //基類 Base{protected:intmember。public:Base(){member=0。} voidShow() //共有成員函數(shù){coutBase::Show():memberendl。}}。classDerived1:publicBase //第 1個派生類 Derived1{public:Derived1(inta){member=a。}voidShow() //重寫共有成員函數(shù) Show{coutDerived1::Show():memberendl。}}。66classDerived2:publicDerived1//第 2個派生類 Derived2{public:Derived2(inta):Derived1(a){}voidShow() //重寫共有成員函數(shù) Show{coutDerived2::Show():memberendl。}}。voidTest(Base*pb) //測試函數(shù),用基類指針作參數(shù){pbShow()。}voidTest(Baseamp。br) //測試函數(shù),用基類引用作參數(shù){()。}intmain() //主函數(shù){Baseb0。 //基類 Base對象Derived1d1(5)。 //派生類 Derived1的對象Derived2d2(10)。 //派生類 Derived2的對象Base*pb0。 //基類指針 pb0pb0=amp。b0。 //基類指針 pb0指向基類對象 b0Test(pb0)。 b0=d1。 //基類對象賦值為子類對象Test(pb0)。 //測試輸出pb0=amp。d1。 //基類指針 pb0指向基第一派生類 Derived1的對象 d1Test(pb0)。Test(d2)。 //第 2派生類 Derived2的對象 d2的引用作參數(shù)傳給 Test函數(shù)return0。}67Base::Show():0Base::Show():5Base::Show():5Base::Show():10程序的 運(yùn)行結(jié)果為:68虛基類 提出問題 v 在多繼承關(guān)系中,如果某個派生類 D的多個基類(如類 Bl和 B2) 派生自另一個公共基類 B0, 則在派生類對象中,會通過不同的繼承路徑多次得到基類 B0的成員,即同時存在多份基類 B0的成員。v 通過派生類 D的對象訪問這些成員時,會出現(xiàn)對這些成員的訪問沖突。v 為解決沖突問題可以使用成員名限定的方法來唯一標(biāo)識某個成員所屬的基類,但是這不能從根本上解決問題:派生類對象中存在基類成員的多個副本,如圖 。69圖 多繼承關(guān)系及派生類的成員構(gòu)成 UML圖 70虛基類的概念 v 為使得公共基類 B0在派生類 D0中只產(chǎn)生一份基類成員,則需要將這個共同基類 B0設(shè)置為 虛基類 ,讓基類 Bl和 B2從基類 B0虛擬繼承,這時從不同的路徑繼承過來的同名數(shù)據(jù)成員在派生類中就只有一個副本。v 同一個函數(shù)名也只有一個映射。這樣就解決了同名成員的唯一標(biāo)識問題。v 使用虛基類,可以使公共基類的成員在其間接派生類中只保留一份。使用虛基類后, 4個類之間的關(guān)系如圖,這時派生類中的成員如圖 71圖 虛基類多繼承關(guān)系及派生類的成員構(gòu)成 UML圖 72v 定義虛基類的格式如下:class派生類名: virtual繼承方式 基類名稱{……};73在圖 :classB0{public:intnv0。}。classB1:virtualpublicB0{public:intnv1。}。classB2:virtualpublicB0{public:intnv2。}。classD0:publicB1,publicB2{public:intnv3。}。74虛基類的初始化 關(guān)于虛基類的初始化,有如下兩條規(guī)則:( 1)所有從虛基類直接或者間接派生的類必須在該類構(gòu)造函數(shù)的成員初始化列表列出對虛基類構(gòu)造函數(shù)的調(diào)用,但是只有實(shí)際構(gòu)造對象的類的構(gòu)造函數(shù)才會引發(fā)對虛基類構(gòu)造函數(shù)的調(diào)用,而其他基類在成員初始化列表中對虛基類構(gòu)造函數(shù)的調(diào)用都會被忽略,從而保證了派生類對象中虛基類成員只會被初始化一次。( 2)若某類構(gòu)造函數(shù)的成員初始化列表中同時列出對虛基類構(gòu)造函數(shù)和非虛基類構(gòu)造函數(shù)的調(diào)用,則會優(yōu)先執(zhí)行虛基類的構(gòu)造函數(shù) 75【例 】 設(shè)置虛基類以解決二義性 /**/includeiostreamusingnamespacestd。classBase //虛基類 Base{public:Base(inta) //構(gòu)造函數(shù){val=a。}voidPrint() //輸出成員 val值得函數(shù){coutvalendl。}protected:intval。 //成員變量 val}。classDerived1:virtualpublicBase //第一個派生類 Derived1{public:Derived1(intx,inty):Base(x),dv1(y) //調(diào)用了基類的構(gòu)造函數(shù){}protected:intdv1。}。76classDerived2:virtualpublicBase{public:Derived2(intx,inty):Base(x),dv2(y) //調(diào)用了基類的構(gòu)造函數(shù){}protected:intdv2。}。//最終的多重繼承類 DerivedFinalclassDerivedFinal:publicDerived1,publicDerived2{public:DerivedFinal(intx,inty,intz):Derived1(x,y),Derived2(y,z),Base(z){}}。intmain(){DerivedFinaldf(7,18,22)。 //定義對象()。 //輸出虛基類 Base的成員 val的值return0。}7722程序的 運(yùn)行結(jié)果為:78本章小結(jié) 1類的繼承方式v 類的繼承方式有 public( 公有繼承)、 protected( 保護(hù)繼承)和 private( 私有繼承)三種,不同的繼承方式,導(dǎo)致原來具有不同訪問屬性的基類成員在派生類中的訪間屬性也有所不同。v 這時訪問規(guī)則有兩類:216。 一是派生類中非 static成員函數(shù)和友元函數(shù)對基類成員的訪問;216。 二是在派生類作用域外的對象對基類成員的訪問。792派生類對象的構(gòu)造與析構(gòu)的順序v 構(gòu)造派生類的對象時,就要對基類數(shù)據(jù)成員、派生類自身的數(shù)據(jù)成員和對象成員進(jìn)行初始化。v 由于基類的構(gòu)造函數(shù)不能被繼承下來,要完成這些工作,就必須給派生類添加新的構(gòu)造函數(shù)。v 派生類構(gòu)造函數(shù)執(zhí)行的一般順序如下:( 1)調(diào)用基類構(gòu)造函數(shù),調(diào)用順序按照它們被繼承時聲明的順序(從左向右)。( 2)調(diào)用對象成員的構(gòu)造函數(shù),調(diào)用順序按照它們在類中聲明的順序。( 3)執(zhí)行派生類的構(gòu)造函數(shù)體中的內(nèi)容。803繼承中的基類成員的訪問和賦值兼容性v 當(dāng)多個基類中定義有同名成員則派生類對這些同名成員的訪問可能存在沖突和二義性這時可采用成員名限定法來這種訪問不明去的問題。v 當(dāng)在多重繼承的情況下.調(diào)用不同基類中的相同成員時可能也會出現(xiàn)二義性問題。v C++ 語言規(guī)定,在派生類中重新聲明的成員函數(shù)具有比基類同名成員函數(shù)更小的作用域,這時可以在可能出現(xiàn)二義性的地方,加上類名限定,就可避免出現(xiàn)名字沖突問題。81v 賦值兼容規(guī)則是指在需要基類對象的任何地方都可以使用公有派生類的對象來替代。v 通過公有繼承,派生類得到了基類中除構(gòu)造函數(shù)、析構(gòu)函數(shù)之外的所有成員。v 這樣,公有派生類實(shí)際就具備了基類的所有功能,凡是基類能解決的問題公有派生類都可以解決。v 賦值兼容規(guī)則中所指的替代包括以下的情況:( 1)派生類的對象可以賦值給基類的對象( 2)派生類的對象可以初始化基類的引用。( 3)派生類對象的地址可以賦給指向基類的指針。824虛基類v 當(dāng)某類的部分或全部直接基類是從另一個共同基類派生而來時,在這些直接基類中從上一級共同基類繼承來的成員就擁有相同的名稱。v 在派生類對象中這些同名數(shù)據(jù)成員在內(nèi)存中同時擁有多個副本,同一個函數(shù)名會有多個映射。這時可以將共同基類設(shè)置為虛基類,那么從不同的路徑繼承過來的同名數(shù)據(jù)成員在內(nèi)存中就只有一個副本,同一個函數(shù)名也只有一個映射。因而虛基類解決了同名成員的唯一標(biāo)識問題。83第二部分 面向?qū)ο蟮某绦蛟O(shè)計 第 3章 類和對象 (一 )第 4章 類和對象 (二 )第 5章 繼承和派生第 6章 虛函數(shù)與多態(tài)性第 7章 運(yùn)算符重載第 8章 模板第 9章 標(biāo)準(zhǔn)模板庫 STL第 10章 C++語言的輸入和輸出84第 6章 虛函數(shù)與多態(tài)性本章要點(diǎn):v 多態(tài)性的概念v 虛函數(shù)的定義與應(yīng)用v 多繼承與虛函數(shù)v 純虛函數(shù)與抽象類85v 多態(tài)性 (Polymorphism)是面向?qū)ο蟪绦蛟O(shè)計的一個非常重要的特性,如果不支持多態(tài)性, C++就不是真正的面向?qū)ο蟪绦蛟O(shè)計語言。v 多態(tài)性 指的是不同的對象對于同樣的消息會產(chǎn)生不同的行為,而消息在 C++語言中指的就是函數(shù)的調(diào)用,不同的函數(shù)可以具有多種不同的功能,而多態(tài)就是允許用一個函數(shù)名的調(diào)用來執(zhí)行不同的功能。86 v 多態(tài)性不僅限于 C++語言,從面向?qū)ο蠹夹g(shù)的角度來看,多態(tài)性可以分為四類:( 1)重載多態(tài),前面學(xué)習(xí)的函數(shù)重載就屬于此概念,運(yùn)算符重載也是重載多態(tài)(第 7章將詳細(xì)介紹)。( 2)強(qiáng)制多態(tài),指將一個變量類型加以變化,以符合一個函數(shù)或者操作的要求,例如加法運(yùn)算符在進(jìn)行浮點(diǎn)數(shù)與整型數(shù)相加時,首先要對整型數(shù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換為浮點(diǎn)數(shù)再相加的情況,就是強(qiáng)制多態(tài)的實(shí)例。( 3)包含多態(tài),同樣的操作可用于一個類型及其子類型。包含多態(tài)一般需要進(jìn)行運(yùn)行時的類型檢查,主要是通過虛函數(shù)來實(shí)現(xiàn)。( 4)參數(shù)多態(tài),采用參數(shù)化模板,通過給出不同的類型參數(shù),使得一個結(jié)構(gòu)可以適用多種數(shù)據(jù)類型, C++提供的函數(shù)模板和類模板即為典型的參數(shù)多態(tài)(第 8章將詳細(xì)介紹)。 87v 對于多態(tài)性,一個要解決的主要問題就是何時把具體的操作和對象進(jìn)行 綁定 ( binding), 也稱 聯(lián)編 、 關(guān)聯(lián) ,綁定也指的是程序如何為類的對象找到執(zhí)行操作函數(shù)的程序入口的過程。v 從系統(tǒng)實(shí)現(xiàn)的角度來看,多態(tài)可以分為兩類:216。 編譯時多態(tài)216。 運(yùn)行時多態(tài) 88v 編譯時多態(tài),指的在程序編譯過程中時決定同名操作與對象的綁定關(guān)系,也稱靜態(tài)綁定、靜態(tài)聯(lián)編,典型的技術(shù)有函數(shù)重載、運(yùn)算符重載、模板。v 由于這種方式是在程序運(yùn)行前就確定了對象要調(diào)用的具體函數(shù),因此程序運(yùn)行的時候函數(shù)調(diào)用速度快、效率較高。v 其缺點(diǎn)是編程不夠靈活。89v 運(yùn)行時多態(tài),指的是在程序運(yùn)行過程中動態(tài)地確定同名操作與具體對象的綁定關(guān)系,也稱動態(tài)綁定、動態(tài)聯(lián)編等,主要通過使用繼承和虛函數(shù)來實(shí)現(xiàn)。v 在編譯、連接過程中確定綁定關(guān)系,程序運(yùn)行之后才能確定。v 動態(tài)綁定的優(yōu)點(diǎn)是編程更加靈活、系統(tǒng)易于擴(kuò)展。v 由于內(nèi)部增加了實(shí)現(xiàn)虛函數(shù)調(diào)用的機(jī)制,因此要比靜態(tài)綁定的函數(shù)調(diào)用速度慢些。90基類指針指向派生類對象 【例 6.1】 函數(shù)重載在多態(tài)性中的應(yīng)用。/**/includeiostreamusingnamespacestd。classBase//基類{public:voidPrint(){cout”BaseClassPrint.”endl。}
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1