派生類與繼承課件_第1頁
派生類與繼承課件_第2頁
派生類與繼承課件_第3頁
派生類與繼承課件_第4頁
派生類與繼承課件_第5頁
已閱讀5頁,還剩215頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、類之間的關系

has-A,uses-A和is-Ahas-A(包含關系),用以描述一個類由多個“部件類”構成。實現(xiàn)has-A關系用類成員表示,即一個類中的數(shù)據(jù)成員是已定義的類。

uses-A(一個類部分地使用另一個類),通過類之間成員函數(shù)的相互聯(lián)系,定義友員或對象參數(shù)傳遞實現(xiàn)。

is-A(繼承)。關系具有傳遞性,不具有對稱性。第1頁/共110頁1、類之間的關系has-A,uses-A和is-A第1非對稱性:不是所有植物都屬于蕨類。傳遞性:高等植物、蕨類植物、芒萁都是植物,具有植物的共同特征。

植物低等植物高等植物藻類菌類地衣類苔蘚類蕨類裸子類被子類地錢小金發(fā)草毛蕨芒萁杉木柏木荔枝橘子繼承關系

第2頁/共110頁非對稱性:不是所有植物都屬于蕨類。傳遞性:高等植物、蕨類植

繼承是類之間定義的一種重要關系。

一個B類繼承A類,或稱從類A派生類B類A稱為基類(父類),類B稱為派生類(子類)B1,B2的基類A的派生類C1,C2,C3的基類A的派生類(單繼承)C3的基類B1,B2的派生類(多繼承)AB1B2C1C2C3B1的派生類繼承關系

第3頁/共110頁繼承是類之間定義的一種重要關系。B1,B2的基類Aclassperson{protected:

charname[10];intage;charsex;

public:

voidprint();};classemployee{protected:

charname[10];intage;charsex;

chardepartment[20];floatsalary;public:

voidprint();};為什么要用繼承?第4頁/共110頁classpersonclassemployee4繼承:保持已有類的特性而構造新類的過程。派生:在已有類的基礎上新增自己的特性而產生新類的過程。繼承的目的:實現(xiàn)代碼重用。派生的目的:當新的問題出現(xiàn),原有程序無法解決(或不能完全解決)時,需要對原有程序進行改造。2、派生類的概念

第5頁/共110頁繼承:保持已有類的特性而構造新類的過程。2、派生類的概念第繼承關系的語法形式

class派生類名:

基類名表

{

數(shù)據(jù)成員和成員函數(shù)聲明

};派生類的聲明

派生類的功能:可以增加新的數(shù)據(jù)成員;可以增加新的成員函數(shù);可以重新定義基類中已有的成員函數(shù);可以改變現(xiàn)有成員的屬性。第6頁/共110頁繼承關系的語法形式派生類的聲明派生類的功能:第6頁/共11基類名表構成訪問控制

基類名1,訪問控制

基類名2,…

,訪問控制

基類名n訪問控制:表示派生類對基類的繼承方式

public

公有繼承

private

私有繼承

protected

保護繼承派生類的聲明

第7頁/共110頁基類名表構成訪問控制:表示派生類對基類的繼承方式 p派生類對基類成員的使用,與繼承訪問控制和基類中成員性質有關;公有繼承基類的公有成員派生類的公有成員 基類的保護成員派生類的保護成員私有繼承基類的公有成員和保護成員

派生類的私有成員保護繼承

基類的公有成員和保護成員

派生類的保護成員不論什么方式繼承基類,派生類都不能直接使用基類的私有成員。訪問控制第8頁/共110頁派生類對基類成員的使用,與繼承訪問控制和基類中成員性質有關;(1)公有繼承public成員 public成員protected成員protected成員private成員public成員protected成員private成員基類派生類第9頁/共110頁(1)公有繼承public成員 pu#include<iostream.h>classA{public:voidget_XY(){cout<<"Entertwonumbersofx,y:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB

:publicA{public:intget_S(){returns;};voidmake_S(){s=x*y;};//使用基類數(shù)據(jù)成員x,yprotected:ints;};classC:publicB{public:voidget_H(){cout<<"Enteranumberofh:";cin>>h;}intget_V(){returnv;}voidmake_V(){make_S();v=get_S()*h;} //使用基類成員函數(shù)

protected:inth,v;};classAclassC:publicBclassB:publicA公有繼承的測試

