資源描述:
《C課件繼承多繼承》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、繼承與派生繼承與派生1繼承概述2基類和派生類3派生類的構(gòu)造與析構(gòu)4多繼承多繼承舉例兼職技術(shù)人員管理人員銷售人員銷售經(jīng)理雇員多繼承一個(gè)類有多個(gè)直接基類的繼承關(guān)系稱為多繼承多繼承聲明語法class派生類名:訪問控制基類名1,…,訪問控制基類名n{數(shù)據(jù)成員和成員函數(shù)聲明};多繼承classC:publicA,publicBclassAclassB類C可以根據(jù)訪問控制同時(shí)繼承類A和類B的成員,并添加自己的成員多繼承的簡單應(yīng)用classBase1{public:Base1(intx){value=x;}intgetData()const{returnvalue;}protected:intva
2、lue;};classBase2{public:Base2(charc){letter=c;}chargetData()const{returnletter;}protected:charletter;};7.5.1多繼承的派生類構(gòu)造和訪問多繼承的簡單應(yīng)用classDerived:publicBase1,publicBase2{public:Derived(int,char,double);doublegetReal()const;private:doublereal;};voidmain(){Base1b1(10);Base2b2('k');Derivedd(5,'A',2.5);
3、}'K'2.5'A'510valueletterrealBasc1b1Basc2b2Derivedd多個(gè)基類的派生類構(gòu)造函數(shù)用初始化列表調(diào)用基類構(gòu)造函數(shù),執(zhí)行順序與單繼承構(gòu)造函數(shù)情況類似。多個(gè)直接基類構(gòu)造函數(shù)執(zhí)行順序取決于定義派生類時(shí)指定的各個(gè)繼承基類的順序。按基類在被繼承時(shí)所聲明的次序從左到右依次調(diào)用。多繼承的派生類構(gòu)造一個(gè)派生類對象擁有多個(gè)直接或間接基類的成員。不同名成員訪問不會(huì)出現(xiàn)二義性。如果不同的基類有同名成員,派生類對象訪問時(shí)應(yīng)該加以識別。多繼承的派生類訪問由于多繼承情況下,可能造成對基類中某個(gè)成員的訪問出現(xiàn)了不惟一的情況,則稱為對基類成員訪問的二義性問題。多重繼承圖示Af
4、()CA::f();B::f();B::g();g();h();Bf();g();二義性和支配原則classC:publicA,publicB{?public:voidg();voidh();};若有Cobj;則對函數(shù)f()的訪問是二義的:obj.f();classA{public:voidf();};classB{public:voidf();voidg();};二義性和支配原則1.同名成員的二義性不同基類中有同名函數(shù),使用基類名可避免這種二義:基類與派生類同名函數(shù)這種用基類名來控制成員訪問的規(guī)則稱為支配原則。voidC::f(){A::f();//B::f();}obj.A::f
5、();obj.B::f();obj.g();//隱含用C的g()obj.B::g();//用B的g()二義性和支配原則2.同一基類被多次繼承產(chǎn)生的二義性一個(gè)類不能從同一類直接繼承二次或更多次。classC:publicB1,publicB2classB1classB2classBclassB{public:intb;};classB1:publicB{intb1;};classB2:publicB{intb2;};classC:publicB1,publicB2{public:intf();private:intd;};有:Cobj;obj.b;//errorojb.B::b;//e
6、rror,從哪里繼承的?classC{f(),d}classB1{b1}classB2{b2}classB{bb}classB{bb}obj.B1::bobj.B2::b二義性和支配原則例如:classB{public:intb;};classB1:publicB{intb1;};classB2:publicB{intb2;};classC:publicB1,publicB2{public:intf();private:intd;};classC{f(),d}classB1{b1}classB2{b2}classBclassBc.bc.b1c.bc.b2c.dBBB1B2
7、C多重派生類C的對象的存儲(chǔ)結(jié)構(gòu)示意建立C類的對象時(shí),B的構(gòu)造函數(shù)將被調(diào)用兩次:分別由B1調(diào)和B2調(diào)用,以初始化C類的對象中所包含的兩個(gè)B類的子對象二義性和支配原則虛基類如果在多條繼承路經(jīng)上有一個(gè)公共的基類,那么在繼承路經(jīng)的某處匯合點(diǎn),這個(gè)公共基類就會(huì)在派生類的對象中產(chǎn)生多個(gè)基類子對象要使這個(gè)公共基類在派生類中只產(chǎn)生一個(gè)子對象,必須將這個(gè)基類聲明為虛基類。虛基類聲明使用關(guān)鍵字virtual例如:classB{public:intb;};classB1:vir