大學(xué)計(jì)算機(jī)程序設(shè)計(jì)8《繼承》_第1頁
大學(xué)計(jì)算機(jī)程序設(shè)計(jì)8《繼承》_第2頁
大學(xué)計(jì)算機(jī)程序設(shè)計(jì)8《繼承》_第3頁
大學(xué)計(jì)算機(jī)程序設(shè)計(jì)8《繼承》_第4頁
大學(xué)計(jì)算機(jī)程序設(shè)計(jì)8《繼承》_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章繼承不具有對(duì)稱性不是所有植物都屬于蕨類傳遞性

高等植物、蕨類植物、芒萁都是植物,具有植物的共同特征

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

重用&認(rèn)識(shí)習(xí)慣繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)現(xiàn)軟件重用的重要方法。程序員可以在已有基類的基礎(chǔ)上定義新的派生類。

構(gòu)造與雜交多繼承的派生類有多個(gè)基類。

訪問控制派生類對(duì)基類成員的訪問由繼承方式和成員性質(zhì)決定。要點(diǎn)

8.1類之間的關(guān)系

8.2基類和派生類

8.3基類的初始化

8.4繼承的應(yīng)用實(shí)例

8.5多繼承8.1類之間的關(guān)系has-A,uses-A和is-Ahas-A

包含關(guān)系,用以描述一個(gè)類由多個(gè)“部件類”構(gòu)成。實(shí)現(xiàn)has-A關(guān)系用類成員表示,即一個(gè)類中的數(shù)據(jù)成員是另一種已經(jīng)定義的類。uses-A

一個(gè)類部分地使用另一個(gè)類。通過類之間成員函數(shù)的相互聯(lián)系,定義友元或?qū)ο髤?shù)傳遞實(shí)現(xiàn)。is-A

機(jī)制稱為“繼承”。關(guān)系具有傳遞性,不具有對(duì)稱性。8.1類之間的關(guān)系一個(gè)B類繼承A類,或稱從類A派生類B

類A稱為基類(父類),類B稱為派生類(子類)AB1B2C1C2C3B1,B2的基類A的派生類C1,C2,C3的基類A的派生類(單繼承)C3的基類B1,B2的派生類(多繼承)B1的派生類類繼承關(guān)系的語法形式

class派生類名

:基類名表

{

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

};8.2基類和派生類基類名表構(gòu)成

訪問控制基類名1,訪問控制基類名2

,…,訪問控制基類名n類繼承關(guān)系的語法形式

class派生類名

:基類名表

{

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

};8.2基類和派生類基類名表

構(gòu)成

訪問控制基類名1,訪問控制基類名2

,…,訪問控制基類名n訪問控制

表示派生類對(duì)基類的繼承方式,使用關(guān)鍵字:

public

公有繼承

private

私有繼承

protected

保護(hù)繼承派生類對(duì)基類成員的使用,與繼承訪問控制和基類中成員性質(zhì)有關(guān)公有繼承 基類的公有成員派生類的公有成員 基類的保護(hù)成員派生類的保護(hù)成員私有繼承基類的公有成員和保護(hù)成員派生類的私有成員保護(hù)繼承基類的公有成員和保護(hù)成員派生類的保護(hù)成員不論種方式繼承基類,派生類都不能直接使用基類的私有成員

8.2.1訪問控制8.2.1訪問控制8.2.1訪問控制1.公有繼承public成員 public成員protected成員 protected成員private成員public成員protected成員private成員基類派生類#include<iostream>usingnamespacestd;classA{public:voidget_XY(){cout<<"Entertwonumbersofx,y:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB:publicA{public:

int

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

int

get_V(){returnv;}voidmake_V(){make_S();v=get_S()*h;} //使用基類成員函數(shù)

protected:inth,v;};例8-1公有繼承的測(cè)試

intmain(){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;}8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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.xobjAxy8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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.xobjBs8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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.xobjChv8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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對(duì)objA

的數(shù)據(jù)成員操作xyshv8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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調(diào)用基類A成員函數(shù)對(duì)objB

的數(shù)據(jù)成員操作xyshv8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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調(diào)用派生類B成員函數(shù)對(duì)objB

