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

正文內(nèi)容

[經(jīng)濟(jì)學(xué)]第5章繼承與派生類(lèi)(編輯修改稿)

2025-01-04 01:51 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 } 目錄 退出 第 52頁(yè) 共 141頁(yè) 在定義派生類(lèi)對(duì)象時(shí) ,構(gòu)造函數(shù)的執(zhí)行順序 調(diào)用基類(lèi)的構(gòu)造函數(shù) 。 調(diào)用內(nèi)嵌對(duì)象成員的構(gòu)造函數(shù)(有多個(gè)對(duì)象成員時(shí) ,調(diào)用順序由它們?cè)陬?lèi)中聲明的順序確定) 。 派生類(lèi)的構(gòu)造函數(shù)體中的內(nèi)容。 撤消對(duì)象時(shí) ,析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)的調(diào)用順序正好相反。 目錄 退出 第 53頁(yè) 共 141頁(yè) 例 include class Base { public: Base(int i) //基類(lèi)的構(gòu)造函數(shù) { coutConstructing base class\n。 x=i。 } ~Base( ) //基類(lèi)的析構(gòu)函數(shù) { coutDestructing base class\n。 } void show( ) { coutx=xendl。 } private: int x。 }。 目錄 退出 第 54頁(yè) 共 141頁(yè) 例 class Derive :public Base{ public: Derive(int i):Base(i),d(i) // 定義派生類(lèi)構(gòu)造函數(shù)時(shí) , { // 綴上基類(lèi)的構(gòu)造函數(shù)和對(duì)象成員構(gòu)造函數(shù) coutConstructing derived classendl。 } ~Derive( ) //派生類(lèi)的析構(gòu)函數(shù) { coutDestructing derived classendl。 } private: Base d。 //d為基類(lèi)對(duì)象,作為派生類(lèi)的對(duì)象成員 }。 目錄 退出 第 55頁(yè) 共 141頁(yè) 例 void main( ) { Derive obj(123)。 ( )。 } 目錄 退出 第 56頁(yè) 共 141頁(yè) 說(shuō)明 ( 1)當(dāng)基類(lèi)構(gòu)造函數(shù)不帶參數(shù)時(shí),派生類(lèi)不一定需要定義構(gòu)造函數(shù),然而當(dāng)基類(lèi)的構(gòu)造函數(shù)哪怕只帶有一個(gè)參數(shù),它所有的派生類(lèi)都必須定義構(gòu)造函數(shù)。甚至所定義的派生類(lèi)構(gòu)造函數(shù)的函數(shù)體可能為空,僅僅起參數(shù)的傳遞作用。 目錄 退出 第 57頁(yè) 共 141頁(yè) 說(shuō)明 ( 2)若基類(lèi)使用缺省構(gòu)造函數(shù)或不帶參數(shù)的構(gòu)造函數(shù),則在派生類(lèi)中定義構(gòu)造函數(shù)時(shí)可略去“:基類(lèi)構(gòu)造函數(shù)名(參數(shù)表)”。此時(shí),若派生類(lèi)也不需要構(gòu)造函數(shù),則可不定義構(gòu)造函數(shù)。 ( 3)如果派生類(lèi)的基類(lèi)也是一個(gè)派生類(lèi),每個(gè)派生類(lèi)只需負(fù)責(zé)其直接基類(lèi)的構(gòu)造,依次上溯。 目錄 退出 第 58頁(yè) 共 141頁(yè) 說(shuō)明 ( 4)由于析構(gòu)函數(shù)是不帶參數(shù)的,在派生類(lèi)中是否要定義析構(gòu)函數(shù)與它所屬的基類(lèi)無(wú)關(guān),基類(lèi)的析構(gòu)函數(shù)不會(huì)因?yàn)榕缮?lèi)沒(méi)有析構(gòu)函數(shù)而得不到執(zhí)行,它們是各自獨(dú)立的。 返回 目錄 退出 第 59頁(yè) 共 141頁(yè) * 調(diào)整基類(lèi)成員在派生類(lèi)中的訪(fǎng)問(wèn)屬性的其他方法 同名成員 訪(fǎng)問(wèn)聲明 目錄 退出 第 60頁(yè) 共 141頁(yè) 同名成員 目錄 退出 第 61頁(yè) 共 141頁(yè) 訪(fǎng)問(wèn)聲明 目錄 退出 第 62頁(yè) 共 141頁(yè) 多繼承 派生類(lèi)只有一個(gè)基類(lèi) ,這種派生方法稱(chēng)為單基派生或單繼承 。 當(dāng)一個(gè)派生類(lèi)具有多個(gè)基類(lèi)時(shí) ,這種派生方法稱(chēng)為多基派生或多繼承 。 目錄 退出 第 63頁(yè) 共 141頁(yè) 多繼承 多繼承的聲明 多繼承的構(gòu)造函數(shù)和析構(gòu)函數(shù) 虛基類(lèi) 目錄 退出 第 64頁(yè) 共 141頁(yè) 多繼承的聲明 定義具有兩個(gè)或兩個(gè)以上基類(lèi)的派生類(lèi)與定義單繼承是類(lèi)似的。 在多個(gè)基類(lèi)及繼承方式之間用逗號(hào)分隔。 兩個(gè)以上基類(lèi)的派生類(lèi)聲明的一般形式如下 : class 派生類(lèi)名 :繼承方式 1 基類(lèi)名 1, … , 繼承方式 n 基類(lèi)名 n{ // 派生類(lèi)新增的數(shù)據(jù)成員和成員函數(shù) }。 目錄 退出 第 65頁(yè) 共 141頁(yè) 多繼承的定義應(yīng)注意 冒號(hào)之后為基類(lèi)表,每一個(gè)基類(lèi)名前都有繼承方式。 若缺省,系統(tǒng)默認(rèn)為私有繼承方式。 實(shí)際上,派生類(lèi)與每個(gè)基類(lèi)之間的關(guān)系可以認(rèn)為是一個(gè)單繼承。 多繼承可以認(rèn)為是單繼承的自然拓展。 目錄 退出 第 66頁(yè) 共 141頁(yè) 例 多繼承情況下的訪(fǎng)問(wèn)特性 include class A { public: void setA(int x) {a=x。} void printA( ) {couta=aendl。} private: int a。 }。 目錄 退出 第 67頁(yè) 共 141頁(yè) 例 多繼承情況下的訪(fǎng)問(wèn)特性 class B { public: void setB(int x) {b=x。} void printB( ) {coutb=bendl。} private: int b。 }。 目錄 退出 第 68頁(yè) 共 141頁(yè) 例 多繼承情況下的訪(fǎng)問(wèn)特性 class C:public A,private B { public: void setC(int x,int y) { c=x。 setB(y)。 } void printC( ) { printB( )。 coutc=cendl。 } private: int c。 }。 目錄 退出 第 69頁(yè) 共 141頁(yè) 例 多繼承情況下的訪(fǎng)問(wèn)特性 void main( ) { C obj。 (3)。 ( )。 (4)。 //錯(cuò)誤 ( )。 //錯(cuò)誤 (6,8)。 ( )。 } 當(dāng)刪去這兩句后,輸出結(jié)果為: 目錄 退出 第 70頁(yè) 共 141頁(yè) 說(shuō)明 對(duì)基類(lèi)成員的訪(fǎng)問(wèn)必須是無(wú)二義性的,例如下列程序段對(duì)基類(lèi)成員的訪(fǎng)問(wèn)是二義性的,必須想法消除二義性。 目錄 退出 第 71頁(yè) 共 141頁(yè) 說(shuō)明 class X{ public: int f( )。 }。 class Y{ public: int f( )。 int g( )。 }。 class Z:public x,public Y { public: int g( )。 int h( )。 }。 目錄 退出 第 72頁(yè) 共 141頁(yè) 各類(lèi)及其成員關(guān)系圖 Y public: f( )。 g( )。 X public: f( )。 Z X public: f( )。 Y public: f( )。 g( )。 g( ); h( ); 目錄 退出 第 73頁(yè) 共 141頁(yè) 說(shuō)明 如定義類(lèi) Z的對(duì)象 obj: Z obj。 則以下對(duì) f( )的訪(fǎng)問(wèn)是二義性的: ( )。//二義性錯(cuò)誤,不知調(diào)用的是 X的 f( ), //還是 Y的 f( ) 使用成員名限定可以消除二義性,例如: ::f( )。 //調(diào)用類(lèi) X的 f( ) ::f( )。 //調(diào)用類(lèi) Y的 f( ) 返回 目錄 退出 第 74頁(yè) 共 141頁(yè) 多繼承的構(gòu)造函數(shù)和析構(gòu)函數(shù) 多繼承構(gòu)造函數(shù)定義的一般形式如下 : 派生類(lèi)名 (參數(shù)總表 ):基類(lèi)名 1(參數(shù)表 1),基類(lèi)名2(參數(shù)表 2),…, 基類(lèi)名 n(參數(shù)表 n) { // 派生類(lèi)新增成員的初始化語(yǔ)句 } 目錄 退出 第 75頁(yè) 共 141頁(yè) 多繼承的構(gòu)造函數(shù)和析構(gòu)函數(shù) 總參數(shù)表必須包含完成所有基類(lèi)初始化需要的參數(shù),各基類(lèi)構(gòu)造函數(shù)之間以逗號(hào)分隔 。 目錄 退出 第 76頁(yè) 共 141頁(yè) 多繼承方式下構(gòu)造函數(shù)的執(zhí)行順序 先執(zhí)行所有基類(lèi)的構(gòu)造函數(shù) 再執(zhí)行對(duì)象成員的構(gòu)造函數(shù) 最后執(zhí)行派生類(lèi)的構(gòu)造函數(shù) 內(nèi)嵌對(duì)象成員的構(gòu)造函數(shù)執(zhí)行順序與對(duì)象在派生類(lèi)中聲明的順序一致,而處于同一層次的各基類(lèi)構(gòu)造函數(shù)的執(zhí)行順序取決于 定義派生類(lèi)時(shí)所指定的基類(lèi)順序 ,而與派生類(lèi)構(gòu)造函數(shù)中所定義的成員初始化列表順序沒(méi)有關(guān)系。 目錄 退出 第 77頁(yè) 共 141頁(yè) 多繼承方式下析構(gòu)函數(shù)的執(zhí)行順序 析構(gòu)函數(shù)的執(zhí)行順序與多繼承方式下構(gòu)造函數(shù)的執(zhí)行順序完全相反 , 首先對(duì)派生類(lèi)新增的數(shù)據(jù)成員進(jìn)行清理 , 再對(duì)派生類(lèi)對(duì)象成員進(jìn)行清理 , 最后才對(duì)基類(lèi)繼承來(lái)的成員進(jìn)行清理 。 目錄 退出 第 78頁(yè) 共 141頁(yè) 例 多繼承中的構(gòu)造函數(shù)的定義方法 include class Base1{ public: Base1(int sx) {x=sx。} int getx( ){return x。} private: int x。 }。 目錄 退出 第 79頁(yè) 共 141頁(yè) 例 多繼承中的構(gòu)造函數(shù)的定義方法 class Base2{ public: Base2(int sy){y=sy。} int gety( ){return y。} private: int y。 }。 目錄 退出 第 80頁(yè) 共 141頁(yè) 例 多繼承中的構(gòu)造函數(shù)的定義方法 class Derived:public Base1,private Base2{ public: Derived(int sx,int sy,int sz):Base1(sx),Base2(sy) {z=sz。} int getz( ){return z。} int gety( ){return Base2::gety( )。} private: int z。 }。 目錄 退出 第 81頁(yè) 共 141頁(yè) 例 多繼承中的構(gòu)造函數(shù)的定義方法 void main( ) { Derived obj(1,3,5)。 int ma=( )。 coutx=maendl。 int mb=( )。 couty=mbendl。 int mc=( )。 coutz=mcendl。 } 返回 目錄 退出 第 82頁(yè) 共 141頁(yè) 虛基類(lèi) 一般情況下,在派生類(lèi)中對(duì)基類(lèi)成員的訪(fǎng)問(wèn)應(yīng)該是惟一的。但在多繼承方式下,可能造成對(duì)基類(lèi)中某個(gè)成員的訪(fǎng)問(wèn)出現(xiàn)不惟一的情況,這種現(xiàn)象稱(chēng)為對(duì)基類(lèi)成員訪(fǎng)問(wèn)的二義性問(wèn)題。 具體而言,二義性指在多繼承方式下,派生類(lèi)的某些數(shù)據(jù)成員可能出現(xiàn)多個(gè)副本,或成員函數(shù)出現(xiàn)多個(gè)映射地址等現(xiàn)象。 目錄 退出 第 83頁(yè) 共 141頁(yè) 二義性的解決方法 ( 1)使用作用域運(yùn)算符“ ::”通過(guò)直接基類(lèi)名進(jìn)行限定,這種解決方法的特點(diǎn)是派生類(lèi)中的同名成員依然具有多個(gè)副本,但通過(guò)基類(lèi)名標(biāo)識(shí)。 ( 2)通過(guò)定義虛基類(lèi)來(lái)解決,在多繼承方式下,派生類(lèi)的同名數(shù)據(jù)成員在內(nèi)存中出現(xiàn)多個(gè)副本、同名成員函數(shù)出現(xiàn)多個(gè)地址映射,如果將直接基類(lèi)的共同基類(lèi)設(shè)置為虛基類(lèi),那么從不同的路徑繼承過(guò)來(lái)的同名成員在內(nèi)存中只擁有一個(gè)副本,從而解決了同名成員的二義性問(wèn)題。 目錄 退出 第 84頁(yè) 共 141頁(yè) 例 虛基類(lèi)的引例 include class base { public: base( ){ a=5。 coutbase a=aendl。 } protected: int a。 }。 base protected: int a。 目錄 退出 第 85頁(yè) 共 141頁(yè) 例 虛基類(lèi)的引例 class base1:public base{ public: base1( ){ a=a+10
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1