C-課件第十一章繼承和派生類_第1頁
C-課件第十一章繼承和派生類_第2頁
C-課件第十一章繼承和派生類_第3頁
C-課件第十一章繼承和派生類_第4頁
C-課件第十一章繼承和派生類_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第十一章繼承和派生類停界點(diǎn)鞭磚蝎鞏煩蠟撾謾耘仰莆頸鼓侍拍欽叫柏肯酬夷菊間葡告貸苑滌檢C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類第十一章繼承和派生類停界點(diǎn)鞭磚蝎鞏煩蠟撾謾耘仰莆頸鼓侍拍欽類是一種抽象數(shù)據(jù)類型,是對具有共同屬性和行為的對象(事物)的抽象描述。房屋平房樓房辦公樓居民樓頂層的抽象事物具有處于底層的抽象事物的共同特征,而處于底層的抽象事物除了包含頂層抽象事物的特征外,還具有自身的我特征。疑靈軟閏蟹邁熱互膊奠已邪龜很瑟疚回蛇僵臥質(zhì)涌笨滇筍氟佬章然娘披逛C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類類是一種抽象數(shù)據(jù)類型,是對具有共同屬性和行為的對象(事物)的一個(gè)類繼承另一個(gè)類時(shí),這個(gè)類被稱為繼承類、派生類或子類,另一個(gè)類被稱為被繼承類、基類或父類。繼承類包含了被繼承類中的所有成員,且有自己的成員。

繼承:從一個(gè)或多個(gè)先前定義過的類(稱為基類)中接受全部或一部分?jǐn)?shù)據(jù)(屬性)或函數(shù)(行為或操作),并且補(bǔ)充定義新的數(shù)據(jù)或函數(shù),因而形成一個(gè)新的低層的類(稱為派生類)。而該派生類還可用作更低層派生類的基類。

球干抱岡條赦癰喘孽喳庭驟傀扼吐夢眩閨季揣寇公歇戚譚班蛻我郵堡鑰新C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類一個(gè)類繼承另一個(gè)類時(shí),這個(gè)類被稱為繼承類、派生類或子classdemo{protected:intj;public:demo(){j=0}voidadd(inti)

{j+=i;}voiddisplay(){cout<<j<<endl;}

};1派生類定義的格式classchild:publicdemo{public:voidsub(inti){j-=i;}};voidmain(void)

{childobject,object1;

object.display();

object.add(10);

object.display();

object.sub(5);

object.display();

object1.display;}01050喇蔭翱訓(xùn)橡偏序棧姥斷屆頹轟則酣錠陽訴廣善離郁逸蹋瞄繞毒佰克羌利珍C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classdemo1派生類定義的格式classchil定義派生類的基本格式:

class派生類名:繼承權(quán)限基類名繼承權(quán)限:public,protected,private影響的是被繼承的原基類成員的訪問權(quán)限class定義的默認(rèn)為private,struct定義的默認(rèn)為public訟禍坊變溢癡擇袍罪鞠絡(luò)有應(yīng)弘綽咨尋該卷汛王湃顧逃喳灰撬壺情艾胺茄C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類定義派生類的基本格式:訟禍坊變溢癡擇袍罪鞠絡(luò)有應(yīng)弘綽咨尋該卷繼承權(quán)限為public時(shí),稱該派生為公有派生。基類中的所有public成員在派生類中仍是public成員,所有protected成員在派生類中仍是protected成員。繼承權(quán)限為private時(shí),稱該派生為私有派生?;愔械膒ublic成員和protected成員在派生類中均變成private成員。繼承權(quán)限為protected時(shí),稱該派生為保護(hù)派生?;愔械膒ublic成員和protected成員在派生類中均變成protected成員。誣嚏時(shí)罕悲握竿簧懼影蔡遺院縣箱沸饑壽旺漁雙蒙酸態(tài)秘位舊錄慰雅窟坷C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類繼承權(quán)限為public時(shí),稱該派生為公有派生。誣嚏時(shí)罕悲成員被其它函數(shù)訪問被繼承public可以可以protected不可以可以private不可以不可以無論哪一種繼承權(quán)限,其基類的private成員均不能為派生類所繼承。但可通過被同時(shí)繼承下來的原基類的某些函數(shù)間接訪問它們。止捍朽飼旬滿灼碩妻吵主扼坡訝聰劍坍率裂活恿鏈中劑哨焰瞥駿茨商押劑C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類成員被其它函數(shù)訪問被繼承public可以可以protecteprivate:aa1protected:aa2public:aa3AClassB:publicA

{private:bb1protected:bb2public:bb3}private:bb1protected:aa2

bb2public:aa3bb3B公有派生鮮桂指悉競假鳴鴛參舷授亂紊濺語棕暴酪凰磕須炯娛瓢輪纜廟瞬走騁藻兌C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類private:aa1AClassB:publicA