的數(shù)據(jù)成員操作xyshv8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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調(diào)用基類A成員函數(shù)對(duì)objC

的數(shù)據(jù)成員操作xyshv8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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調(diào)用派生類C成員函數(shù)對(duì)objC

的數(shù)據(jù)成員操作xyshv8.2.1訪問控制例8-1公有繼承的測(cè)試

intmain(){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.xobjCxyshv8.2.1訪問控制例8-1公有繼承的測(cè)試

8.2.1訪問控制public成員protected成員private成員public成員protected成員private成員基類派生類private成員private成員2.私有繼承#include<iostream>usingnamespacestd;classA{public:voidget_XY(){cout<<"Entertwonumbersofxandy:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB

:privateA{public:

int

get_S(){returns;}voidmake_S(){get_XY();s=x*y;} private: ints;};intmain(){BobjB;

cout<<"Itisobject_B:\n";

objB.make_S();

cout<<"S="<<objB.get_S()<<endl;}例8-2私有繼承的測(cè)試

classB:privateAclassAobjB.sobjB.yobjB.xobjBprivate成員8.2.1訪問控制#include<iostream>usingnamespacestd;classA{public:voidget_XY(){cout<<"Entertwonumbersofxandy:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB

:privateA{public:

int

get_S(){returns;}voidmake_S(){get_XY();s=x*y;} private: ints;};intmain(){BobjB;

cout<<"Itisobject_B:\n";

objB.make_S();

cout<<"S="<<objB.get_S()<<endl;}classB:privateAclassA調(diào)用基類成員函數(shù)objB.sobjB.yobjB.xobjBprivate成員8.2.1訪問控制例8-2私有繼承的測(cè)試#include<iostream>usingnamespacestd;classA{public:voidget_XY(){cout<<"Entertwonumbersofxandy:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB

:privateA{public:

int

get_S(){returns;}voidmake_S(){get_XY();s=x*y

;} private: ints;};intmain(){BobjB;

cout<<"Itisobject_B:\n";

objB.make_S();

cout<<"S="<<objB.get_S()<<endl;}classB:privateAclassA訪問私有數(shù)據(jù)成員objB.sobjB.yobjB.xobjBprivate成員8.2.1訪問控制例8-2私有繼承的測(cè)試#include<iostream>usingnamespacestd;classA{public:voidget_XY(){cout<<"Entertwonumbersofxandy:";cin>>x>>y;}voidput_XY(){cout<<"x="<<x<<",y="<<y<<'\n';}protected:intx,y;};classB:privateA{public:

int

get_S(){returns;}voidmake_S(){get_XY();s=x*y;} private: ints;};intmain(){BobjB;

cout<<"Itisobject_B:\n";

objB.make_S();

cout<<"S="<<objB.get_S()<<endl;}classB:privateAclassAobjB.sobjB.yobjB.xobjBprivate成員8.2.1訪問控制例8-2私有繼承的測(cè)試8.2.1訪問控制public成員protected成員private成員public成員protected成員private成員基類派生類protected成員protected成員3.保護(hù)繼承訪問申明使得派生類中不可見成員變?yōu)榭稍L問語法基類名::成員名注意訪問聲明僅調(diào)整名字的訪問權(quán)限不可說明為任何類型不允許降低或者提升基類成員可訪問性對(duì)重載函數(shù)同名重載函數(shù)–都起作用不同訪問域重載函數(shù)–不能派生類和基類重名–不可

派生類定義了與基類同名的成員,在派生類中訪問同名成員時(shí)屏蔽了基類的同名成員在派生類中使用基類的同名成員,顯式地使用類名限定符:類名

::成員

8.2.2重名成員8.2.2重名成員例:classbase{public:

inta,b;};classderived:publicbase{public:

intb,c;};voidf(){derivedd;d.a=1;d.base::b=2;d.b=3;d.c=4;};8.2.2重名成員1.重名數(shù)據(jù)成員baseabderived ab b c

例:classbase{public:

inta,b;};classderived:publicbase{public:

intb,c;};voidf(){derivedd;d.a=1;d.base::b=2;d.b=3;d.c=4;};8.2.2重名成員1.重名數(shù)據(jù)成員baseabderived

