C面向?qū)ο蟪绦蛏婕皬?fù)習(xí)要點(diǎn)重點(diǎn)復(fù)習(xí)_第1頁(yè)
C面向?qū)ο蟪绦蛏婕皬?fù)習(xí)要點(diǎn)重點(diǎn)復(fù)習(xí)_第2頁(yè)
C面向?qū)ο蟪绦蛏婕皬?fù)習(xí)要點(diǎn)重點(diǎn)復(fù)習(xí)_第3頁(yè)
C面向?qū)ο蟪绦蛏婕皬?fù)習(xí)要點(diǎn)重點(diǎn)復(fù)習(xí)_第4頁(yè)
C面向?qū)ο蟪绦蛏婕皬?fù)習(xí)要點(diǎn)重點(diǎn)復(fù)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1C面向?qū)ο蟪绦蛏婕皬?fù)習(xí)要點(diǎn)重點(diǎn)復(fù)習(xí)第1章復(fù)習(xí)要點(diǎn)簡(jiǎn)單的C++程序#include<iostream>//用cout輸出時(shí)需要用

//此頭文件usingnamespacestd;//使用命名空間stdintmain(){cout<<"ThisisaC++program.\n";//用C++的方法輸出一行

return0;}第1頁(yè)/共74頁(yè)輸入和輸出

格式:cout<<cin>> endl表示結(jié)束一行 數(shù)據(jù)類(lèi)型const常量定義

constfloatPI=3.14159;

占用存儲(chǔ)單元,只讀不可寫(xiě)函數(shù)原型聲明

格式:函數(shù)類(lèi)型函數(shù)名(參數(shù)列表);intmax(intx,inty);

要求:函數(shù)調(diào)用之前必須對(duì)所調(diào)用的函數(shù)作函數(shù)原型聲明第2頁(yè)/共74頁(yè)函數(shù)重載

定義(overload) 要求:參數(shù)個(gè)數(shù)或參數(shù)類(lèi)型不同有默認(rèn)參數(shù)的函數(shù)

格式:floatarea(floatr=6.5)

與函數(shù)重載的關(guān)系第3頁(yè)/共74頁(yè)函數(shù)模版、函數(shù)重載例題1、對(duì)重載函數(shù)形參的描述中,錯(cuò)誤的是

A.參數(shù)的個(gè)數(shù)可能不同

B.參數(shù)的類(lèi)型可能不同

C.參數(shù)的順序可能不同

D.參數(shù)的個(gè)數(shù)、類(lèi)型、順序都相同,只是函數(shù)的返回值類(lèi)型不同

D第4頁(yè)/共74頁(yè)變量的引用*

函數(shù)傳值與函數(shù)傳地址

對(duì)比引用與指針:P19例1.10&1.11內(nèi)置函數(shù)

inline

作用:空間換時(shí)間作用域運(yùn)算符::第5頁(yè)/共74頁(yè)字符串變量

string定義,與字符數(shù)組的關(guān)系

賦值

字符串操作:復(fù)制、連接、比較new和delete運(yùn)算符第6頁(yè)/共74頁(yè)例題1、對(duì)于動(dòng)態(tài)分配內(nèi)存空間描述正確的是

A.使用new運(yùn)算符分配的內(nèi)存空間的長(zhǎng)度必需是常量

B.delete運(yùn)算符可以釋放動(dòng)態(tài)的存儲(chǔ)空間和靜態(tài)的存儲(chǔ)空間

C.由new分配的內(nèi)存空間是不連續(xù)的

D.delete運(yùn)算符只能釋放由new分配的動(dòng)態(tài)存儲(chǔ)空間