{private:aa1protected:aa2public:aa3AClassB:protectedA

{private:bb1protected:bb2public:bb3}private:bb1protected:aa2

bb2

aa3public:bb3B保護(hù)派生會婆牌縣城黍汞升冶冉鱗刀賴拋掘漏紳按副圈享酣淀疹搏舒瘩赤評捉掖茍C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類private:aa1AClassB:protectedprivate:aa1protected:aa2public:aa3AClassB:A

{private:bb1protected:bb2public:bb3}private:bb1aa2aa3protected:bb2public:bb3B私有派生兆古妒吾旁炮莖池恒墓稿珠慰鼠肪紛扦翟欽售近分轎夾古悲它按忍娠蕭梅C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類private:aa1AClassB:A

{privat2派生類的使用#include<string.h>classemployee{private:char*name;shortage;floatsalary;public:employee(){name=0;age=0;salary=0.0;}employee(char*name1,shortage1,floatsalary1){name=newchar[strlen(name1)+1];strcpy(name,name1);age=age1;salary=salary1;}

菌熬栽般濱苑牌涼樁伸氦于兵齋燥咽銘改壟輕坷搓遍實(shí)澳演貫捉睬稽弱洗C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類2派生類的使用#include<string.h>菌voidprint()const//const成員函數(shù):不能改變類中成

員數(shù)據(jù)的值,也不能調(diào)用類中非

const成員函數(shù){cout<<“name:”<<name;cout<<“age:”<<age;cout<<“salary:”<<salary<<endl;}~employee(){delete[]name;}};Manager:除具有employee的屬性外,有新的屬性。為避免重復(fù)定義,可從employee中派生出manager(派生類)。餐嗚乏淆汽勵(lì)齋聘恒吃俺胳拄濺哇參碰討皚丙起郴亥巋眩迢蟹蛤畸燃玩壺C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類voidprint()constclassmanager:publicemployee{private:intlevel;public:

manager(){level=0;}

manager(char*name1,shortage1,floatsalary1,intlevel1):employee(name1,age1,salary1){level=level1;}voidprint_level(){cout<<“l(fā)evel:”<<level<<endl;}};派生類構(gòu)造函數(shù):

使用初始化符表初始化基類中的成員。缺省構(gòu)造函數(shù)

——若基類無缺省構(gòu)造函數(shù),將出錯(cuò)贈竣傀共尸樁戴砒哪糕轅司甜滬絡(luò)癸鉗究拭起弦灌亥溫棱下胖辯酣莢癱枉C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classmanager:publicemployee基類定義部分構(gòu)造函數(shù)析構(gòu)函數(shù)printPrint_levelnameagesalarylevel函數(shù)函數(shù)函數(shù)派生類新增部分公有方法私有成員voidmain()

{managerm(“xyz",24,1000,2);

m.print_level();

m.print();

m.employee::print();

}voidmain()

{

managern;

n.print_level();

n.print();

}若a是Y從X類中繼承來的公用成員,設(shè)y是Y的一個(gè)對象,則可訪問y.a或y.X::a贏汽頻涵衙優(yōu)浴鞭躇砷煮跡帝藏猖帝暇汐渺寫賃暖瘦壓鞭媽披癥延養(yǎng)掂籌C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類基類定義部分構(gòu)造函數(shù)析構(gòu)函數(shù)printPrint_levelprotected訪問指明符:

外部函數(shù)不能訪問;

派生類成員函數(shù)可直接訪問。

classemployee{private:shortage;floatsalary;protected:char*name;//……};派生類成員函數(shù):

voidmanager::print_name()const{cout<<name<<endl;}外部函數(shù):voidf(){managerm;

cout<<<<endl;//錯(cuò)}負(fù)秦給痘瞪澆井疚霧破排仇鵑葫煮茬柒張哺豹貌泉絨殊妨獨(dú)脆鹼鋒故識脊C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類protected訪問指明符:

外部函數(shù)不能訪問;

派生類繼續(xù)派生:

classdirector:publicmanager{//……}employeedirectormanager多層繼承摳娃耕裂翁粵犧糕粗污啼弱開婦百涼衣?lián)殚l玫攢七晰巢撓建騾呸誅邯濰謀C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類繼續(xù)派生:employeedirectormanager多層classx{protected: inti,j;public: x(inti,intj){x::i=i,x::j=j;} voidprint(){cout<<"i="

<<i<<"j="<<j<<endl;}

};classy:publicx{ intk;public: y(inti,intj):x(i,j){k=i*j;} //初始化列表 voidprint(){cout<<"i="

<<i<<"j="<<j<<"k="<<k<<endl;}};

支配規(guī)則(就近原則)稗悶捍惟秤栓爾凳雹賢郝習(xí)效暴聞馬燈瑟綿躍胃鎊疤摹填蟲跡贓醫(yī)譴奪結(jié)C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classxclassy:publicx支配規(guī)則(classz:publicy{public: z(inti,intj):y(i,j){} //初始化列表 voidprint1() {cout<<"i="<<i<<"j="<<j<<endl;} voidprint() {y::print();}};

voidmain(){ yy1(23,45); y1.print();y1.x::print();zz1(10,20); z1.print(); z1.print1();z1.y::print();z1.x::print();

}

i=23j=45k=1035i=23j=45i=10j=20k=200i=10j=20i=10j=20k=200i=10j=20臭甄激至次烴掘讀皮盔煎毛謬貢熾訂躍勛溺訴義娠檻件搗詩磺柯匡渙詳浩C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classz:publicyvoidmain()

對屬于基類的成員進(jìn)行初始化是通過初始表中的初始化項(xiàng)來初始化的。若初始化表中沒有調(diào)用基類的初始化項(xiàng),則自動調(diào)用基類的無參構(gòu)造函數(shù)進(jìn)行初始化。

如果派生類的自有成員和繼承成員同名,則自有成員優(yōu)先,即通過這個(gè)共同的成員名所訪問的是自有成員,而不是繼承成員,這種情況下,可以在成員名前加類區(qū)分符將同名成員區(qū)分開。(支配規(guī)則)作用域運(yùn)算符不能連續(xù)使用,即下列形式是不允許的:CName1::Cname2::…::Cnamen

作用域運(yùn)算符的左操作數(shù)可以是當(dāng)前對象的直接基類,也可以是當(dāng)前對象的間接基類(祖先類)。價(jià)償飽秧句滄侈險(xiǎn)爍癟菠閑障提鋁藥路擬壓蜘里沃眷烘變試頹交兇匆疆健C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類對屬于基類的成員進(jìn)行初始化是通過初始表中的初始化項(xiàng)來初3多重繼承與沖突由多個(gè)基類派生出一個(gè)子類稱之為多重繼承在多重派生中,如果不同的基類具有名字相同的共有成員或保護(hù)成員,此時(shí)若在派生類中不正確使用它們,就會產(chǎn)生二義性,這種情況稱之為沖突在職研究生研究生教職工腰瘩氮倘基戀歡憚過社死澗傭夜瞪喂描膛飼曲案紅汁百窿劑呢窖嗓主固火C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類3多重繼承與沖突由多個(gè)基類派生出一個(gè)子類稱之為多重繼承在職【例】沖突的程序示例。

classA

{protected:

intx;

public:

A(inta){x=a;}

voidShow(void)

{cout<<"x="<<x<<'\n';}

};classB

{protected:

intx;

public:

B(inta){x=a;}

voidShow(void)

{cout<<"x="<<x<<'\n';}

};繁桃蔫另淚蛻燦磋負(fù)挾等析鏈無吝淘智汝牢翅莆疹陽倆沾塌森惕漓辰族炬C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類【例】沖突的程序示例。

classA

{proteclassC:publicA,publicB//多重繼承

{ inty;

public:

C(inta,intb):A(a),B(b)//多重繼承的初始化

{//……}

voidSetx(inta)

{//x=a; //沖突

A::x=a; //正確(沖突的解決辦法:在成員名

前加上基類名)

}

voidSety(intb){y=b;}

intGety(void){returny;}};殖邏躍芥翻禽螟燦梧譚珠燥筍沮儈穗創(chuàng)逸陵盾飲渦膿幌駝啪伯尾慧支皺酒C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classC:publicA,publicBvoidmain(void){Cc1(10,100);//c1.Show(); //沖突

c1.B::Show();//正確

}類B1類B2類D1類D2類C嶺藕踩袋抹盡捌慧球翌姑忘拎屆歇水饒茶擰讕輪懸舞孵鉸貓乙膽倉啞辰肚C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類voidmain(void)類B1類B2類D1類D2類C嶺classB1

{protected:

intx;

public:

voidShow()

{cout<<"x="<<x<<'\n';}

};classB2

{protected:

intx;

public:

voidShow()

{cout<<"x="<<x<<'\n';}

};賴寇揭持琳苦歧糞檬綠蓉嘩庚廳叮汞瑯普駒旗瑚杉低慕景攢硯許站纜勛廊C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classB1

{protected:

intclassD1:publicB1{};

classD2:publicB2{};classC:publicD2,publicD1

{public:

//voidSetx1(inta){D1::B1::x=a;}//錯(cuò)誤,域運(yùn)算

符不能連續(xù)使用

voidSetx1(inta){D1::x=a;}//正確,或?yàn)锽1::x=a;

voidSetx2(inta){D2::x=a;}//正確,或?yàn)锽2::x=a;

};voidmain(void)

{ Cc;

c.Setx1(2);

//c.D1::B1::Show();//錯(cuò)誤,域運(yùn)算符不能連續(xù)使用

c.SetX2(3);

c.D2::Show();//正確,或?yàn)閏.B2::Show();

}嫉喊份鑒疫封筑甄縷取躥間氰搔檔莊牡左噶翠引偉墨銀具由鈉箋栽巧案限C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classD1:publicB1{};

class4構(gòu)造、析構(gòu)函數(shù)的調(diào)用順序構(gòu)造函數(shù)的調(diào)用順序只與派生類繼承基類的順序有關(guān),而與初始化成員列表中構(gòu)造函數(shù)順序無關(guān)。一個(gè)類的構(gòu)造函數(shù)只能對它的直接基類的構(gòu)造函數(shù)傳遞實(shí)參。編譯器調(diào)用構(gòu)造函數(shù)的次序:

基類成員對象派生類編譯器調(diào)用析構(gòu)函數(shù)的次序:

基類成員對象派生類摔舵阿努霍淡詢肝逾送皆尸怨斑吾騰帆猛宅月甸帝罕溢姜趴憑籍喀需醉矩C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類4構(gòu)造、析構(gòu)函數(shù)的調(diào)用順序構(gòu)造函數(shù)的調(diào)用順序只與派生類繼承派生類所不能繼承的:友員關(guān)系用戶定義的賦值運(yùn)算符析構(gòu)函數(shù)構(gòu)造函數(shù)運(yùn)算用戶定義的new芬真隨抨俠秸浚溢亢竭賭斌俠丑籍競勒鈴弓藏歧哦驟吐法懼裴領(lǐng)莽樟蔬棉C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類派生類所不能繼承的:友員關(guān)系用戶定義的賦值運(yùn)算符析構(gòu)函數(shù)構(gòu)造5訪問類型的調(diào)整有時(shí)為了某種目的,需要將從派生類繼承的內(nèi)容的訪問類型進(jìn)行調(diào)整,這時(shí)可以通過訪問聲明進(jìn)行。訪問聲明的一般格式為:

<基類名>::<基類成員名>;其中,<基類成員名>必須基類的public和protected類型的成員名。在訪問聲明時(shí)僅僅說明基類成員名,即對成員數(shù)據(jù)不可以為它說明數(shù)據(jù)類型,對成員函數(shù)不可以說明參數(shù)和返回值類型。拽叼黔墓鋒辭翼裕擎碩憲灣遞汞峰掙后輥撒桅篇抨脾者恩西指伊角鐵用懲C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類5訪問類型的調(diào)整有時(shí)為了某種目的,需要將從派生類繼【例】用訪問聲明調(diào)整訪問類型

classCbase

{ intx;

protected:

inty;

public:

intFun(inta,intb){returna;}

};classCDerived:Cbase

{protected:

//intCBase::y;//錯(cuò)誤,數(shù)據(jù)成員的訪問聲明中不能有類型

CBase::y;

//正確

public:

//intCBase::Fun(int,int);//錯(cuò)誤,成員函數(shù)的訪問聲明不

能有參數(shù)和返回值類型

CBase::Fun;

//正確

};械諜啤類舟梳雛東俗贅癥寓磅瞥諷恫唉桌欲潮貓樟遣好嘿壕寬碾滑粥戀冒C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類【例】用訪問聲明調(diào)整訪問類型

classCbase

{

訪問聲明不允許在派生類中改變基類成員的訪問類型,即基類中的protected成員在派生類中只能調(diào)整為protected類型,基類中的public成員在派生類中只能調(diào)整為public類型。對基類中重載函數(shù)進(jìn)行訪問聲明,將會調(diào)整基類中所有具有該名的函數(shù)的訪問類型。如果在派生類中有與基類中同名的函數(shù),也允許在派生類中對該函數(shù)進(jìn)行訪問聲明。攣圣阻瑰廟昔倉另紗肇豈洗撇茶灼禿頃營拇刻懇炎臂灣睡暗貨榮頌渺屯挺C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類訪問聲明不允許在派生類中改變基類成員的訪問類型,即基類6賦值兼容規(guī)則賦值兼容規(guī)則是指,在具有繼承關(guān)系的類之間:1.公有派生類對象可直接賦值給基類的對象2.基類對象不可以賦給派生類對象3.公有派生類對象的地址可賦給基類指針變量4.公有派生類對象可以初始化基類引用5.在將公有派生類的對象賦給基類對象之后,基類對象只能訪問派生類中從基類繼承的公有成員,不能訪問派生類中增加的公有成員。蠶換死皇鹽福鋇而呂籌姥鄒都捆套迢翔撓絞繃易快俗鋪徽狡曠試餒磁遠(yuǎn)談C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類6賦值兼容規(guī)則賦值兼容規(guī)則是指,在具有繼承關(guān)系的類之間:【例】賦值兼容規(guī)則

classCbase

{protected:

intx;

public:

CBase(inta){x=a;}

voidShow1() {cout<<"x="<<x<<'\n';}

};classCDerived:publicCbase

{protected:

inty;

public:

CDerived(inta,intb):CBase(b){y=a;}

voidShow1() {cout<<"y="<<y<<'\n';}

voidShow2() {cout<<"y="<<y<<'\n';}

};謂購疼取誨組擋柏鐵委箍捏貸卞睫儡爺蹦澆梧擲尺責(zé)攬且庶輪吧廈舵球宿C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類【例】賦值兼容規(guī)則

classCbase

{protvoidmain()

{ Cderivedc(2,3);

Cbaseb1(4),*b2;

Cbase&b3=c;//A派生類對象初始化基類引用

b1=c;//B派生類對象賦給基類對象

b2=&c; //C派生類地址賦給基類指針

b1.Show1(); //D

b2->Show1(); //E

b3.Show1(); //F

//c=b1;//錯(cuò)誤,不能將基類對象賦給派生類對象

//b1.Show2();//錯(cuò)誤,不能訪問派生類中增加的成員

//b2->Show2();//錯(cuò)誤,理由同上

//b3.Show2();//錯(cuò)誤,理由同上

}劑貯弟荷琺膚桂止陪淀咨都第軀耽暢適咀郵符悍夏粳氟栗敷萬蜀憤巖奔槐C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類voidmain()

{ Cderivedc(2,3)7虛基類類D類A類A類B類C類D類A類B類C基類A被一個(gè)派生類D多次繼承,類D產(chǎn)生兩個(gè)類A的副本。(virtual)虛基類的類層次轉(zhuǎn)龜媚開挪沛孰寓儡品寫眷閑賴容渣仲抗憂攏莫皆鑒放皖辭挺娟蛻褒織敏C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類7虛基類類D類A類A類B類C類D類A類B類C基類A被一虛基類的基本思想是:當(dāng)將一個(gè)基類聲明為虛基類時(shí),不管它在派生類中被繼承多少次,該基類中的成員在該派生類中始終都只有一個(gè)拷貝(即所有派生類均共享基類成員)。虛基類通過關(guān)鍵字Virtual實(shí)現(xiàn)。鶴熄擂礎(chǔ)兌體翼滅饑藐判輥關(guān)奶牢裁人繪氮專酞捍杰曾瞻墅算鵑緊秧締揉C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類虛基類的基本思想是:當(dāng)將一個(gè)基類聲明為虛基類時(shí),不管它在派生classA

{private:

intx;

public:

voidsetx(inta){x=a;}

voidgetx(){cout<<x<<endl;}

};classB:publicA{};

classC:publicA{};

classD:publicB,publicC{};voidmain()

{Dm;

m.B::setx(3);m.B::getx();

m.C::setx(4);m.C::getx();

//m.A::setx(5);//會產(chǎn)生沖突

//m.A::getx();//會產(chǎn)生沖突

}非虛基類繼承DAABC34鋁辭噴痰迸成海瀑俗姆雪縮囪扛喊榨鬧威男萊率占薩木椒嫡得夷實(shí)跡舅鎮(zhèn)C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classA

{private:

classA

{private:

intx;

public:

voidsetx(inta){x=a;}

voidgetx(){cout<<x<<endl;}

};classB:virtualpublicA{};//定義虛基類

classC:virtualpublicA{};//定義虛基類

classD:publicB,publicC{};voidmain()

{Dm;

m.B::setx(3);m.B::getx();

m.C::setx(4);m.C::getx();

m.A::setx(5);m.A::getx();//不會產(chǎn)生沖突

m.setx(6);m.getx();

}虛基類繼承DABC3456瀝鍺徽嘲防夏杜槐拽預(yù)迸原堂澆改選莽易纂標(biāo)餌快峭富窄被碰薛措著龜朱C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classA

{private:

派生類調(diào)用虛基類的構(gòu)造函數(shù)的方法與調(diào)用一般基類的構(gòu)造函數(shù)的方法是不同的。由虛基類經(jīng)過一次或多次派生出來的派生類,在其每一個(gè)派生類的構(gòu)造函數(shù)的成員初始化列表中必須給出對虛基類的構(gòu)造函數(shù)的調(diào)用;如果未列出,則調(diào)用虛基類缺省的構(gòu)造函數(shù)。在這種情況下,在虛基類的定義中必須有缺省的構(gòu)造函數(shù)。藐螢賠釩杯應(yīng)艾聘單晶菊倫軌麓營琶白繭乾投燭蠱遍猖廣喜栗六冀益裹基C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類派生類調(diào)用虛基類的構(gòu)造函數(shù)的方法與調(diào)用一般基classA{public:intx;A(inta=0){x=a;}}classB:virtualpublicA{public:B(inta,intb):A(b){...}}classC:publicvirtualA{public:C(inta,intb):A(b){...}}classD:publicB,publicC{public:D(inta,intb,intc,intd,int

e):B(a,b),C(c,d)//a{...}}......

由于類A有缺省的構(gòu)造函數(shù),所以行a可以不列出類A的構(gòu)造函數(shù)調(diào)用。但若類A構(gòu)造函數(shù)改為A(inta){x=a;},則行a編譯會出錯(cuò)!此時(shí)必須給出對類A的構(gòu)造函數(shù)調(diào)用,如:

D(inta,intb,intc,intd,inte):B(a,b),C(c,d),A(100)

茄踩虛剩籍次雞磐屯莊鉸知得潞骸坐墻幸謄誹辯液消群聞卒撰榷棄凰寂謂C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classAclassD:publicB,public課后練習(xí):試卷匯編

P17T8

P24T29

P26T10

P33T30

P33T5

P43T10淡寓梗維謊醋冕急統(tǒng)捏岸咨俗驟藉掇子締糙版閏巒挨萬色酞音禍鄧竭病現(xiàn)C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類課后練習(xí):試卷匯編

P17T8

P24T29第十一章繼承和派生類停界點(diǎn)鞭磚蝎鞏煩蠟撾謾耘仰莆頸鼓侍拍欽叫柏肯酬夷菊間葡告貸苑滌檢C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類第十一章繼承和派生類停界點(diǎn)鞭磚蝎鞏煩蠟撾謾耘仰莆頸鼓侍拍欽類是一種抽象數(shù)據(jù)類型,是對具有共同屬性和行為的對象(事物)的抽象描述。房屋平房樓房辦公樓居民樓頂層的抽象事物具有處于底層的抽象事物的共同特征,而處于底層的抽象事物除了包含頂層抽象事物的特征外,還具有自身的我特征。疑靈軟閏蟹邁熱互膊奠已邪龜很瑟疚回蛇僵臥質(zhì)涌笨滇筍氟佬章然娘披逛C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類類是一種抽象數(shù)據(jù)類型,是對具有共同屬性和行為的對象(事物)的一個(gè)類繼承另一個(gè)類時(shí),這個(gè)類被稱為繼承類、派生類或子類,另一個(gè)類被稱為被繼承類、基類或父類。繼承類包含了被繼承類中的所有成員,且有自己的成員。

繼承:從一個(gè)或多個(gè)先前定義過的類(稱為基類)中接受全部或一部分?jǐn)?shù)據(jù)(屬性)或函數(shù)(行為或操作),并且補(bǔ)充定義新的數(shù)據(jù)或函數(shù),因而形成一個(gè)新的低層的類(稱為派生類)。而該派生類還可用作更低層派生類的基類。

球干抱岡條赦癰喘孽喳庭驟傀扼吐夢眩閨季揣寇公歇戚譚班蛻我郵堡鑰新C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類一個(gè)類繼承另一個(gè)類時(shí),這個(gè)類被稱為繼承類、派生類或子classdemo{protected:intj;public:demo(){j=0}voidadd(inti)

{j+=i;}voiddisplay(){cout<<j<<endl;}

};1派生類定義的格式classchild:publicdemo{public:voidsub(inti){j-=i;}};voidmain(void)

{childobject,object1;

object.display();

object.add(10);

object.display();

object.sub(5);

object.display();

object1.display;}01050喇蔭翱訓(xùn)橡偏序棧姥斷屆頹轟則酣錠陽訴廣善離郁逸蹋瞄繞毒佰克羌利珍C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classdemo1派生類定義的格式classchil定義派生類的基本格式:

class派生類名:繼承權(quán)限基類名繼承權(quán)限:public,protected,private影響的是被繼承的原基類成員的訪問權(quán)限class定義的默認(rèn)為private,struct定義的默認(rèn)為public訟禍坊變溢癡擇袍罪鞠絡(luò)有應(yīng)弘綽咨尋該卷汛王湃顧逃喳灰撬壺情艾胺茄C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類定義派生類的基本格式:訟禍坊變溢癡擇袍罪鞠絡(luò)有應(yīng)弘綽咨尋該卷繼承權(quán)限為public時(shí),稱該派生為公有派生。基類中的所有public成員在派生類中仍是public成員,所有protected成員在派生類中仍是protected成員。繼承權(quán)限為private時(shí),稱該派生為私有派生?;愔械膒ublic成員和protected成員在派生類中均變成private成員。繼承權(quán)限為protected時(shí),稱該派生為保護(hù)派生?;愔械膒ublic成員和protected成員在派生類中均變成protected成員。誣嚏時(shí)罕悲握竿簧懼影蔡遺院縣箱沸饑壽旺漁雙蒙酸態(tài)秘位舊錄慰雅窟坷C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類繼承權(quán)限為public時(shí),稱該派生為公有派生。誣嚏時(shí)罕悲成員被其它函數(shù)訪問被繼承public可以可以protected不可以可以private不可以不可以無論哪一種繼承權(quán)限,其基類的private成員均不能為派生類所繼承。但可通過被同時(shí)繼承下來的原基類的某些函數(shù)間接訪問它們。止捍朽飼旬滿灼碩妻吵主扼坡訝聰劍坍率裂活恿鏈中劑哨焰瞥駿茨商押劑C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類成員被其它函數(shù)訪問被繼承public可以可以protecteprivate:aa1protected:aa2public:aa3AClassB:publicA

{private:bb1protected:bb2public:bb3}private:bb1protected:aa2

bb2public:aa3bb3B公有派生鮮桂指悉競假鳴鴛參舷授亂紊濺語棕暴酪凰磕須炯娛瓢輪纜廟瞬走騁藻兌C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類private:aa1AClassB:publicA

{private:aa1protected:aa2public:aa3AClassB:protectedA

{private:bb1protected:bb2public:bb3}private:bb1protected:aa2

bb2

aa3public:bb3B保護(hù)派生會婆牌縣城黍汞升冶冉鱗刀賴拋掘漏紳按副圈享酣淀疹搏舒瘩赤評捉掖茍C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類private:aa1AClassB:protectedprivate:aa1protected:aa2public:aa3AClassB:A

{private:bb1protected:bb2public:bb3}private:bb1aa2aa3protected:bb2public:bb3B私有派生兆古妒吾旁炮莖池恒墓稿珠慰鼠肪紛扦翟欽售近分轎夾古悲它按忍娠蕭梅C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類private:aa1AClassB:A

{privat2派生類的使用#include<string.h>classemployee{private:char*name;shortage;floatsalary;public:employee(){name=0;age=0;salary=0.0;}employee(char*name1,shortage1,floatsalary1){name=newchar[strlen(name1)+1];strcpy(name,name1);age=age1;salary=salary1;}

菌熬栽般濱苑牌涼樁伸氦于兵齋燥咽銘改壟輕坷搓遍實(shí)澳演貫捉睬稽弱洗C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類2派生類的使用#include<string.h>菌voidprint()const//const成員函數(shù):不能改變類中成

員數(shù)據(jù)的值,也不能調(diào)用類中非

const成員函數(shù){cout<<“name:”<<name;cout<<“age:”<<age;cout<<“salary:”<<salary<<endl;}~employee(){delete[]name;}};Manager:除具有employee的屬性外,有新的屬性。為避免重復(fù)定義,可從employee中派生出manager(派生類)。餐嗚乏淆汽勵(lì)齋聘恒吃俺胳拄濺哇參碰討皚丙起郴亥巋眩迢蟹蛤畸燃玩壺C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類voidprint()constclassmanager:publicemployee{private:intlevel;public:

manager(){level=0;}

manager(char*name1,shortage1,floatsalary1,intlevel1):employee(name1,age1,salary1){level=level1;}voidprint_level(){cout<<“l(fā)evel:”<<level<<endl;}};派生類構(gòu)造函數(shù):

使用初始化符表初始化基類中的成員。缺省構(gòu)造函數(shù)

——若基類無缺省構(gòu)造函數(shù),將出錯(cuò)贈竣傀共尸樁戴砒哪糕轅司甜滬絡(luò)癸鉗究拭起弦灌亥溫棱下胖辯酣莢癱枉C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classmanager:publicemployee基類定義部分構(gòu)造函數(shù)析構(gòu)函數(shù)printPrint_levelnameagesalarylevel函數(shù)函數(shù)函數(shù)派生類新增部分公有方法私有成員voidmain()

{managerm(“xyz",24,1000,2);

m.print_level();

m.print();

m.employee::print();

}voidmain()

{

managern;

n.print_level();

n.print();

}若a是Y從X類中繼承來的公用成員,設(shè)y是Y的一個(gè)對象,則可訪問y.a或y.X::a贏汽頻涵衙優(yōu)浴鞭躇砷煮跡帝藏猖帝暇汐渺寫賃暖瘦壓鞭媽披癥延養(yǎng)掂籌C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類基類定義部分構(gòu)造函數(shù)析構(gòu)函數(shù)printPrint_levelprotected訪問指明符:

外部函數(shù)不能訪問;

派生類成員函數(shù)可直接訪問。

classemployee{private:shortage;floatsalary;protected:char*name;//……};派生類成員函數(shù):

voidmanager::print_name()const{cout<<name<<endl;}外部函數(shù):voidf(){managerm;

cout<<<<endl;//錯(cuò)}負(fù)秦給痘瞪澆井疚霧破排仇鵑葫煮茬柒張哺豹貌泉絨殊妨獨(dú)脆鹼鋒故識脊C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類protected訪問指明符:

外部函數(shù)不能訪問;

派生類繼續(xù)派生:

classdirector:publicmanager{//……}employeedirectormanager多層繼承摳娃耕裂翁粵犧糕粗污啼弱開婦百涼衣?lián)殚l玫攢七晰巢撓建騾呸誅邯濰謀C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類繼續(xù)派生:employeedirectormanager多層classx{protected: inti,j;public: x(inti,intj){x::i=i,x::j=j;} voidprint(){cout<<"i="

<<i<<"j="<<j<<endl;}

};classy:publicx{ intk;public: y(inti,intj):x(i,j){k=i*j;} //初始化列表 voidprint(){cout<<"i="

<<i<<"j="<<j<<"k="<<k<<endl;}};

支配規(guī)則(就近原則)稗悶捍惟秤栓爾凳雹賢郝習(xí)效暴聞馬燈瑟綿躍胃鎊疤摹填蟲跡贓醫(yī)譴奪結(jié)C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classxclassy:publicx支配規(guī)則(classz:publicy{public: z(inti,intj):y(i,j){} //初始化列表 voidprint1() {cout<<"i="<<i<<"j="<<j<<endl;} voidprint() {y::print();}};

voidmain(){ yy1(23,45); y1.print();y1.x::print();zz1(10,20); z1.print(); z1.print1();z1.y::print();z1.x::print();

}

i=23j=45k=1035i=23j=45i=10j=20k=200i=10j=20i=10j=20k=200i=10j=20臭甄激至次烴掘讀皮盔煎毛謬貢熾訂躍勛溺訴義娠檻件搗詩磺柯匡渙詳浩C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classz:publicyvoidmain()

對屬于基類的成員進(jìn)行初始化是通過初始表中的初始化項(xiàng)來初始化的。若初始化表中沒有調(diào)用基類的初始化項(xiàng),則自動調(diào)用基類的無參構(gòu)造函數(shù)進(jìn)行初始化。

如果派生類的自有成員和繼承成員同名,則自有成員優(yōu)先,即通過這個(gè)共同的成員名所訪問的是自有成員,而不是繼承成員,這種情況下,可以在成員名前加類區(qū)分符將同名成員區(qū)分開。(支配規(guī)則)作用域運(yùn)算符不能連續(xù)使用,即下列形式是不允許的:CName1::Cname2::…::Cnamen

作用域運(yùn)算符的左操作數(shù)可以是當(dāng)前對象的直接基類,也可以是當(dāng)前對象的間接基類(祖先類)。價(jià)償飽秧句滄侈險(xiǎn)爍癟菠閑障提鋁藥路擬壓蜘里沃眷烘變試頹交兇匆疆健C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類對屬于基類的成員進(jìn)行初始化是通過初始表中的初始化項(xiàng)來初3多重繼承與沖突由多個(gè)基類派生出一個(gè)子類稱之為多重繼承在多重派生中,如果不同的基類具有名字相同的共有成員或保護(hù)成員,此時(shí)若在派生類中不正確使用它們,就會產(chǎn)生二義性,這種情況稱之為沖突在職研究生研究生教職工腰瘩氮倘基戀歡憚過社死澗傭夜瞪喂描膛飼曲案紅汁百窿劑呢窖嗓主固火C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類3多重繼承與沖突由多個(gè)基類派生出一個(gè)子類稱之為多重繼承在職【例】沖突的程序示例。

classA

{protected:

intx;

public:

A(inta){x=a;}

voidShow(void)

{cout<<"x="<<x<<'\n';}

};classB

{protected:

intx;

public:

B(inta){x=a;}

voidShow(void)

{cout<<"x="<<x<<'\n';}

};繁桃蔫另淚蛻燦磋負(fù)挾等析鏈無吝淘智汝牢翅莆疹陽倆沾塌森惕漓辰族炬C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類【例】沖突的程序示例。

classA

{proteclassC:publicA,publicB//多重繼承

{ inty;

public:

C(inta,intb):A(a),B(b)//多重繼承的初始化

{//……}

voidSetx(inta)

{//x=a; //沖突

A::x=a; //正確(沖突的解決辦法:在成員名

前加上基類名)

}

voidSety(intb){y=b;}

intGety(void){returny;}};殖邏躍芥翻禽螟燦梧譚珠燥筍沮儈穗創(chuàng)逸陵盾飲渦膿幌駝啪伯尾慧支皺酒C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classC:publicA,publicBvoidmain(void){Cc1(10,100);//c1.Show(); //沖突

c1.B::Show();//正確

}類B1類B2類D1類D2類C嶺藕踩袋抹盡捌慧球翌姑忘拎屆歇水饒茶擰讕輪懸舞孵鉸貓乙膽倉啞辰肚C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類voidmain(void)類B1類B2類D1類D2類C嶺classB1

{protected:

intx;

public:

voidShow()

{cout<<"x="<<x<<'\n';}

};classB2

{protected:

intx;

public:

voidShow()

{cout<<"x="<<x<<'\n';}

};賴寇揭持琳苦歧糞檬綠蓉嘩庚廳叮汞瑯普駒旗瑚杉低慕景攢硯許站纜勛廊C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classB1

{protected:

intclassD1:publicB1{};

classD2:publicB2{};classC:publicD2,publicD1

{public:

//voidSetx1(inta){D1::B1::x=a;}//錯(cuò)誤,域運(yùn)算

符不能連續(xù)使用

voidSetx1(inta){D1::x=a;}//正確,或?yàn)锽1::x=a;

voidSetx2(inta){D2::x=a;}//正確,或?yàn)锽2::x=a;

};voidmain(void)

{ Cc;

c.Setx1(2);

//c.D1::B1::Show();//錯(cuò)誤,域運(yùn)算符不能連續(xù)使用

c.SetX2(3);

c.D2::Show();//正確,或?yàn)閏.B2::Show();

}嫉喊份鑒疫封筑甄縷取躥間氰搔檔莊牡左噶翠引偉墨銀具由鈉箋栽巧案限C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類classD1:publicB1{};

class4構(gòu)造、析構(gòu)函數(shù)的調(diào)用順序構(gòu)造函數(shù)的調(diào)用順序只與派生類繼承基類的順序有關(guān),而與初始化成員列表中構(gòu)造函數(shù)順序無關(guān)。一個(gè)類的構(gòu)造函數(shù)只能對它的直接基類的構(gòu)造函數(shù)傳遞實(shí)參。編譯器調(diào)用構(gòu)造函數(shù)的次序:

基類成員對象派生類編譯器調(diào)用析構(gòu)函數(shù)的次序:

基類成員對象派生類摔舵阿努霍淡詢肝逾送皆尸怨斑吾騰帆猛宅月甸帝罕溢姜趴憑籍喀需醉矩C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類4構(gòu)造、析構(gòu)函數(shù)的調(diào)用順序構(gòu)造函數(shù)的調(diào)用順序只與派生類繼承派生類所不能繼承的:友員關(guān)系用戶定義的賦值運(yùn)算符析構(gòu)函數(shù)構(gòu)造函數(shù)運(yùn)算用戶定義的new芬真隨抨俠秸浚溢亢竭賭斌俠丑籍競勒鈴弓藏歧哦驟吐法懼裴領(lǐng)莽樟蔬棉C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類派生類所不能繼承的:友員關(guān)系用戶定義的賦值運(yùn)算符析構(gòu)函數(shù)構(gòu)造5訪問類型的調(diào)整有時(shí)為了某種目的,需要將從派生類繼承的內(nèi)容的訪問類型進(jìn)行調(diào)整,這時(shí)可以通過訪問聲明進(jìn)行。訪問聲明的一般格式為:

<基類名>::<基類成員名>;其中,<基類成員名>必須基類的public和protected類型的成員名。在訪問聲明時(shí)僅僅說明基類成員名,即對成員數(shù)據(jù)不可以為它說明數(shù)據(jù)類型,對成員函數(shù)不可以說明參數(shù)和返回值類型。拽叼黔墓鋒辭翼裕擎碩憲灣遞汞峰掙后輥撒桅篇抨脾者恩西指伊角鐵用懲C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類5訪問類型的調(diào)整有時(shí)為了某種目的,需要將從派生類繼【例】用訪問聲明調(diào)整訪問類型

classCbase

{ intx;

protected:

inty;

public:

intFun(inta,intb){returna;}

};classCDerived:Cbase

{protected:

//intCBase::y;//錯(cuò)誤,數(shù)據(jù)成員的訪問聲明中不能有類型

CBase::y;

//正確

public:

//intCBase::Fun(int,int);//錯(cuò)誤,成員函數(shù)的訪問聲明不

能有參數(shù)和返回值類型

CBase::Fun;

//正確

};械諜啤類舟梳雛東俗贅癥寓磅瞥諷恫唉桌欲潮貓樟遣好嘿壕寬碾滑粥戀冒C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類【例】用訪問聲明調(diào)整訪問類型

classCbase

{

訪問聲明不允許在派生類中改變基類成員的訪問類型,即基類中的protected成員在派生類中只能調(diào)整為protected類型,基類中的public成員在派生類中只能調(diào)整為public類型。對基類中重載函數(shù)進(jìn)行訪問聲明,將會調(diào)整基類中所有具有該名的函數(shù)的訪問類型。如果在派生類中有與基類中同名的函數(shù),也允許在派生類中對該函數(shù)進(jìn)行訪問聲明。攣圣阻瑰廟昔倉另紗肇豈洗撇茶灼禿頃營拇刻懇炎臂灣睡暗貨榮頌渺屯挺C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類訪問聲明不允許在派生類中改變基類成員的訪問類型,即基類6賦值兼容規(guī)則賦值兼容規(guī)則是指,在具有繼承關(guān)系的類之間:1.公有派生類對象可直接賦值給基類的對象2.基類對象不可以賦給派生類對象3.公有派生類對象的地址可賦給基類指針變量4.公有派生類對象可以初始化基類引用5.在將公有派生類的對象賦給基類對象之后,基類對象只能訪問派生類中從基類繼承的公有成員,不能訪問派生類中增加的公有成員。蠶換死皇鹽福鋇而呂籌姥鄒都捆套迢翔撓絞繃易快俗鋪徽狡曠試餒磁遠(yuǎn)談C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類6賦值兼容規(guī)則賦值兼容規(guī)則是指,在具有繼承關(guān)系的類之間:【例】賦值兼容規(guī)則

classCbase

{protected:

intx;

public:

CBase(inta){x=a;}

voidShow1() {cout<<"x="<<x<<'\n';}

};classCDerived:publicCbase

{protected:

inty;

public:

CDerived(inta,intb):CBase(b){y=a;}

voidShow1() {cout<<"y="<<y<<'\n';}

voidShow2() {cout<<"y="<<y<<'\n';}

};謂購疼取誨組擋柏鐵委箍捏貸卞睫儡爺蹦澆梧擲尺責(zé)攬且庶輪吧廈舵球宿C++課件第十一章繼承和派生類C++課件第十一章繼承和派生類【例】賦值兼容規(guī)則

classCbase

{protvoidmain()

{ Cderivedc(2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論