dderived ab b c

例:classbase{public:

inta,b;};classderived:publicbase{public:

intb,c;};voidf(){derivedd;

d.a=1;d.base::b=2;d.b=3;d.c=4;};8.2.2重名成員baseab1derived

dderived ab b c

訪問從base類繼承的數(shù)據(jù)成員a1.重名數(shù)據(jù)成員例:classbase{public:

inta,b;};classderived:publicbase{public:

intb,c;};voidf(){derivedd;d.a=1;

d.base::b=2;d.b=3;d.c=4;};8.2.2重名成員訪問從base類繼承的bbaseab21derived

dderived ab b c

1.重名數(shù)據(jù)成員例:classbase{public:

inta,b;};classderived:publicbase{public:

intb,c;};voidf(){derivedd;d.a=1;d.base::b=2;

d.b=3;d.c=4;};8.2.2重名成員訪問derived類定義的數(shù)據(jù)成員bbaseab321derived

dderived ab b c

1.重名數(shù)據(jù)成員例:classbase{public:

inta,b;};classderived:publicbase{public:

intb,c;};voidf(){derivedd;d.a=1;d.base::b=2;d.b=3;

d.c=4;};8.2.2重名成員訪問derived類定義的數(shù)據(jù)成員cbaseab4321derived

dderived ab b c

1.重名數(shù)據(jù)成員例:classbase{public:

inta,b;};classderived:publicbase{public:

intb,c;};voidf(){derivedd;d.a=1;d.base::b=2;d.b=3;d.c=4;};8.2.2重名成員baseab4321derived

dderived ab b c

基類成員的作用域延伸到所有派生類派生類的重名成員屏蔽基類的同名成員1.重名數(shù)據(jù)成員#include<iostream> //例8-4usingnamespacestd;classA{public:

inta1,a2;A(inti1=0,inti2=0){a1=i1;a2=i2;}voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}};classB:publicA{public:

intb1,b2;B(intj1=1,intj2=1){b1=j1;b2=j2;}voidprint() //定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}voidprintAB(){A::print(); //派生類對(duì)象調(diào)用基類版本同名成員函數(shù)

print(); //派生類對(duì)象調(diào)用自身的成員函數(shù)

}};intmain(){Bb;b.A::print(); b.printAB();}8.2.2重名成員2.重名成員函數(shù)voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}voidprint()

//定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}#include<iostream> //例8-4usingnamespacestd;classA{public:

inta1,a2;A(inti1=0,inti2=0){a1=i1;a2=i2;}voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}};classB:publicA{public:

intb1,b2;B(intj1=1,intj2=1){b1=j1;b2=j2;}voidprint() //定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}voidprintAB(){A::print(); //派生類對(duì)象調(diào)用基類版本同名成員函數(shù)

print();

//派生類對(duì)象調(diào)用自身的成員函數(shù)

}};intmain(){Bb;b.A::print(); b.printAB();}8.2.2重名成員2.重名成員函數(shù)voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}voidprint()

//定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}派生類屏蔽基類同名成員函數(shù)調(diào)用自身的成員函數(shù)#include<iostream> //例8-4usingnamespacestd;classA{public:

inta1,a2;A(inti1=0,inti2=0){a1=i1;a2=i2;}voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}};classB:publicA{public:

intb1,b2;B(intj1=1,intj2=1){b1=j1;b2=j2;}voidprint() //定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}voidprintAB(){A::print();

//派生類對(duì)象調(diào)用基類版本同名成員函數(shù)

print();

//派生類對(duì)象調(diào)用自身的成員函數(shù)

}};intmain(){Bb;b.A::print();

b.printAB();}8.2.2重名成員2.重名成員函數(shù)voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}voidprint()

//定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}派生類對(duì)象調(diào)用從基類繼承的同名成員函數(shù)#include<iostream> //例8-4usingnamespacestd;classA{public:

inta1,a2;A(inti1=0,inti2=0){a1=i1;a2=i2;}voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}};classB:publicA{public:

intb1,b2;B(intj1=1,intj2=1){b1=j1;b2=j2;}voidprint() //定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}voidprintAB(){A::print();

//派生類對(duì)象調(diào)用基類版本同名成員函數(shù)

print();

//派生類對(duì)象調(diào)用自身的成員函數(shù)

}};intmain(){Bb;b.A::print();

b.printAB();}8.2.2重名成員2.重名成員函數(shù)voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}voidprint()

//定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}基類this指針指向派生類對(duì)象#include<iostream> //例8-4usingnamespacestd;classA{public:

inta1,a2;A(inti1=0,inti2=0){a1=i1;a2=i2;}voidprint(){cout<<"a1="<<a1<<'\t'<<"a2="<<a2<<endl;}};classB:publicA{public:

intb1,b2;B(intj1=1,intj2=1){b1=j1;b2=j2;}voidprint() //定義同名函數(shù)

{cout<<"b1="<<b1<<'\t'<<"b2="<<b2<<endl;}voidprintAB(){A::print(); //派生類對(duì)象調(diào)用基類版本同名成員函數(shù)

print(); //派生類對(duì)象調(diào)用自身的成員函數(shù)

}};intmain(){Bb;b.A::print(); b.printAB();}8.2.2重名成員2.重名成員函數(shù)8.2.3派生類中訪問靜態(tài)成員

基類定義的靜態(tài)成員,將被所有派生類共享根據(jù)靜態(tài)成員自身的訪問特性和派生類的繼承方式,在類層次體系中具有不同的訪問性質(zhì)

派生類中訪問靜態(tài)成員,用以下形式顯式說明: 類名

::成員

或通過對(duì)象訪問

對(duì)象名

.成員8.2.3派生類中訪問靜態(tài)成員#include<iostream>usingnamespacestd;classB{public:staticvoidAdd(){i++;}staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}classBclassD:privateB#include<iostream>usingnamespacestd;classB{public:staticvoidAdd(){i++;}staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}staticvoidAdd(){i++;}靜態(tài)成員函數(shù)#include<iostream>usingnamespacestd;classB{public:staticvoidAdd(){i++;}staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}staticinti;靜態(tài)數(shù)據(jù)成員int

B::i=0;#include<iostream>usingnamespacestd;classB{public:

staticvoidAdd(){i++;}

staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}i=5;i是類D的私有靜態(tài)數(shù)據(jù)成員類中可見#include<iostream>usingnamespacestd;classB{public:

staticvoidAdd(){i++;}

staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}Add();Add()是類D的私有靜態(tài)成員函數(shù)類中可調(diào)用#include<iostream>usingnamespacestd;classB{public:

staticvoidAdd(){i++;}

staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}B::i++;B::Add();訪問B類的靜態(tài)成員#include<iostream>usingnamespacestd;classB{public:

staticvoidAdd(){i++;}

staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}cout<<"statici="<<B::i<<endl;訪問B類的靜態(tài)數(shù)據(jù)成員#include<iostream>usingnamespacestd;classB{public:

staticvoidAdd(){i++;}

staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}cout<<"statici="<<x.i<<endl;通過B類對(duì)象訪問靜態(tài)數(shù)據(jù)成員#include<iostream>usingnamespacestd;classB{public:

staticvoidAdd(){i++;}

staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;//cout<<"statici="<<y.i<<endl;}//cout<<"statici="<<y.i<<endl;錯(cuò)誤,i是類D的私有靜態(tài)數(shù)據(jù)成員#include<iostream>usingnamespacestd;classB{public:staticvoidAdd(){i++;}staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf(){i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;//cout<<"statici="<<y.i<<endl;}#include<iostream>usingnamespacestd;classB{public:staticvoidAdd(){i++;}staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:voidf();{i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;//cout<<"statici="<<y.i<<endl;}#include<iostream>usingnamespacestd;classB{public:staticvoidAdd(){i++;}staticinti;voidout(){cout<<"statici="<<i<<endl;}};int

B::i=0;classD:privateB{public:

voidf();{i=5;Add();

B::i++;

B::Add();}};//例8-5在派生類中訪問靜態(tài)成員intmain(){Bx;Dy;

x.Add();