D第7頁(yè)/共74頁(yè)什么是藍(lán)?類(lèi)與對(duì)象第8頁(yè)/共74頁(yè)類(lèi)和對(duì)象在C++中,類(lèi)是一種數(shù)據(jù)類(lèi)型。intx;classstudentstd1;基本數(shù)據(jù)類(lèi)型用戶(hù)定義數(shù)據(jù)類(lèi)型變量(實(shí)例)對(duì)象(實(shí)例)第9頁(yè)/共74頁(yè)1.類(lèi)的聲明與對(duì)象的定義2.類(lèi)的數(shù)據(jù)成員與成員函數(shù)3.對(duì)象成員的訪(fǎng)問(wèn)4.構(gòu)造函數(shù)與析構(gòu)函數(shù)5.Const6.Static7.New與delete8.拷貝構(gòu)造函數(shù)9.友元第10頁(yè)/共74頁(yè)第2章要點(diǎn)復(fù)習(xí)基本概念

對(duì)象 封裝與信息隱蔽 抽象 繼承與重用 多態(tài)性第11頁(yè)/共74頁(yè)聲明類(lèi)類(lèi)型*class

CGoods{

private

:

charName[21];

intAmount;

floatPrice;

floatTotal_value;public:void

CountTotal(void);};1.class關(guān)鍵字2.類(lèi)名3.類(lèi)體{};格式4.類(lèi)數(shù)據(jù)成員5.類(lèi)成員函數(shù)6.訪(fǎng)問(wèn)限定符第12頁(yè)/共74頁(yè)定義對(duì)象的方法

1.先聲明類(lèi)類(lèi)型,然后再定義對(duì)象

classStudentstud1;

Studentstud1;

2.在聲明類(lèi)類(lèi)型的同時(shí)定義對(duì)象

classStudent{}stud1;

3.不出現(xiàn)類(lèi)名,直接定義對(duì)象

class{}stud1;第13頁(yè)/共74頁(yè)類(lèi)與結(jié)構(gòu)體類(lèi)型的異同

1.用class聲明的類(lèi)如果不帶成員訪(fǎng)問(wèn)限定符,所有成員默認(rèn)限定為private;

2.用struct聲明的類(lèi)如果不帶成員訪(fǎng)問(wèn)限定符,所有成員默認(rèn)限定為public。第14頁(yè)/共74頁(yè)類(lèi)成員數(shù)據(jù)成員/成員變量--private成員函數(shù)/成員方法--publicinline成員函數(shù)成員函數(shù)的存儲(chǔ)方式第15頁(yè)/共74頁(yè)成員函數(shù)的存儲(chǔ)方式數(shù)據(jù)區(qū)代碼區(qū)對(duì)象1對(duì)象2數(shù)據(jù)區(qū)代碼區(qū)對(duì)象n......?dāng)?shù)據(jù)區(qū)代碼區(qū)數(shù)據(jù)區(qū)對(duì)象1數(shù)據(jù)區(qū)對(duì)象2數(shù)據(jù)區(qū)對(duì)象n......公共代碼區(qū)第16頁(yè)/共74頁(yè)對(duì)象成員的訪(fǎng)問(wèn)*對(duì)象名+成員運(yùn)算符stud1.num=1001;對(duì)象指針Student*p=&stud1;pnum=1001;

對(duì)象引用Student&s=stud1;s.num=1001;第17頁(yè)/共74頁(yè)類(lèi)的封裝性和信息隱蔽

1.公用接口與私有實(shí)現(xiàn)的分離

2.類(lèi)聲明和成員函數(shù)定義的分離P64-653.名詞:對(duì)象、方法、消息

stud.display();第18頁(yè)/共74頁(yè)第3章復(fù)習(xí)要點(diǎn)構(gòu)造函數(shù)*構(gòu)造函數(shù)是特殊的公有成員函數(shù),其特征如下:

1.函數(shù)名與類(lèi)名相同。

2.構(gòu)造函數(shù)無(wú)函數(shù)返回類(lèi)型說(shuō)明。注意是什么也不寫(xiě),也不可寫(xiě)void!實(shí)際上構(gòu)造函數(shù)有返回值,返回的就是構(gòu)造函數(shù)所創(chuàng)建的對(duì)象。

3.在程序運(yùn)行時(shí),當(dāng)新的對(duì)象被建立,該對(duì)象所屬的類(lèi)的構(gòu)造函數(shù)自動(dòng)被調(diào)用,在該對(duì)象生存期中也只調(diào)用這一次。

