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

正文內(nèi)容

【精品】面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言c84(編輯修改稿)

2025-06-05 06:55 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 class Derived:public Base{ public: Derived(){ cout“Derived created\n”。 } }。 void main() { Derived d。 } 6/6/2020 30 請(qǐng)分析 class base{ int x。 public: base(int i):x(i){ coutbase\n。 } }。 class derived:public base{ int a。 public: derived(int i):a(i*4),base(a){ coutderived\n。 } }。 ? 此時(shí)基類(lèi)的數(shù)據(jù)成員 x的值為多少? 6/6/2020 31 多繼承派生類(lèi) ? 派生類(lèi)有多個(gè)直接基類(lèi) , 這叫多繼承 。 Quadrangle Diamond Square Rectangle Quadrangle 6/6/2020 32 ? 定義多繼承派生類(lèi)的語(yǔ)法格式: class 派生類(lèi)名 : 繼承方式 1 基類(lèi)名 1, 繼承方式 2 基類(lèi)名 2, …… { ……//派生類(lèi)新添加的成員 }。 6/6/2020 33 ? 多繼承派生類(lèi)的構(gòu)造函數(shù): 派生類(lèi)名 (參數(shù)表 ):基類(lèi)名 1(參數(shù)表 1), 基類(lèi)名 2(參數(shù)表 2), 對(duì)象成員 (參數(shù)表 3), … { //派生類(lèi)構(gòu)造函數(shù) } ? 執(zhí)行順序:先執(zhí)行所有基類(lèi)的構(gòu)造函數(shù)( 按這些基類(lèi)被繼承時(shí)聲明順序依次執(zhí)行基類(lèi) 基類(lèi) 2的構(gòu)造函數(shù) ) , 再執(zhí)行對(duì)象成員所屬類(lèi)的構(gòu)造函數(shù) , 最后執(zhí)行派生類(lèi)本身的構(gòu)造函數(shù) 。 6/6/2020 34 多繼承中的二義性問(wèn)題 ? 在多繼承中 , 一個(gè)類(lèi)不可以重復(fù)成為另一個(gè)類(lèi)的直接基類(lèi) , 但可以多次成為間接基類(lèi) 。 此時(shí)派生類(lèi)訪問(wèn)基類(lèi)成員時(shí)可能出現(xiàn)二義性 。 下面是出現(xiàn)二義性的兩種情況: – 訪問(wèn)不同基類(lèi)的具有相同名字成員時(shí)可能出現(xiàn)二義性 。 – 訪問(wèn)共同基類(lèi)的成員時(shí)可能出現(xiàn)二義性 。 6/6/2020 35 訪問(wèn)不同基類(lèi)同名成員時(shí)的二義性 class C: public A, public B{ public: void g()。 void h()。 }。 Void main() { C C1。 ()。 //出現(xiàn)二義性 =9。 //出現(xiàn)二義性 } class A { public: int value。 void f()。 }。 class B { public: int value。 void f()。 void g()。 }。 ? 訪問(wèn)的 f()或 value是類(lèi) A中的還是類(lèi) B中的呢?解決辦法是用類(lèi)名對(duì)成員加以限定,例如: ::f()。 或者 ::f()。 ::value 或者 ::value 6/6/2020 36 訪問(wèn)共同基類(lèi)成員時(shí)的二義性 class A{ public: int a。 void g( )。 }。 class B1: public A{ int b1。 }。 class B2: public A{ int b2。 }。 class C: public B1, public B2{ int c。 public: int f()。 }。 void main(){ C Cobj。 =8。 //有二義性 ::a=9。 //有二義性 ( )。 //有二義性 } 在“ ?!敝惺菍?duì) B1 繼承的基類(lèi) A 的成員 a,還是對(duì) B2繼承基類(lèi) A 的成員 a 進(jìn)行訪問(wèn)呢?故有二義性。消除二義性的方法可改寫(xiě)為: ::a?;? ::a。 6/6/2020 37 以上 4個(gè)類(lèi)的關(guān)系如下圖所示: A(a) B1(b1) A(a) B2(b2) C(f(),c) 從圖中看出,類(lèi) A 是派生類(lèi) C 兩條繼承路徑上的一個(gè) 公共基類(lèi) ,因此這個(gè)公共基類(lèi)會(huì)在派生類(lèi)對(duì)象中產(chǎn)生 兩個(gè)基類(lèi)子對(duì)象 。雖然可以通過(guò)類(lèi)限定符的方式避免二義性,但問(wèn)題的關(guān)鍵在于我們不需要在派生類(lèi)對(duì)象中存在多個(gè)基類(lèi)對(duì)象的拷貝!如果要使這個(gè)公共基類(lèi)在派生類(lèi)中只產(chǎn)生一個(gè)基類(lèi)子對(duì)象,則需要將這個(gè)基類(lèi)設(shè)置為 虛基類(lèi) 。 6/6/2020 38 虛基類(lèi) ? 引進(jìn)虛基類(lèi)的目的是為了解決二義性問(wèn)題 , 使公共基類(lèi)在其派生類(lèi)對(duì)象中只產(chǎn)生一個(gè)基類(lèi)子對(duì)象 。 ? 虛基類(lèi)說(shuō)明格式如下: virtual 繼承方式 基類(lèi)名 就是在 “ 繼承方式 ” 前面用關(guān)鍵字 virtual來(lái)說(shuō)明基類(lèi) 。 6/6/2020 39 例子:虛基類(lèi)的使用 class A{ public: int a。 void g( )。 }。 class B1: virtural public A{ int b1。 }。 class B2: virtural public A{ int b2。 }。 class C: public B1, public B2{ int c。 public: int f()。 }。 void main(){ C Cobj。 =8。 //或 ::a=9。 ( )。 } 6/6/2020 40 A(g(),a) B1(b1) B2(b2) C(f(),c) ? 和單繼承中的公有派生類(lèi)一樣 , 可以進(jìn)行如下賦值操作: A amp。ref=Cobj。 A *p=amp。Cobj。 A Aobj=Cobj。 ? 例中 , 類(lèi) A, 類(lèi) B1, 類(lèi) B2 和類(lèi) C之間的關(guān)系如下圖所示 。 圖中可見(jiàn) , 虛基類(lèi)子對(duì)象被合并成一個(gè)子對(duì)象 , 這種 “ 合并 ” 作用 , 使得可能出現(xiàn)的二義性被消除 。 6/6/2020 41 請(qǐng)比較下面兩種
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1