x.out();

y.f();

cout<<"statici="<<B::i<<endl;

cout<<"statici="<<x.i<<endl;

//cout<<"statici="<<y.i<<endl;}8.3基類的初始化

建立一個(gè)類層次后,通常創(chuàng)建某個(gè)派生類的對(duì)象,包括使用基類的數(shù)據(jù)和函數(shù)

C++提供一種機(jī)制,在創(chuàng)建派生類對(duì)象時(shí)用指定參數(shù)調(diào)用基類的構(gòu)造函數(shù)來初始化派生類繼承基類的數(shù)據(jù)

派生類構(gòu)造函數(shù)聲明為派生類構(gòu)造函數(shù)(變?cè)?:基類(變?cè)?,對(duì)象成員1(變?cè)? …對(duì)象成員n(變?cè)?/p>

);構(gòu)造函數(shù)執(zhí)行順序:基類對(duì)象成員派生類//例8-6調(diào)用構(gòu)造函數(shù)順序測(cè)試,構(gòu)造函數(shù)無參數(shù)#include<iostream>usingnamespacestd;classBase{public:Base(){cout<<"Basecreated.\n";}};classD_class:publicBase{public:D_class(){cout<<"D_classcreated.\n";}};intmain(){D_classd1;}8.3基類的初始化//例8-6調(diào)用構(gòu)造函數(shù)順序測(cè)試,構(gòu)造函數(shù)無參數(shù)#include<iostream>usingnamespacestd;classBase{public:Base(){cout<<"Basecreated.\n";}};classD_class:publicBase{public:D_class(){cout<<"D_classcreated.\n";}};intmain(){D_classd1;}8.3基類的初始化//例8-6調(diào)用構(gòu)造函數(shù)順序測(cè)試,構(gòu)造函數(shù)無參數(shù)#include<iostream>usingnamespacestd;classBase{public:Base(){cout<<"Basecreated.\n";}};classD_class:publicBase{public:D_class(){cout<<"D_classcreated.\n";}};intmain(){D_classd1;}8.3基類的初始化①調(diào)用基類構(gòu)造函數(shù)//例8-6調(diào)用構(gòu)造函數(shù)順序測(cè)試,構(gòu)造函數(shù)無參數(shù)#include<iostream>usingnamespacestd;classBase{public:Base(){cout<<"Basecreated.\n";}};classD_class:publicBase{public:D_class(){cout<<"D_classcreated.\n";}};intmain(){D_classd1;}8.3基類的初始化②調(diào)用派生類構(gòu)造函數(shù)例8-8考察一個(gè)點(diǎn)、圓、圓柱體的層次結(jié)構(gòu)8.4繼承的應(yīng)用實(shí)例PointCircleCylinderclassPoint{friendostream&operator<<(ostream&,constPoint&);public:Point(int=0,int=0); //帶默認(rèn)參數(shù)的構(gòu)造函數(shù)

voidsetPoint(int,int); //對(duì)點(diǎn)坐標(biāo)數(shù)據(jù)賦值

int

getX()const{returnx;} int

getY()const{returny;}protected:intx,y; //Point類的數(shù)據(jù)成員};classCircle:publicPoint{friendostream&operator<<(ostream&,constCircle&); //友元函數(shù)

public:

Circle(doubler=0.0,intx=0,inty=0); //構(gòu)造函數(shù)

voidsetRadius(double);/*置半徑*/doublegetRadius()const;/*返回半徑*/doublearea()const; //返回面積

protected:doubleradius; //數(shù)據(jù)成員,半徑};classCylinder:publicCircle{friendostream&operator<<(ostream&,constCylinder&);//友元函數(shù)

public:

Cylinder(doubleh=0.0,doubler=0.0,intx=0,inty=0);//構(gòu)造函數(shù)

voidsetHeight(double);/*置高度值*/doublegetHeight()const; /*返回高度值*/doublearea()const; /*返回面積*/doublevolume()const; /*返回體積*/protected:doubleheight; //數(shù)據(jù)成員,高度};8.4繼承的應(yīng)用實(shí)例classPoint{friendostream&operator<<(ostream&,constPoint&);public:

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論