4.構(gòu)造函數(shù)可以重載。嚴(yán)格地講,說(shuō)明中可以有多個(gè)構(gòu)造函數(shù),它們由不同的參數(shù)表區(qū)分,系統(tǒng)在自動(dòng)調(diào)用時(shí)按一般函數(shù)重載的規(guī)則選一個(gè)執(zhí)行。第19頁(yè)/共74頁(yè) 5.構(gòu)造函數(shù)可以在類(lèi)中定義,也可以在類(lèi)外定義。

6.如果類(lèi)說(shuō)明中沒(méi)有給出構(gòu)造函數(shù),則C++編譯器自動(dòng)給出一個(gè)缺省的構(gòu)造函數(shù):

類(lèi)名(void){}但只要我們定義了一個(gè)構(gòu)造函數(shù),系統(tǒng)就不會(huì)自動(dòng)生成缺省的構(gòu)造函數(shù)。

只要構(gòu)造函數(shù)是無(wú)參的或各參數(shù)均有缺省值的,C++編譯器都認(rèn)為是缺省的構(gòu)造函數(shù),并且缺省的構(gòu)造函數(shù)只能有一個(gè)。第20頁(yè)/共74頁(yè)構(gòu)造函數(shù)的重載*缺省構(gòu)造函數(shù)

Time::Time() {hour=0;minute=0;sec=0;}Timet;帶參數(shù)的構(gòu)造函數(shù)

Time::Time(inth,intm,ints) {hour=h;minute=m;sec=s;}

Timet(13,10,11);用參數(shù)初始化表

Time::Time(inth,intm,ints):hour(h),minute(m),sec(s){}使用默認(rèn)參數(shù)的構(gòu)造函數(shù)

Time::Time(inth=13,intm=10,ints=11){hour=h;minute=m;sec=s;}Timet;第21頁(yè)/共74頁(yè)析構(gòu)函數(shù) 當(dāng)一個(gè)對(duì)象定義時(shí),C++自動(dòng)調(diào)用構(gòu)造函數(shù)建立該對(duì)象并進(jìn)行初始化,那么當(dāng)一個(gè)對(duì)象的生命周期結(jié)束時(shí),C++也會(huì)自動(dòng)調(diào)用一個(gè)函數(shù)注銷(xiāo)該對(duì)象并進(jìn)行善后工作,這個(gè)特殊的成員函數(shù)即析構(gòu)函數(shù)(destructor):

1.

構(gòu)函數(shù)名與類(lèi)名相同,但在前面加上字符‘~’,如~CGoods()。

2.

析構(gòu)函數(shù)無(wú)函數(shù)返回類(lèi)型,與構(gòu)造函數(shù)在這方面是一樣的。但析構(gòu)函數(shù)不帶任何參數(shù)。

3.一個(gè)類(lèi)有一個(gè)也只有一個(gè)析構(gòu)函數(shù),這與構(gòu)造函數(shù)不同。析構(gòu)函數(shù)可以缺省。

4.對(duì)象注銷(xiāo)時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。第22頁(yè)/共74頁(yè)調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序第23頁(yè)/共74頁(yè)構(gòu)造函數(shù)和析構(gòu)函數(shù)例題1.在下面有關(guān)對(duì)構(gòu)造函數(shù)的描述中,正確的是

。A.

構(gòu)造函數(shù)可以帶有返回值B.

構(gòu)造函數(shù)的名字與類(lèi)名完全相同C.

構(gòu)造函數(shù)必須帶有參數(shù)D.構(gòu)造函數(shù)必須定義,不能缺省2.在下面有關(guān)析構(gòu)函數(shù)特征的描述中,錯(cuò)誤的是

。A.

一個(gè)類(lèi)中只能定義一個(gè)析構(gòu)函數(shù)B.

析構(gòu)函數(shù)名與類(lèi)名完全相同C.

析構(gòu)函數(shù)不能指定返回類(lèi)型D.

