資源描述:
《繼承與派生ppt課件.ppt》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、第七章繼承與派生C++語言程序設計1本章主要內(nèi)容類的繼承與派生類成員的訪問控制單繼承與多繼承派生類的構造、析構函數(shù)類成員的標識與訪問2類的繼承與派生繼承就是從先輩處得到屬性和行為特征。類的繼承是新類從已有類那里得到已有的特性。在已有類的基礎上新增自己的特性而產(chǎn)生新類的過程稱為派生。被繼承的已有類稱為基類(或父類)。派生出的新類稱為派生類(或子類)。3繼承與派生問題舉例類的繼承與派生4繼承與派生問題舉例類的繼承與派生5繼承與派生問題舉例類的繼承與派生6繼承與派生問題舉例類的繼承與派生7繼承與派生的目的繼承的目的:實現(xiàn)代碼重用。派生的目的:當新的問題出現(xiàn),原有程序無法解
2、決(或不能完全解決)時,需要對原有程序進行改造。類的繼承與派生8派生類的聲明class派生類名:繼承方式基類名{成員聲明;}類的繼承與派生9類的繼承與派生派生類的生成過程吸收基類成員將基類的成員全盤接收,派生類包含全部基類中除構造和析構函數(shù)外的所有成員?;惖臉嬙旌臀鰳嫼瘮?shù)不被繼承。改造基類成員一是基類成員的訪問控制問題,主要由派生類定義時的繼承方式控制。第二是對基類成員的覆蓋,即在派生類中聲明一個和基類數(shù)據(jù)或函數(shù)成員同名的成員。添加新的成員這是繼承與派生機制的核心,是保障派生類在功能上有所發(fā)展的關鍵。10繼承方式不同繼承方式的影響主要體現(xiàn)在:派生類成員對基類成員的
3、訪問權限通過派生類對象對基類成員的訪問權限三種繼承方式公有繼承私有繼承保護繼承缺省時為私有繼承。類成員的訪問控制11公有繼承(public)基類的public和protected成員的訪問屬性在派生類中保持不變,但基類的private成員不可直接訪問。派生類中的成員函數(shù)可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。通過派生類的對象只能訪問基類的public成員。類成員的訪問控制12例7-1公有繼承舉例classPoint//基類Point類的聲明{public://公有函數(shù)成員voidInitP(floatxx=0
4、,floatyy=0){X=xx;Y=yy;}voidMove(floatxOff,floatyOff){X+=xOff;Y+=yOff;}floatGetX(){returnX;}floatGetY(){returnY;}private://私有數(shù)據(jù)成員floatX,Y;};類成員的訪問控制13classRectangle:publicPoint//派生類聲明{public://新增公有函數(shù)成員voidInitR(floatx,floaty,floatw,floath){InitP(x,y);W=w;H=h;}//調(diào)用基類公有成員函數(shù)floatGetH(){ret
5、urnH;}floatGetW(){returnW;}private://新增私有數(shù)據(jù)成員floatW,H;};1414#include#includeusingnamecpacestd;intmain(){Rectanglerect;rect.InitR(2,3,20,10);//通過派生類對象訪問基類公有成員rect.Move(3,2);cout<6、rivate)基類的public和protected成員都以private身份出現(xiàn)在派生類中,但基類的private成員不可直接訪問。派生類中的成員函數(shù)可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員。通過派生類的對象不能直接訪問基類中的任何成員。類成員的訪問控制16例7-2私有繼承舉例classRectangle:privatePoint//派生類聲明{public://新增外部接口voidInitR(floatx,floaty,floatw,floath){InitP(x,y);W=w;H=h;}//訪問基類公有成
7、員voidMove(floatxOff,floatyOff){Point::Move(xOff,yOff);}floatGetX(){returnPoint::GetX();}floatGetY(){returnPoint::GetY();}floatGetH(){returnH;}floatGetW(){returnW;}private://新增私有數(shù)據(jù)floatW,H;};類成員的訪問控制17#include#includeusingnamecpacestd;intmain(){//通過派生類對象只能訪問本類成員Rectan