第10頁/共110頁#include<iostream.h>classAcl#include<iostream.h>classA{public:voidget_XY(){cout<<"Entertwonumbersofx,y:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}

protected:intx,y;};classB:publicA{public:intget_S(){returns;};voidmake_S(){s=x*y;};//使用基類數(shù)據(jù)成員x,y

protected:ints;};classC:publicB{public:voidget_H(){cout<<"Enteranumberofh:";cin>>h;}intget_V(){returnv;}voidmake_V(){make_S();v=get_S()*h;}//使用基類成員函數(shù)

protected:inth,v;};classAclassC:publicYclassB:publicX保護數(shù)據(jù)成員在類層次中可見公有繼承的測試

第11頁/共110頁#include<iostream.h>classAclvoidmain(){AobjA;BobjB;CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}公有繼承的測試

第12頁/共110頁voidmain()公有繼承的測試第12頁/共110頁voidmain(){AobjA;BobjB;CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAxy公有繼承的測試

第13頁/共110頁voidmain()objA.yobjA.xobjAxvoidmain(){AobjA;

BobjB;CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAxyobjB.sobjB.yobjB.xobjBs公有繼承的測試

第14頁/共110頁voidmain()objA.yobjA.xobjAxvoidmain(){AobjA;BobjB;

CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBxysobjC.hobjC.vobjC.sobjC.yobjC.xobjChv公有繼承的測試

第15頁/共110頁voidmain()objA.yobjA.xobjAobjvoidmain(){AobjA;BobjB;CobjC;cout<<"Itisobject_A:\n";

objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC對objA的數(shù)據(jù)成員操作xyshv公有繼承的測試

第16頁/共110頁voidmain()objA.yobjA.xobjAobjvoidmain(){AobjA;BobjB;CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";

objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC調用基類A成員函數(shù)對objB的數(shù)據(jù)成員操作xyshv公有繼承的測試

第17頁/共110頁voidmain()objA.yobjA.xobjAobjvoidmain(){AobjA;BobjB;CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();

objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC調用派生類B成員函數(shù)對objB的數(shù)據(jù)成員操作xyshv公有繼承的測試

第18頁/共110頁voidmain()objA.yobjA.xobjAobjvoidmain(){AobjA;BobjB;CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";

objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC調用基類A成員函數(shù)對objC的數(shù)據(jù)成員操作xyshv公有繼承的測試

第19頁/共110頁voidmain()objA.yobjA.xobjAobjvoidmain(){AobjA;BobjB;CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();

objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC調用派生類C成員函數(shù)對objC的數(shù)據(jù)成員操作xyshv公有繼承的測試

第20頁/共110頁voidmain()objA.yobjA.xobjAobjvoidmain(){AobjA;BobjB;CobjC;cout<<"Itisobject_A:\n";objA.get_XY();objA.put_XY();cout<<"Itisobject_B:\n";objB.get_XY();objB.make_S();cout<<"S="<<objB.get_S()<<endl;cout<<"Itisobject_C:\n";objC.get_XY();objC.get_H();objC.make_V();cout<<"V="<<objC.get_V()<<endl;}objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjCxyshv公有繼承的測試

第21頁/共110頁voidmain()objA.yobjA.xobjAobjpublic成員protected成員private成員public成員protected成員private成員基類派生類private成員private成員(2)私有繼承第22頁/共110頁public成員protected成員private成#include<iostream.h>classA{public:voidget_XY(){cout<<"Entertwonumbersofxandy:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB

:privateA{public:intget_S(){returns;}voidmake_S(){get_XY();s=x*y;} private: ints;};voidmain(){BobjB;

cout<<"Itisobject_B:\n";objB.make_S();cout<<"S="<<objB.get_S()<<endl;}私有繼承的測試

classB:privateAclassA

objB.sobjB.yobjB.xobjBprivate成員第23頁/共110頁#include<iostream.h>私有繼承的測試cl#include<iostream.h>classA{public:voidget_XY(){cout<<"Entertwonumbersofxandy:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB

:privateA{public:intget_S(){returns;}voidmake_S(){get_XY();s=x*y;} private: ints;};voidmain(){BobjB; cout<<"Itisobject_B:\n";objB.make_S();cout<<"S="<<objB.get_S()<<endl;}classB:privateAclassA調用基類成員函數(shù)objB.sobjB.yobjB.xobjBprivate成員私有繼承的測試

第24頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public:voidget_XY(){cout<<"Entertwonumbersofxandy:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB

:privateA{public:intget_S(){returns;}voidmake_S(){get_XY();s=x*y

;} private: ints;};voidmain(){BobjB; cout<<"Itisobject_B:\n";objB.make_S();cout<<"S="<<objB.get_S()<<endl;}classB:privateAclassA訪問私有數(shù)據(jù)成員objB.sobjB.yobjB.xobjBprivate成員私有繼承的測試

第25頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public:voidget_XY(){cout<<"Entertwonumbersofxandy:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB:privateA{public:intget_S(){returns;}voidmake_S(){get_XY();s=x*y;} private: ints;};voidmain(){BobjB; cout<<"Itisobject_B:\n";objB.make_S();cout<<"S="<<objB.get_S()<<endl;}classB:privateAclassAobjB.sobjB.yobjB.xobjBprivate成員私有繼承的測試

第26頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public: A(){x=1;} intout(){returnx;} voidaddX(){x++;}private: intx;};classB:publicA{public: B(){y=1;} intout(){returny;} voidaddY(){y++;}private: inty;};voidmain(){Aa;Bb;b.addX();b.addY();cout<<"a.x="<<a.out()<<endl;cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;}classB:publicAclassA基類的私有數(shù)據(jù)成員不能在派生類中直接訪問但派生類對象建立私有數(shù)據(jù)空間

b.xa.xb.y私有繼承的測試

第27頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public: A(){x=1;} intout(){returnx;} voidaddX(){x++;}private: intx;};classB:publicA{public: B(){y=1;} intout(){returny;} voidaddY(){y++;}private: inty;};voidmain(){Aa;cout<<"a.x="<<a.out()<<endl;Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;}classB:publicAclassA

b.xa.xb.y私有繼承的測試

第28頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public: A(){x=1;} intout(){returnx;} voidaddX(){x++;}private: intx;};classB:publicA{public: B(){y=1;} intout(){returny;} voidaddY(){y++;}private: inty;};voidmain(){Aa;cout<<"a.x="<<a.out()<<endl;Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;}classB:publicAclassA調用構造函數(shù)對數(shù)據(jù)成員賦值1b.xa.xb.y私有繼承的測試

第29頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public: A(){x=1;} intout(){returnx;} voidaddX(){x++;}private: intx;};classB:publicA{public: B(){y=1;} intout(){returny;} voidaddY(){y++;}private: inty;};voidmain(){Aa;cout<<"a.x="<<a.out()<<endl;

Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;}classB:publicAclassA創(chuàng)建派生類對象調用基類派生類構造函數(shù)b.x=1b.y=1111b.xa.xb.y私有繼承的測試

第30頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public: A(){x=1;} intout(){returnx;}

voidaddX(){x++;}private: intx;};classB:publicA{public: B(){y=1;} intout(){returny;} voidaddY(){y++;}private: inty;};voidmain(){Aa;cout<<"a.x="<<a.out()<<endl;Bb;

b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;}classB:publicAclassA調用基類公有成員函數(shù)b.x++112b.xa.xb.y私有繼承的測試

第31頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public: A(){x=1;} intout(){returnx;} voidaddX(){x++;}private: intx;};classB:publicA{public: B(){y=1;} intout(){returny;}

voidaddY(){y++;}private: inty;};voidmain(){Aa;cout<<"a.x="<<a.out()<<endl;Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;}classB:publicAclassA調用派生類公有成員函數(shù)b.y++122b.xa.xb.y私有繼承的測試

第32頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public: A(){x=1;}

intout(){returnx;} voidaddX(){x++;}private: intx;};classB:publicA{public: B(){y=1;} intout(){returny;} voidaddY(){y++;}private: inty;};voidmain(){Aa;cout<<"a.x="<<a.out()<<endl;Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;}classB:publicAclassA調用基類版本同名函數(shù)返回b.x的值122b.xa.xb.y私有繼承的測試

第33頁/共110頁#include<iostream.h>classB:#include<iostream.h>classA{public: A(){x=1;} intout(){returnx;} voidaddX(){x++;}private: intx;};classB:publicA{public: B(){y=1;}

intout(){returny;} voidaddY(){y++;}private: inty;};voidmain(){Aa;cout<<"a.x="<<a.out()<<endl;Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;}classB:publicAclassA調用派生類版本同名函數(shù)返回b.y的值122b.xa.xb.y私有繼承的測試

第34頁/共110頁#include<iostream.h>classB:public成員protected成員private成員public成員protected成員private成員基類派生類protected成員protected成員(3)保護繼承第35頁/共110頁public成員protected成員private成3、派生類的構造函數(shù)和析構函數(shù)基類的構造函數(shù)和析構函數(shù)都不被繼承,需要在派生類中重新定義。由于派生類繼承了基類的成員,在初始化時,要同時初始化基類成員。聲明派生類構造函數(shù)時,除了需要對本類中新增成員進行初始化外,還要對基類成員初始化。第36頁/共110頁3、派生類的構造函數(shù)和析構函數(shù)基類的構造函數(shù)和析構函數(shù)都不被36派生類的構造函數(shù)派生類構造函數(shù)聲明的一般語法形式如下:<派生類名>::<派生類名>(參數(shù)總表):

基類名1(參數(shù)表1),...,基類名n(參數(shù)表n),內嵌對象名1(內嵌對象參數(shù)表1),...,內嵌對象名m(內嵌對象參數(shù)表m){

派生類新增成員的初始化語句;}第37頁/共110頁派生類的構造函數(shù)派生類構造函數(shù)聲明的一般語法形式如下:第3737派生類的構造函數(shù)其中:派生類的構造函數(shù)名與派生類名相同。參數(shù)總表需要列出初始化基類數(shù)據(jù)、新增內嵌對象數(shù)據(jù)及新增一般成員數(shù)據(jù)所需要的全部參數(shù)。冒號之后,列出需要使用參數(shù)進行初始化的基類名和內嵌成員名及各自的參數(shù)表,各項之間用逗號分隔。第38頁/共110頁派生類的構造函數(shù)其中:第38頁/共110頁38派生類構造函數(shù)的執(zhí)行順序:

(1)先調用基類的構造函數(shù);(2)然后按照數(shù)據(jù)成員的聲明順序,依次調用數(shù)據(jù)成員的構造函數(shù);(3)最后執(zhí)行派生類構造函數(shù)的函數(shù)體。注意:①構造函數(shù)的執(zhí)行順序只與成員聲明的順序有關,而與初始化表中各項的排列順序無關。②常量成員、引用成員、內嵌對象,只能通過初始化表的方法初始化。派生類的構造函數(shù)基類對象成員派生類第39頁/共110頁派生類構造函數(shù)的執(zhí)行順序:派生類的構造函數(shù)基類對象成員39

析構函數(shù)也不被繼承,派生類自行聲明。聲明方法與一般(無繼承關系時)類的析構函數(shù)相同。派生類析構函數(shù)執(zhí)行時將自動調用基類及內嵌對象的析構函數(shù),系統(tǒng)會自動隱式調用,因此不必顯式調用。析構函數(shù)的調用次序與構造函數(shù)相反。派生類的析構函數(shù)第40頁/共110頁析構函數(shù)也不被繼承,派生類自行聲明。聲明方法與一般(無繼承40//構造函數(shù)調用順序測試,構造函數(shù)無參數(shù)#include<iostream.h>classBase{public:Base(){cout<<"Basecreated.\n";}};classD_class:publicBase{public:D_class(){cout<<"D_classcreated.\n";}};voidmain(){D_classd1;}①調用基類構造函數(shù)第41頁/共110頁//構造函數(shù)調用順序測試,構造函數(shù)無參數(shù)①調用基類構造函數(shù)//構造函數(shù)調用順序測試,構造函數(shù)無參數(shù)#include<iostream.h>classBase{public:Base(){cout<<"Basecreated.\n";}};classD_class:publicBase{public:D_class(){cout<<"D_classcreated.\n";}};voidmain(){D_classd1;}②調用派生類構造函數(shù)第42頁/共110頁//構造函數(shù)調用順序測試,構造函數(shù)無參數(shù)②調用派生類構造#include<iostream.h>classparent_class{intdata1,data2;public:parent_class(intp1,intp2){data1=p1;data2=p2;}intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5):parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};voidmain(){derived_classd1(17,18,1,2,-5);d1.inc1();d1.display();}帶參數(shù)構造函數(shù)調用順序測試第43頁/共110頁#include<iostream.h>帶參數(shù)構造函數(shù)調用#include<iostream.h>classparent_class{intdata1,data2;public:parent_class(intp1,intp2){data1=p1;data2=p2;}intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5):parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};voidmain(){derived_classd1(17,18,1,2,-5);d1.inc1();d1.display();}intdata1,data2;intdata3;parent_classdata4;data1 data2data4 data1 data2

data3parent_classderived_classdata1 data2帶參數(shù)構造函數(shù)調用順序測試第44頁/共110頁#include<iostream.h>intdata帶參數(shù)構造函數(shù)調用順序測試#include<iostream.h>classparent_class{intdata1,data2;public:parent_class(intp1,intp2){data1=p1;data2=p2;}intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5):parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};voidmain(){derived_classd1(17,18,1,2,-5);d1.inc1();d1.display();}classparent_class{intdata1,data2;public:

parent_class(intp1,intp2){data1=p1;data2=p2;}intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};基類有一個帶參數(shù)的構造函數(shù)data1 data2data4 data1 data2

data3parent_classderived_classdata1 data2第45頁/共110頁帶參數(shù)構造函數(shù)調用順序測試#include<iostrea帶參數(shù)構造函數(shù)調用順序測試#include<iostream.h>classparent_class{intdata1,data2;public:parent_class(intp1,intp2){data1=p1;data2=p2;}intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5):parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};voidmain(){derived_classd1(17,18,1,2,-5);d1.inc1();d1.display();}classparent_class{intdata1,data2;public:parent_class(intp1,intp2){data1=p1;data2=p2;}

intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};成員函數(shù)數(shù)據(jù)成員自增data1 data2data4 data1 data2

data3parent_classderived_classdata1 data2第46頁/共110頁帶參數(shù)構造函數(shù)調用順序測試#include<iostrea#include<iostream.h>classparent_class{intdata1,data2;public:parent_class(intp1,intp2){data1=p1;data2=p2;}intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5):parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};voidmain(){derived_classd1(17,18,1,2,-5);d1.inc1();d1.display();}classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5) :parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};data1 data2data4 data1 data2

data3parent_classderived_classdata1 data2帶參數(shù)構造函數(shù)調用順序測試第47頁/共110頁#include<iostream.h>classde#include<iostream.h>classparent_class{intdata1,data2;public:parent_class(intp1,intp2){data1=p1;data2=p2;}intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5):parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};voidmain(){derived_classd1(17,18,1,2,-5);d1.inc1();d1.display();}classderived_class:privateparent_class{intdata3;

parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5) :parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};類成員data1 data2

data4 data1 data2

data3parent_classderived_classdata1 data2帶參數(shù)構造函數(shù)調用順序測試第48頁/共110頁#include<iostream.h>classde帶參數(shù)構造函數(shù)調用順序測試#include<iostream.h>classparent_class{intdata1,data2;public:parent_class(intp1,intp2){data1=p1;data2=p2;}intinc1(){return++data1;}intinc2(){return++data2;}voiddisplay(){cout<<"data1="<<data1<<",data2="<<data2<<endl;}};classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5):parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}voiddisplay(){parent_class::display();data4.display();cout<<"data3="<<data3<<endl;}};voidmain(){derived_classd1(17,18,1,2,-5);d1.inc1();d1.display();}classderived_class:privateparent_class{intdata3;parent_classdata4;public:derived_class(intp1,intp2,intp3,intp4,intp5) :parent_class(p1,p2),data4(p3,p4){data3=p5;}intinc1(){returnparent_class::inc1();}intinc3(){return++data3;}

溫馨提示

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

評論

0/150

提交評論