析構(gòu)函數(shù)不能帶有參數(shù)3.假定AB為一個(gè)類(lèi),則執(zhí)行“AB

a(4),b[3],*p[2];”語(yǔ)句時(shí),自動(dòng)調(diào)用該類(lèi)構(gòu)造函數(shù)的次數(shù)為

。3

B.4

C.6

D.94.對(duì)于任意一個(gè)類(lèi),析構(gòu)函數(shù)的個(gè)數(shù)最多為(B)A.0B.1C.2D.3第24頁(yè)/共74頁(yè)對(duì)象數(shù)組

對(duì)象數(shù)組的定義、初始化、建立數(shù)組的同時(shí)調(diào)用構(gòu)造函數(shù) P82例3.6對(duì)象指針*

1.指向?qū)ο蟮闹羔?/p>

2.指向?qū)ο蟪蓡T的指針

2.1.指向?qū)ο髷?shù)據(jù)成員的指針

2.2.指向?qū)ο蟪蓡T函數(shù)的指針

3.this指針

P85例3.7this指針的作用第25頁(yè)/共74頁(yè)共用數(shù)據(jù)的保護(hù)Const對(duì)內(nèi)存的使用—只讀不可寫(xiě)(寫(xiě)在首次/初始化完成)。常對(duì)象

constTimet; 或:Timeconstt;常數(shù)據(jù)成員

constinthour;常成員函數(shù)

voidget_time()const;第26頁(yè)/共74頁(yè)指向?qū)ο蟮某V羔?/p>

Time*constp1=&t1;指向常對(duì)象的指針變量

constTime*p1=&t1;對(duì)象的常引用

constTime&t=t1;voidfun(constTime&t);{//不可改變t的值}第27頁(yè)/共74頁(yè)對(duì)象的動(dòng)態(tài)建立和釋放new&deleteBox*pt; pt=newBox;deletept;第28頁(yè)/共74頁(yè)靜態(tài)成員Static由關(guān)鍵字static修飾說(shuō)明的類(lèi)成員,成為靜態(tài)類(lèi)成員(staticclassmember)。雖然使用static修飾說(shuō)明,但與函數(shù)中的靜態(tài)變量有明顯差異。類(lèi)的靜態(tài)成員為其所有對(duì)象共享,不管有多少對(duì)象,靜態(tài)成員只有一份存于公用內(nèi)存中。第29頁(yè)/共74頁(yè)靜態(tài)數(shù)據(jù)成員

初始化(只能在類(lèi)體外進(jìn)行初始化) 既可以通過(guò)對(duì)象名引用,也可以通過(guò)類(lèi)名來(lái)引用靜態(tài)成員函數(shù)

靜態(tài)成員函數(shù)沒(méi)有this指針 靜態(tài)成員函數(shù)訪(fǎng)問(wèn)靜態(tài)數(shù)據(jù)成員,不訪(fǎng)問(wèn)非靜態(tài)成員第30頁(yè)/共74頁(yè)對(duì)象的賦值對(duì)象的復(fù)制拷貝構(gòu)造函數(shù)類(lèi)名對(duì)象2(對(duì)象1)

Box::Box(constBox&b){height=b.height;width=b.width;length=b.length;}第31頁(yè)/共74頁(yè)Static例題假定類(lèi)AB中有一個(gè)公有屬性的靜態(tài)數(shù)據(jù)成員bb,在類(lèi)外不通過(guò)對(duì)象名訪(fǎng)問(wèn)該成員bb的寫(xiě)法為

(1)

。靜態(tài)成員(static)屬于__類(lèi)__,而不屬于__任何一個(gè)對(duì)象__,它被同一個(gè)類(lèi)的所有對(duì)象共享。第32頁(yè)/共74頁(yè)友元

友元函數(shù):friendvoiddisplay(Time&);

友元成員函數(shù):friendvoidTime::display(Date&);友元類(lèi)

允許另一個(gè)類(lèi)或函數(shù)訪(fǎng)問(wèn)你的類(lèi)的東西。ClassA{Private:inti=0;Friendclassb//聲明}ClassB{}Voidmain(){Aa1=newA();Bb1=newB();Intj=b1.i;\\可直接訪(fǎng)問(wèn)A類(lèi)里的}如B是A的友元類(lèi),那么a對(duì)b完全開(kāi)放包括private,也就是B可以訪(fǎng)問(wèn)A里任何東西第33頁(yè)/共74頁(yè)友元例題13、關(guān)于友元函數(shù)

的描述中,錯(cuò)誤的是

A.友元函數(shù)不是成員函數(shù)

B.友元函數(shù)只能訪(fǎng)問(wèn)類(lèi)中私有成員

C.友元函數(shù)破壞隱藏性,盡量少用

D.友元函數(shù)說(shuō)明在類(lèi)體內(nèi),使用關(guān)鍵字friendB第34頁(yè)/共74頁(yè)類(lèi)模版(不考)第35頁(yè)/共74頁(yè)第4章復(fù)習(xí)要點(diǎn)運(yùn)算符重載的方法*

格式:函數(shù)類(lèi)型operator運(yùn)算符名稱(chēng)(形參表列){對(duì)運(yùn)算符的重載處理} 復(fù)數(shù)+P122例4.2 運(yùn)算符重載的規(guī)則P124-126第36頁(yè)/共74頁(yè)運(yùn)算符重載的實(shí)現(xiàn)

1.類(lèi)成員函數(shù)

2.友元函數(shù)

參數(shù)個(gè)數(shù)參數(shù)次序類(lèi)成員函數(shù)參數(shù)個(gè)數(shù)=原操作數(shù)個(gè)數(shù)-1(后置++、--除外)左側(cè)為類(lèi)類(lèi)型友元函數(shù)參數(shù)個(gè)數(shù)=原操作數(shù)個(gè)數(shù),且至少應(yīng)該有一個(gè)自定義類(lèi)型的形參。隨意第37頁(yè)/共74頁(yè)雙目運(yùn)算符重載

P134例4.4單目運(yùn)算符重載區(qū)別“前置和后置”重載流插入運(yùn)算符和流提取運(yùn)算符* 重點(diǎn)是格式:友元函數(shù)/普通函數(shù)

istream&

operator>>(istream&,自定義類(lèi)&);ostream&

operator<<(ostream&,自定義類(lèi)&);第38頁(yè)/共74頁(yè)不同類(lèi)型數(shù)據(jù)間的轉(zhuǎn)換(不考)第39頁(yè)/共74頁(yè)運(yùn)算符重載例題假定要對(duì)類(lèi)AB定義加號(hào)操作符重載成員函數(shù),實(shí)現(xiàn)兩個(gè)AB類(lèi)對(duì)象的減法,并返回相減結(jié)果,則該成員函數(shù)的聲明語(yǔ)句為:()A、AB&operator-() B、ABoperator-(AB&a)C、operator-(ABa) D、ABoperator-(AB&a,AB&b)B

第40頁(yè)/共74頁(yè)第5章復(fù)習(xí)要點(diǎn)面向?qū)ο蟪绦蛟O(shè)計(jì)有4個(gè)主要特點(diǎn):

1.抽象

2.封裝

3.繼承

4.多態(tài)性第41頁(yè)/共74頁(yè)青處于藍(lán),而勝于藍(lán)繼承(inheritance)機(jī)制是面向?qū)ο蟪绦蛟O(shè)計(jì)使代碼可以復(fù)用的最重要的手段,它允許程序員在保持原有類(lèi)特性的基礎(chǔ)上進(jìn)行擴(kuò)展,增加功能。這樣產(chǎn)生新的類(lèi),稱(chēng)派生類(lèi)。繼承呈現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)的層次結(jié)構(gòu)。體現(xiàn)了由簡(jiǎn)單到復(fù)雜的認(rèn)識(shí)過(guò)程。多態(tài)性(polymorphism)多態(tài)性是考慮在不同層次的類(lèi)中,以及在同一類(lèi)中,同名的成員函數(shù)之間的關(guān)系問(wèn)題。函數(shù)的重載,運(yùn)算符的重載,屬于編譯時(shí)的多態(tài)性。以虛函數(shù)為基礎(chǔ)的運(yùn)行時(shí)的多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的標(biāo)志性特征。體現(xiàn)了類(lèi)推和比喻的思想方法。第42頁(yè)/共74頁(yè)派生類(lèi)的聲明方式定義格式*class派生類(lèi)名:訪(fǎng)問(wèn)限定符基類(lèi)名1《,訪(fǎng)問(wèn)限定符基類(lèi)名2,……,訪(fǎng)問(wèn)限定符基類(lèi)名n》{《private:》

成員表1;》

//派生類(lèi)增加或替代的私有成員《public:

成員表2;》

//派生類(lèi)增加或替代的公有成員《protected:

成員表3;》

//派生類(lèi)增加或替代的保護(hù)成員};//分號(hào)不可少第43頁(yè)/共74頁(yè)繼承過(guò)程編制派生類(lèi)時(shí)可分四步

吸收基類(lèi)的成員

改造基類(lèi)成員

發(fā)展新成員

重寫(xiě)構(gòu)造函數(shù)與析構(gòu)函數(shù)

不論是數(shù)據(jù)成員,還是函數(shù)成員,除構(gòu)造函數(shù)與析構(gòu)函數(shù)外全盤(pán)接收

聲明一個(gè)和某基類(lèi)成員同名的新成員,派生類(lèi)中的新成員就屏蔽了基類(lèi)同名成員稱(chēng)為同名覆蓋(override)派生類(lèi)新成員必須與基類(lèi)成員不同名,它的加入保證派生類(lèi)在功能上有所發(fā)展。第44頁(yè)/共74頁(yè)派生類(lèi)的構(gòu)成*第45頁(yè)/共74頁(yè)繼承分類(lèi)基類(lèi)1基類(lèi)2……基類(lèi)n派生類(lèi)1派生類(lèi)2基類(lèi)派生類(lèi)1派生類(lèi)2(a)多重繼承

(b)單繼承

一個(gè)基類(lèi)可以直接派生出多個(gè)派生類(lèi)

派生類(lèi)可以由多個(gè)基類(lèi)共同派生出來(lái),稱(chēng)多重繼承。第46頁(yè)/共74頁(yè)派生類(lèi)成員的訪(fǎng)問(wèn)屬性*第47頁(yè)/共74頁(yè)多級(jí)派生時(shí)的訪(fǎng)問(wèn)屬性

P164例5.4第48頁(yè)/共74頁(yè)繼承例題1.在公有繼承的情況下,基類(lèi)成員在派生類(lèi)中的訪(fǎng)問(wèn)權(quán)限

。A.受限制

B.保持不變

C.

受保護(hù)

D.

不受保護(hù)9.在公有派生情況下,有關(guān)派生類(lèi)對(duì)象和基類(lèi)對(duì)象的關(guān)系,不正確的敘述是(A)

A.派生類(lèi)的對(duì)象可以賦給基類(lèi)的對(duì)象

B.派生類(lèi)的對(duì)象可以初始化基類(lèi)的引用

C.派生類(lèi)的對(duì)象可以直接訪(fǎng)問(wèn)基類(lèi)中的成員

D.派生類(lèi)的對(duì)象的地址可以賦給指向基類(lèi)的指針第49頁(yè)/共74頁(yè)派生類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)*執(zhí)行派生類(lèi)構(gòu)造函數(shù)的順序是:

①調(diào)用基類(lèi)構(gòu)造函數(shù),初始化基類(lèi)數(shù)據(jù)成員 ②調(diào)用子對(duì)象構(gòu)造函數(shù),初始化子對(duì)象數(shù)據(jù)成員 ③執(zhí)行派生類(lèi)構(gòu)造函數(shù),初始化派生類(lèi)數(shù)據(jù)成員執(zhí)行派生類(lèi)析構(gòu)函數(shù)的順序是:

①調(diào)用派生類(lèi)析構(gòu)函數(shù),清理派生類(lèi)增加數(shù)據(jù)成員 ②調(diào)用子對(duì)象析構(gòu)函數(shù),清理子對(duì)象數(shù)據(jù)成員 ③調(diào)用基類(lèi)析造函數(shù),清理基類(lèi)數(shù)據(jù)成員第50頁(yè)/共74頁(yè)構(gòu)造函數(shù)和析構(gòu)函數(shù)次序例題#include<iostream>usingnamecpacestd;classB1 //基類(lèi)B1聲明{public:B1(inti){cout<<"constructingB1"<<i<<endl;}~B1(){cout<<"destructingB1"<<endl;}};classB2 //基類(lèi)B2聲明{public:B2(intj){cout<<"constructingB2"<<j<<endl;} ~B2(){cout<<"destructingB2"<<endl;} };classB3 //基類(lèi)B3聲明{public:B3(){cout<<"constructingB3*"<<endl;}~B3(){cout<<"destructingB3"<<endl;} };classC:publicB2,publicB1,publicB3 {public: C(inta,intb,intc,intd):B1(a),memberB2(d),memberB1(c),B2(b){}private: B1memberB1; B2memberB2; B3memberB3;};voidmain(){ Cobj(1,2,3,4);}第51頁(yè)/共74頁(yè)constructingB22constructingB11constructingB3*constructingB13constructingB24constructingB3*destructingB3destructingB2destructingB1destructingB3destructingB1destructingB2第52頁(yè)/共74頁(yè)派生類(lèi)構(gòu)造函數(shù)一般形式:派生類(lèi)名::派生類(lèi)名(總參數(shù)表):

基類(lèi)名(實(shí)參表),

子對(duì)象名(參數(shù)表){

派生類(lèi)新增成員的初始化語(yǔ)句; }第53頁(yè)/共74頁(yè)多層派生時(shí)的構(gòu)造函數(shù)

P172例5.7派生類(lèi)的析構(gòu)函數(shù)與構(gòu)造函數(shù)一樣,不能繼承基類(lèi)的。第54頁(yè)/共74頁(yè)派生類(lèi)例題類(lèi)A與類(lèi)B都有public數(shù)據(jù)成員f,類(lèi)C公有繼承A和B,類(lèi)C有public數(shù)據(jù)成員f,類(lèi)D保護(hù)繼承C,d是類(lèi)D的一個(gè)對(duì)象,從d訪(fǎng)問(wèn)類(lèi)A的成員f的表達(dá)式是

。d.A::f

第55頁(yè)/共74頁(yè)多重繼承定義:

classD:publicA,privateB,protectedC{類(lèi)D新增加的成員}多重繼承派生類(lèi)的構(gòu)造函數(shù)派生類(lèi)構(gòu)造函數(shù)名(總參數(shù)表):基類(lèi)1構(gòu)造函數(shù)(參數(shù)表),基類(lèi)2構(gòu)造函數(shù)(參數(shù)表),基類(lèi)3構(gòu)造函數(shù)(參數(shù)表){派生類(lèi)新增成員初始化語(yǔ)句}P176例5.8第56頁(yè)/共74頁(yè)多重繼承的二義性在多重繼承時(shí),基類(lèi)與派生類(lèi)之間,或基類(lèi)之間出現(xiàn)同名成員時(shí),將出現(xiàn)訪(fǎng)問(wèn)時(shí)的二義性(不確定性)——采用同名隱藏規(guī)則或虛函數(shù)(僅針對(duì)成員函數(shù))來(lái)解決。當(dāng)派生類(lèi)從多個(gè)基類(lèi)派生,而這些基類(lèi)又從同一個(gè)基類(lèi)派生,則在訪(fǎng)問(wèn)此共同基類(lèi)中的成員時(shí),將產(chǎn)生二義性——采用虛基類(lèi)來(lái)解決。inta;inta;inta;第57頁(yè)/共74頁(yè)虛基類(lèi)*

P185例5.9classA{……};classB:virtualpublicA{……};classC:virtualpublicA{……};第58頁(yè)/共74頁(yè)基類(lèi)與派生類(lèi)轉(zhuǎn)換*大材小用第59頁(yè)/共74頁(yè)第6章復(fù)習(xí)要點(diǎn)一個(gè)接口,多種方法多態(tài)性的概念第60頁(yè)/共74頁(yè)靜態(tài)多態(tài)在編譯程序時(shí)系統(tǒng)就可以確定調(diào)用哪個(gè)函數(shù),因此靜態(tài)多態(tài)性又稱(chēng)編譯時(shí)的多態(tài)性。靜態(tài)多態(tài)性是通過(guò)函數(shù)重載實(shí)現(xiàn)的。動(dòng)態(tài)多態(tài)在程序運(yùn)行中才能確定操作所針對(duì)的對(duì)象。它又稱(chēng)運(yùn)行時(shí)的多態(tài)性。動(dòng)態(tài)多態(tài)性是通過(guò)基類(lèi)與派生類(lèi)轉(zhuǎn)換+虛函數(shù)實(shí)現(xiàn)的。第61頁(yè)/共74頁(yè)多態(tài)性例題C++語(yǔ)言中的多態(tài)性分為

時(shí)多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯

第62頁(yè)/共74頁(yè)虛函數(shù)*虛函數(shù)是一個(gè)類(lèi)的成員函數(shù),定義格式如下:virtual返回類(lèi)型函數(shù)名(參數(shù)表);關(guān)鍵字virtual指明該成員函數(shù)為虛函數(shù)。virtual僅用于類(lèi)定義中,如虛函數(shù)在類(lèi)外定義,不可加virtual。當(dāng)某一個(gè)類(lèi)的一個(gè)類(lèi)成員函數(shù)被定義為虛函數(shù),則由該類(lèi)派生出來(lái)的所有派生類(lèi)中,該函數(shù)始終保持虛函數(shù)的特征。第63頁(yè)/共74頁(yè)當(dāng)在派生類(lèi)中重新定義虛函數(shù)(overridingavirtualfunction,亦譯作超載或覆蓋)時(shí),不必加關(guān)鍵字virtual。但重新定義時(shí)不僅要同名,而且它的參數(shù)表和返回類(lèi)型全部與基類(lèi)中的虛函數(shù)一樣,否則聯(lián)編時(shí)出錯(cuò)。虛函數(shù)與改造類(lèi)成員,同名覆蓋(override)有關(guān):如未加關(guān)鍵字virtual,則是普通的派生類(lèi)中的新成員函數(shù)覆蓋基類(lèi)同名成員函數(shù)(當(dāng)然參數(shù)表必須一樣,否則是重載),可稱(chēng)為同名覆蓋函數(shù),它不能實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性。第64頁(yè)/共74頁(yè)比較有虛函數(shù)的override和無(wú)虛函數(shù)的override,訪(fǎng)問(wèn)成員第65頁(yè)/共74頁(yè)#include<iostream.h>

classB0

{public:

voiddisplay()

{

cout<<"B0::display()"<<endl;

}

};

classB1:publicB0

{public:

voiddisplay()

{

cout<<"B1::display()"<<endl;

}

};

classD1:publicB1

{public:

voiddisplay()

{

cout<<"D1::display()"<<endl;

}

};

voidfun(B0*ptr)

{

ptr->display();}

voidmain()

{

B0b0;

B1b1;

D1d1;

B0*p;

p=&b0;

fun(p);

p=&b1;

fun(p);

p=&d1;

fun(p);

}

B0::display()

B0::display()

B0::display()

第66頁(yè)/共74頁(yè)#include<iostream.h>

classB0

{public:

virtualvoiddisplay()

{

cout<<"B0::display()"<<endl;

}

};

classB1:publicB0

{public:

voiddisplay()

{

cout<<"B1::display()"<<endl;

}

};

classD1:publicB1

{public:

voiddisplay()

{

cout<<"D1::display()"<<endl;

}

};

voidfun(B0*ptr)

{

ptr->display();}

v

溫馨提示

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

評(píng)論

0/150

提交評(píng)論