C語言試題、學(xué)習(xí)、考試大全PPT學(xué)習(xí)教案_第1頁
C語言試題、學(xué)習(xí)、考試大全PPT學(xué)習(xí)教案_第2頁
C語言試題、學(xué)習(xí)、考試大全PPT學(xué)習(xí)教案_第3頁
C語言試題、學(xué)習(xí)、考試大全PPT學(xué)習(xí)教案_第4頁
C語言試題、學(xué)習(xí)、考試大全PPT學(xué)習(xí)教案_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、會(huì)計(jì)學(xué)1C語言試題、學(xué)習(xí)、考試大全語言試題、學(xué)習(xí)、考試大全13.1 函數(shù)重載函數(shù)重載 13.2 運(yùn)算符重載運(yùn)算符重載 13.3 靜態(tài)聯(lián)編靜態(tài)聯(lián)編 13.4 動(dòng)態(tài)聯(lián)編和虛函數(shù)動(dòng)態(tài)聯(lián)編和虛函數(shù) 13.5 純虛函數(shù)和抽象類純虛函數(shù)和抽象類 第1頁/共57頁第第 13 章章 多態(tài)性多態(tài)性 多態(tài)性是實(shí)現(xiàn)多態(tài)性是實(shí)現(xiàn) OOP 的關(guān)鍵技術(shù)之一。的關(guān)鍵技術(shù)之一。 在在C+中,多態(tài)性分為兩種:中,多態(tài)性分為兩種: 靜態(tài)多態(tài)靜態(tài)多態(tài) 動(dòng)態(tài)多態(tài)動(dòng)態(tài)多態(tài) 函數(shù)重載和運(yùn)算符重載屬于靜態(tài)多態(tài)。函數(shù)重載和運(yùn)算符重載屬于靜態(tài)多態(tài)。函數(shù)重載:相同函數(shù)名可以完成不同功能。函數(shù)重載:相同函數(shù)名可以完成不同功能。運(yùn)算符重載:相同運(yùn)算

2、符完成不同功能。運(yùn)算符重載:相同運(yùn)算符完成不同功能。 動(dòng)態(tài)多態(tài)動(dòng)態(tài)多態(tài)是指:程序執(zhí)行過程中確定的關(guān)系,是指:程序執(zhí)行過程中確定的關(guān)系, 如動(dòng)態(tài)確定函數(shù)的調(diào)用關(guān)系。如動(dòng)態(tài)確定函數(shù)的調(diào)用關(guān)系。 運(yùn)行時(shí)的多態(tài)(動(dòng)態(tài)多態(tài))運(yùn)行時(shí)的多態(tài)(動(dòng)態(tài)多態(tài)) 是通過類的繼承和虛函數(shù)來實(shí)現(xiàn)的。是通過類的繼承和虛函數(shù)來實(shí)現(xiàn)的。第2頁/共57頁13.1 函數(shù)重載函數(shù)重載 參見參見5.6節(jié)(略)節(jié)(略) 13.2 重載運(yùn)算符重載運(yùn)算符 C+中所有的運(yùn)算符都已預(yù)先定義了用法及意義。中所有的運(yùn)算符都已預(yù)先定義了用法及意義。 如:如:+ * / = 等,適用于已有的數(shù)據(jù)類型。等,適用于已有的數(shù)據(jù)類型。 已定義的已定義的用法及意

3、義是不允許用戶改變的。用法及意義是不允許用戶改變的。 如果用戶定義了新的數(shù)據(jù)類型,希望已定義的運(yùn)算符如果用戶定義了新的數(shù)據(jù)類型,希望已定義的運(yùn)算符 能適應(yīng)新的數(shù)據(jù)類型,能適應(yīng)新的數(shù)據(jù)類型, 如如: 前述前述 Complex 類的加法運(yùn)算類的加法運(yùn)算Complex c1, c2, c3;c3 = add(c1, c2); /以前通過函數(shù)實(shí)現(xiàn)加法運(yùn)算以前通過函數(shù)實(shí)現(xiàn)加法運(yùn)算c2.add(c3); / 或或通過成員函數(shù)實(shí)現(xiàn)通過成員函數(shù)實(shí)現(xiàn)c3 = c1 + c2; /能否直觀地寫成這樣?能否直觀地寫成這樣?能能 ! 運(yùn)算符的重載可以達(dá)到此目的。運(yùn)算符的重載可以達(dá)到此目的。第3頁/共57頁 允許重載允

4、許重載 和和 不允許重載不允許重載的運(yùn)算符見的運(yùn)算符見13-1和和13-2表。表。13.2.1 運(yùn)算符重載的幾點(diǎn)說明運(yùn)算符重載的幾點(diǎn)說明重載運(yùn)算符的限制重載運(yùn)算符的限制(1)只能對(duì)已有運(yùn)算符重載,不可臆造新的運(yùn)算符。)只能對(duì)已有運(yùn)算符重載,不可臆造新的運(yùn)算符。(2)不允許改變運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。)不允許改變運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。(3)不允許改變運(yùn)算符的語法結(jié)構(gòu),)不允許改變運(yùn)算符的語法結(jié)構(gòu), 如二元運(yùn)算符只能重載成二元運(yùn)算符,如二元運(yùn)算符只能重載成二元運(yùn)算符, 一元運(yùn)算符只能重載成一元運(yùn)算符。一元運(yùn)算符只能重載成一元運(yùn)算符。第4頁/共57頁1.重載為類的成員函數(shù)重載為類的成員函數(shù) 在類內(nèi)

5、定義運(yùn)算符重載函數(shù)的格式為:在類內(nèi)定義運(yùn)算符重載函數(shù)的格式為: operator ( ) 以以 operator 為關(guān)鍵字,編譯器可以很容易將為關(guān)鍵字,編譯器可以很容易將運(yùn)算符重載函數(shù)與其他成員函數(shù)區(qū)別開來。運(yùn)算符重載函數(shù)與其他成員函數(shù)區(qū)別開來。例例13.2 實(shí)現(xiàn)復(fù)數(shù)類的實(shí)現(xiàn)復(fù)數(shù)類的“+”,“-”等重載運(yùn)算等重載運(yùn)算 關(guān)鍵部分見下頁關(guān)鍵部分見下頁13.2.2 運(yùn)算符重載的兩種方式運(yùn)算符重載的兩種方式在類外定義運(yùn)算符重載函數(shù)的格式為:在類外定義運(yùn)算符重載函數(shù)的格式為: :operator ( )特殊的成員函數(shù)名特殊的成員函數(shù)名第5頁/共57頁class Complex float Real, I

6、mage;public: . Complex operator +(const Complex &c); Complex operator +(double); Complex operator-(const Complex &c); Complex operator-(double); Complex operator-(void); . ;Complex Complex:operator +(const Complex &c) return Complex (Real+c.Real, Image+c.Image); Complex Complex:operator +(double r)

7、return Complex(Real+r, Image); Complex Complex:operator-(void) return Complex(-Real, -Image); 第6頁/共57頁void main( ) Complex c1(2, 3), c2(4, -2), c3; c3 = c1+c2 ; c3 = c1+5 ; c3 = - c1; 編譯器將編譯器將 c1+c2 解釋為:解釋為:c1.operator+(c2)將將 c1+5 解釋為:解釋為:c1.operator+(5)第第1個(gè)運(yùn)算量是對(duì)象,第個(gè)運(yùn)算量是對(duì)象,第2個(gè)運(yùn)算量是參數(shù)。個(gè)運(yùn)算量是參數(shù)。閱讀教材上程序全

8、文閱讀教材上程序全文(講解略)(講解略)將將 - c1 解釋為:解釋為:c1.operator( ) 當(dāng)用成員函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí),重載函數(shù)的當(dāng)用成員函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí),重載函數(shù)的 參數(shù)個(gè)數(shù)只能是參數(shù)個(gè)數(shù)只能是 0 個(gè)或個(gè)或 1 個(gè)。分別實(shí)現(xiàn):一元、二元個(gè)。分別實(shí)現(xiàn):一元、二元 運(yùn)算符的重載。運(yùn)算符的重載。第7頁/共57頁2.重載為友元函數(shù)重載為友元函數(shù) 例例13.3 用友元函數(shù)實(shí)現(xiàn)復(fù)數(shù)類的用友元函數(shù)實(shí)現(xiàn)復(fù)數(shù)類的“+”和和“” 重載運(yùn)算重載運(yùn)算 關(guān)鍵部分見下頁關(guān)鍵部分見下頁在在類內(nèi)類內(nèi)定義友元重載函數(shù)的格式為:定義友元重載函數(shù)的格式為:friend operator ( )在在類外類外定

9、義友元重載函數(shù)的格式為:定義友元重載函數(shù)的格式為: operator ( )第8頁/共57頁class Complex float Real, Image;public: . friend Complex operator +(const Complex &c1, const Complex &c2); friend Complex operator(const Complex &c); . ;Complex operator +(const Complex &c1, const Complex &c2)/二元運(yùn)算二元運(yùn)算 Complex t; t.Real=c1.Real+c2.Real;

10、t.Image=c1.Image+c2.Image; return t;Complex operator(const Complex c) /一元運(yùn)算一元運(yùn)算 return Complex(c.Real, c.Image) ;不是類的成員函數(shù)不是類的成員函數(shù)在在 main( )函數(shù)中函數(shù)中,若有若有 Complex c1,c2; 則編譯器將則編譯器將 c1+c2 解釋為:解釋為:operator+(c1, c2)將將 c1 解釋為:解釋為:operator(c1)第9頁/共57頁閱讀教材上程序全文閱讀教材上程序全文(講解略)(講解略) 當(dāng)用友元函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí),重載函數(shù)的當(dāng)用友元函數(shù)實(shí)現(xiàn)

11、運(yùn)算符的重載時(shí),重載函數(shù)的 參數(shù)個(gè)數(shù)只能是參數(shù)個(gè)數(shù)只能是1 個(gè)或個(gè)或 2 個(gè)。個(gè)。 分別實(shí)現(xiàn):分別實(shí)現(xiàn):一元一元運(yùn)算符重載、運(yùn)算符重載、二元二元運(yùn)算符重載運(yùn)算符重載3.兩種重載方式的比較兩種重載方式的比較 成員實(shí)現(xiàn):成員實(shí)現(xiàn):將將 c1+c2 解釋為:解釋為:c1.operator +(c2)友元實(shí)現(xiàn):友元實(shí)現(xiàn):將將 c1+c2 解釋為:解釋為:operator +(c1, c2)成員實(shí)現(xiàn):成員實(shí)現(xiàn):將將 c1+5.6 解釋為:解釋為:c1.operator +(5.6)友元實(shí)現(xiàn):友元實(shí)現(xiàn):將將 c1+5.6 解釋為:解釋為:operator +(c1, 5.6)成員實(shí)現(xiàn):成員實(shí)現(xiàn):將將 5.

12、6 + c1解釋為:解釋為: 5.6.operator + (c1) 友元實(shí)現(xiàn):友元實(shí)現(xiàn):將將 5.6 + c1解釋為:解釋為:operator + ( 5.6, c1)第10頁/共57頁因此:因此:對(duì)一般的二元運(yùn)算符重載為友元函數(shù)比重載為成員函對(duì)一般的二元運(yùn)算符重載為友元函數(shù)比重載為成員函數(shù)更優(yōu)越。數(shù)更優(yōu)越。但是對(duì)于賦值運(yùn)算符,將其重載為成員函數(shù)較好,因但是對(duì)于賦值運(yùn)算符,將其重載為成員函數(shù)較好,因?yàn)橘x值運(yùn)算符是一個(gè)二元運(yùn)算符,為賦值運(yùn)算符是一個(gè)二元運(yùn)算符,其語法格式為其語法格式為 =,第一個(gè)運(yùn)算量必須是對(duì)象(變量也是對(duì)象),通過對(duì)象第一個(gè)運(yùn)算量必須是對(duì)象(變量也是對(duì)象),通過對(duì)象調(diào)用成員函

13、數(shù)比較自然。調(diào)用成員函數(shù)比較自然。若重載為友元,則可能會(huì)出現(xiàn)若重載為友元,則可能會(huì)出現(xiàn)5.6=c這樣的表達(dá)式,與這樣的表達(dá)式,與賦值表達(dá)式的語義不一致。賦值表達(dá)式的語義不一致。 第11頁/共57頁定義友元的目的是在友元函數(shù)中直接訪問類的私有成員,定義友元的目的是在友元函數(shù)中直接訪問類的私有成員,實(shí)際上,也可以通過公有函數(shù)接口訪問類的私有成員,實(shí)際上,也可以通過公有函數(shù)接口訪問類的私有成員,所以所以實(shí)現(xiàn)運(yùn)算符重載,可以即不用成員函數(shù),實(shí)現(xiàn)運(yùn)算符重載,可以即不用成員函數(shù),也不用友元函數(shù)。也不用友元函數(shù)。class Complex float Real, Image;public: Complex(

14、double r=0, double i=0) Real=r; Image=i; void SetReal(double Real) Complex:Real = Real; void SetImage(double Image) Complex:Image = Image; double GetReal( ) return(Real); double GetImage( ) return(Image); ; 4.使用非成員、非友元實(shí)現(xiàn)運(yùn)算符的重載使用非成員、非友元實(shí)現(xiàn)運(yùn)算符的重載例例13.4:第12頁/共57頁Complex operator +(Complex &c1, Complex &

15、c2) /二元運(yùn)算二元運(yùn)算 Complex t; t.SetReal( c1.GetReal( )+c2.GetReal( ) ); t.SetImage( c1.GetImage( )+c2.GetImage( ) ); return t; void main( )Complex c1(2, 3), c2(4, 8), c3;c3 = c1+c2;c3.Show( );編譯器將編譯器將 c1+c2 解釋為:解釋為:operator +(c1, c2)第13頁/共57頁對(duì)于對(duì)于Complex類,如有類,如有Complex c1(2, 3), c2; 則自動(dòng)將則自動(dòng)將 c2=c1; 處理成:處理

16、成: c2.Real = c1.Real; c2.Image = c1. Image; 一般不會(huì)出現(xiàn)問題。一般不會(huì)出現(xiàn)問題。 5. 何時(shí)必須重載何時(shí)必須重載 = 和和 += 運(yùn)算符?運(yùn)算符? 相同類型的對(duì)象之間是可以直接賦值的,相同類型的對(duì)象之間是可以直接賦值的,C+將賦將賦值處理成兩個(gè)對(duì)象的各個(gè)成員直接賦值。兩個(gè)對(duì)象值處理成兩個(gè)對(duì)象的各個(gè)成員直接賦值。兩個(gè)對(duì)象的對(duì)應(yīng)數(shù)據(jù)成員逐一賦值。的對(duì)應(yīng)數(shù)據(jù)成員逐一賦值。例例13.5 在類中,用字符數(shù)組實(shí)現(xiàn)字符串。在類中,用字符數(shù)組實(shí)現(xiàn)字符串。 見見 “第第13章章 多態(tài)性多態(tài)性(例子例子).doc”第14頁/共57頁Num數(shù)組數(shù)組Name數(shù)組數(shù)組Scor

17、e整數(shù)整數(shù)stud1存儲(chǔ)空間存儲(chǔ)空間Num數(shù)組數(shù)組Name數(shù)組數(shù)組Score整數(shù)整數(shù)stud2存儲(chǔ)空間存儲(chǔ)空間程序中程序中A行使用賦值運(yùn)算符進(jìn)行對(duì)象整體賦值,行使用賦值運(yùn)算符進(jìn)行對(duì)象整體賦值, C+將其處理成各個(gè)成員逐一賦值將其處理成各個(gè)成員逐一賦值,如下圖所示:如下圖所示: :C+默認(rèn)的處理是:默認(rèn)的處理是:strcpy(stud2.Num, stud1.Num); strcpy(stud2.Name, stud1.Name); stud2.Score = stud1.Score; 。 但是如果對(duì)象的成員中有成員指向動(dòng)態(tài)分配的但是如果對(duì)象的成員中有成員指向動(dòng)態(tài)分配的 數(shù)據(jù)空間就會(huì)出現(xiàn)問題。數(shù)

18、據(jù)空間就會(huì)出現(xiàn)問題。 第15頁/共57頁例例13.6 在類中,用指針實(shí)現(xiàn)字符串,在類中,用指針實(shí)現(xiàn)字符串, 即字符串的空間是動(dòng)態(tài)分配的。即字符串的空間是動(dòng)態(tài)分配的。 class Studentchar *Nump; /學(xué)號(hào),注意:用指針實(shí)現(xiàn)學(xué)號(hào),注意:用指針實(shí)現(xiàn)char *Namep; /姓名,注意:用指針實(shí)現(xiàn)姓名,注意:用指針實(shí)現(xiàn)int Score; /成績(jī)成績(jī)public: Student(char *nump=NULL, char *namep=NULL, int score=0) if(nump) /構(gòu)造函數(shù)構(gòu)造函數(shù) Nump = new charstrlen(nump)+1;strc

19、py(Nump, nump); /動(dòng)態(tài)分配存儲(chǔ)空間動(dòng)態(tài)分配存儲(chǔ)空間 else Nump=NULL; if(namep) Score=score;第16頁/共57頁Student( ) / 析構(gòu)函數(shù),釋放指針指向的空間析構(gòu)函數(shù),釋放指針指向的空間 if(Nump)delete Nump;if(Namep)delete Namep;void Show( ) if(Nump & Namep) coutNum=NumptName=NameptScore=Scoreendl;第17頁/共57頁void main( )Student stud1(01201, Mary, 88), stud2;stud2=

20、stud1; /Astud1.Show( );stud2.Show( );cout.flush( ); /BNump指針指針Namep指針指針Score整數(shù)整數(shù)stud2存儲(chǔ)空間存儲(chǔ)空間Nump指針指針Namep指針指針Score整數(shù)整數(shù)stud1存儲(chǔ)空間存儲(chǔ)空間01201Mary首先撤消對(duì)象首先撤消對(duì)象stud2,然后撤消對(duì)象,然后撤消對(duì)象stud1 ,出問,出問題!題!同一對(duì)象被撤銷兩次。同一對(duì)象被撤銷兩次。 編譯器將編譯器將A行處理成:行處理成:第18頁/共57頁解決辦法,在類中增加賦值解決辦法,在類中增加賦值 = 重載函數(shù):重載函數(shù):Student & operator=(const

21、Student &stud) / 返回值為對(duì)象自身的引用返回值為對(duì)象自身的引用 if(Nump)delete Nump; / C 釋放對(duì)象自身的原串空間釋放對(duì)象自身的原串空間 if(Namep)delete Namep; / D 釋放對(duì)象自身的原串空間釋放對(duì)象自身的原串空間 if(stud.Nump) / 根據(jù)賦值對(duì)象的空間大小給被賦值對(duì)象分配空間根據(jù)賦值對(duì)象的空間大小給被賦值對(duì)象分配空間 Nump = new charstrlen(stud.Nump)+1;strcpy(Nump, stud.Nump); else Nump=NULL; if(stud.Namep) / 根據(jù)賦值對(duì)象的空間大

22、小給被賦值對(duì)象分配空間根據(jù)賦值對(duì)象的空間大小給被賦值對(duì)象分配空間 Namep = new charstrlen(stud.Namep)+1;strcpy(Namep, stud.Namep); else Namep=NULL; Score=stud.Score; return *this; / *this是對(duì)象自身是對(duì)象自身 第19頁/共57頁Nump指針指針Namep指針指針Score整數(shù)整數(shù)stud2存儲(chǔ)空間存儲(chǔ)空間Nump指針指針Namep指針指針Score整數(shù)整數(shù)stud1存儲(chǔ)空間存儲(chǔ)空間01201Mary01201Mary在賦值時(shí),為目的對(duì)象的指針重新分配指向的字符在賦值時(shí),為目的對(duì)

23、象的指針重新分配指向的字符串空間。串空間。增加賦值增加賦值 = 重載函數(shù)后,對(duì)象賦值后的存儲(chǔ)空間如重載函數(shù)后,對(duì)象賦值后的存儲(chǔ)空間如下:下:這樣,程序結(jié)束時(shí),分別撤銷兩個(gè)對(duì)象,程序正確這樣,程序結(jié)束時(shí),分別撤銷兩個(gè)對(duì)象,程序正確運(yùn)行!運(yùn)行!第20頁/共57頁6對(duì)于對(duì)于+=(或(或=)運(yùn)算符,重載函數(shù)的返回值為)運(yùn)算符,重載函數(shù)的返回值為void類型或本類類型對(duì)象的區(qū)別類型或本類類型對(duì)象的區(qū)別 例例13.7 見見 “第第13章章 多態(tài)性多態(tài)性(例子例子).doc”若重載為返回若重載為返回void類型,則本類對(duì)象不可連續(xù)賦值類型,則本類對(duì)象不可連續(xù)賦值。若重載為返回本類類型,則本類對(duì)象可以連續(xù)賦值

24、若重載為返回本類類型,則本類對(duì)象可以連續(xù)賦值。第21頁/共57頁7對(duì)于對(duì)于+=(或(或=)運(yùn)算符,返回本類對(duì)象與返回)運(yùn)算符,返回本類對(duì)象與返回本類對(duì)象的引用的區(qū)別本類對(duì)象的引用的區(qū)別 比較下面兩例,先看比較下面兩例,先看第一個(gè)例子:第一個(gè)例子: Complex Complex :operator+=(const Complex &c) Real+=c.Real; Image+=c.Image; return *this; 此函數(shù)的返回值為本類對(duì)象,此函數(shù)的返回值為本類對(duì)象,C+的處理是:用返的處理是:用返回的對(duì)象值回的對(duì)象值*this初始化內(nèi)存臨時(shí)對(duì)象(調(diào)用拷貝構(gòu)初始化內(nèi)存臨時(shí)對(duì)象(調(diào)用拷貝

25、構(gòu)造函數(shù)),從本函數(shù)返回后,造函數(shù)),從本函數(shù)返回后,用內(nèi)存臨時(shí)對(duì)象作為用內(nèi)存臨時(shí)對(duì)象作為調(diào)用函數(shù)的結(jié)果。調(diào)用函數(shù)的結(jié)果。 第22頁/共57頁再看第二個(gè)例子:再看第二個(gè)例子:Complex Complex :operator+=(const Complex &c) Real+=c.Real; Image+=c.Image; Complex temp = *this ;return temp;C+的處理是:調(diào)用拷貝構(gòu)造函數(shù),用返回的對(duì)象的處理是:調(diào)用拷貝構(gòu)造函數(shù),用返回的對(duì)象值值temp初始化內(nèi)存臨時(shí)對(duì)象,初始化內(nèi)存臨時(shí)對(duì)象,內(nèi)存臨時(shí)對(duì)象作為調(diào)內(nèi)存臨時(shí)對(duì)象作為調(diào)用函數(shù)的結(jié)果。用函數(shù)的結(jié)果。 第2

26、3頁/共57頁從上面兩個(gè)小例子可以看出,從上面兩個(gè)小例子可以看出,若重載函數(shù)返回對(duì)象值若重載函數(shù)返回對(duì)象值,則返回則返回*this和返回和返回temp均可。均可。但要注意,但要注意,因?yàn)榉祷貙?duì)象值時(shí)需要調(diào)用拷貝構(gòu)造函數(shù)因?yàn)榉祷貙?duì)象值時(shí)需要調(diào)用拷貝構(gòu)造函數(shù)初始化內(nèi)存臨時(shí)對(duì)象,因此若對(duì)象有動(dòng)態(tài)分配的存儲(chǔ)初始化內(nèi)存臨時(shí)對(duì)象,因此若對(duì)象有動(dòng)態(tài)分配的存儲(chǔ)空間,就必須定義拷貝構(gòu)造函數(shù)。空間,就必須定義拷貝構(gòu)造函數(shù)。 第24頁/共57頁第三個(gè)例子:第三個(gè)例子: Complex & Complex :operator+=(const Complex &c) Real+=c.Real; Image+=c.Ima

27、ge;return *this; 本例的返回值為本類對(duì)象的引用,本例的返回值為本類對(duì)象的引用,不需初始化內(nèi)存臨時(shí)不需初始化內(nèi)存臨時(shí)對(duì)象,對(duì)象,返回值是對(duì)象自身,即返回值是對(duì)象自身,即*this。因?yàn)椴恍枰跏蓟?。因?yàn)椴恍枰跏蓟瘍?nèi)存臨時(shí)對(duì)象,效率較高,所以像內(nèi)存臨時(shí)對(duì)象,效率較高,所以像 +=、= 等改變對(duì)象值等改變對(duì)象值的重載函數(shù)最好返回對(duì)象的引用。的重載函數(shù)最好返回對(duì)象的引用。 第25頁/共57頁第四個(gè)例子:第四個(gè)例子:Complex & Complex :operator+=(const Complex &c) Real+=c.Real; Image += c.Image; Comple

28、x temp = *this ;return temp;此時(shí),此時(shí),出現(xiàn)問題。出現(xiàn)問題。因?yàn)榉祷氐氖菍?duì)象的引用(即對(duì)象自因?yàn)榉祷氐氖菍?duì)象的引用(即對(duì)象自身,不借助于內(nèi)存臨時(shí)對(duì)象),系統(tǒng)要求在執(zhí)行流程返身,不借助于內(nèi)存臨時(shí)對(duì)象),系統(tǒng)要求在執(zhí)行流程返回到調(diào)用處時(shí),返回值是存在的。但是本例返回值是函回到調(diào)用處時(shí),返回值是存在的。但是本例返回值是函數(shù)內(nèi)部的局部對(duì)象數(shù)內(nèi)部的局部對(duì)象temp,而局部對(duì)象在函數(shù)返回前,其,而局部對(duì)象在函數(shù)返回前,其空間是被撤消的??臻g是被撤消的。第26頁/共57頁結(jié)論:結(jié)論: 返回本類對(duì)象時(shí),可以用對(duì)象自身和局部對(duì)象做為返回返回本類對(duì)象時(shí),可以用對(duì)象自身和局部對(duì)象做為返回

29、值(有時(shí)需要定義拷貝構(gòu)造函數(shù))。值(有時(shí)需要定義拷貝構(gòu)造函數(shù))。 返回對(duì)象的引用時(shí),不能用局部對(duì)象做為返回值。返回對(duì)象的引用時(shí),不能用局部對(duì)象做為返回值。例例13.8對(duì)于字符串類,重載對(duì)于字符串類,重載 = 運(yùn)算符,返回對(duì)象自身運(yùn)算符,返回對(duì)象自身的引用。就本例而言,可以不定義拷貝構(gòu)造函數(shù),程的引用。就本例而言,可以不定義拷貝構(gòu)造函數(shù),程序能正確運(yùn)行。序能正確運(yùn)行。 見見 “第第13章章 多態(tài)性多態(tài)性(例子例子).doc”第27頁/共57頁8.調(diào)用調(diào)用拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù) 和和 調(diào)用調(diào)用賦值運(yùn)算符重載函數(shù)賦值運(yùn)算符重載函數(shù)的時(shí)機(jī)的時(shí)機(jī) class Complexdouble Real, I

30、mage;public:Complex(double r=0, double i=0) / 構(gòu)造函數(shù)構(gòu)造函數(shù) Real=r; Image=i; Complex(Complex &c) / 拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù) Real=c.Real; Image=c.Image; coutCall copy Real Imagen; ;void main( )Complex c1(2, 3), c2(4, -2);Complex c3=c1; c1=c2; 程序的運(yùn)行結(jié)果是?程序的運(yùn)行結(jié)果是?調(diào)用了拷貝構(gòu)造函數(shù)調(diào)用了拷貝構(gòu)造函數(shù)未調(diào)用拷貝構(gòu)造函數(shù)未調(diào)用拷貝構(gòu)造函數(shù)Call copy 2 3v只有在產(chǎn)生新對(duì)

31、象時(shí),調(diào)用構(gòu)造函數(shù)。只有在產(chǎn)生新對(duì)象時(shí),調(diào)用構(gòu)造函數(shù)。v用已有對(duì)象初始化新產(chǎn)生的對(duì)象時(shí),用已有對(duì)象初始化新產(chǎn)生的對(duì)象時(shí), 調(diào)用拷貝構(gòu)造函數(shù)。調(diào)用拷貝構(gòu)造函數(shù)。v賦值運(yùn)算賦值運(yùn)算 = , 不調(diào)用拷貝構(gòu)造函數(shù)。不調(diào)用拷貝構(gòu)造函數(shù)。第28頁/共57頁13.2.3 類型轉(zhuǎn)換函數(shù)將本類對(duì)象轉(zhuǎn)換成其他類對(duì)類型轉(zhuǎn)換函數(shù)將本類對(duì)象轉(zhuǎn)換成其他類對(duì)象象 例例: Complex c(3, 2); double x=6.2;如果有如果有: c=x; /類型不一致類型不一致 或或: x=c; /類型不一致類型不一致則系統(tǒng)自動(dòng)處理為則系統(tǒng)自動(dòng)處理為: c = Complex(x); /需作類型轉(zhuǎn)換需作類型轉(zhuǎn)換 x = d

32、ouble(c); /需作類型轉(zhuǎn)換需作類型轉(zhuǎn)換對(duì)于,通過以前所學(xué)的對(duì)于,通過以前所學(xué)的構(gòu)造函數(shù)構(gòu)造函數(shù)實(shí)現(xiàn)類型轉(zhuǎn)換,實(shí)現(xiàn)類型轉(zhuǎn)換, 將其他類型的數(shù)據(jù)轉(zhuǎn)換成本類數(shù)據(jù)將其他類型的數(shù)據(jù)轉(zhuǎn)換成本類數(shù)據(jù)。對(duì)于,使用本節(jié)將介紹的類型轉(zhuǎn)換對(duì)于,使用本節(jié)將介紹的類型轉(zhuǎn)換運(yùn)算符重載函數(shù)運(yùn)算符重載函數(shù), 將本類數(shù)據(jù)轉(zhuǎn)換成將本類數(shù)據(jù)轉(zhuǎn)換成其他類型的數(shù)據(jù)。其他類型的數(shù)據(jù)。構(gòu)造函數(shù):構(gòu)造函數(shù):Complex:Complex(double r) real = r ; image = 0; 第29頁/共57頁定義類型轉(zhuǎn)換函數(shù)定義類型轉(zhuǎn)換函數(shù): 功能:功能:將將 類對(duì)象自動(dòng)轉(zhuǎn)換成類對(duì)象自動(dòng)轉(zhuǎn)換成 類型對(duì)象類型對(duì)象類型轉(zhuǎn)換函數(shù)

33、只能用成員函數(shù)實(shí)現(xiàn)類型轉(zhuǎn)換函數(shù)只能用成員函數(shù)實(shí)現(xiàn), 不能用友元函數(shù)實(shí)現(xiàn)。不能用友元函數(shù)實(shí)現(xiàn)。在類內(nèi)定義類型轉(zhuǎn)換函數(shù)的一般格式為:在類內(nèi)定義類型轉(zhuǎn)換函數(shù)的一般格式為:operator ( ) . 在類外定義類型轉(zhuǎn)換函數(shù)的一般格式為:在類外定義類型轉(zhuǎn)換函數(shù)的一般格式為: : operator ( ) . 該函數(shù)不能有參數(shù),該函數(shù)不能有參數(shù),不能寫返回值類型,不能寫返回值類型, 因返回值類型已確定。因返回值類型已確定。第30頁/共57頁例例13.10 類型轉(zhuǎn)換函數(shù)的定義和使用類型轉(zhuǎn)換函數(shù)的定義和使用 #include class Complexdouble Real, Image;public:Co

34、mplex(double r=0, double i=0) Real=r; Image=i; operator double ( ) / A 類型轉(zhuǎn)換函數(shù),類型轉(zhuǎn)換函數(shù), / 將將 Complex 類轉(zhuǎn)換成類轉(zhuǎn)換成 double 類類 return Real; ;void main( ) Complex c(3,2);double x;x = c; / B cout x= x endl;/ 即即 x = double (c) ;系統(tǒng)自動(dòng)處理為系統(tǒng)自動(dòng)處理為 x = c.operator double( );第31頁/共57頁例例13.11 成員函數(shù)和類型轉(zhuǎn)換函數(shù)的比較成員函數(shù)和類型轉(zhuǎn)換函數(shù)的比

35、較見見 “第第13章章 多態(tài)性多態(tài)性(例子例子).doc”其中主函數(shù)為:其中主函數(shù)為:void main(void)RMB r(23, 8, 6);int r1, r2, r3;r1= r ; /處理成處理成 r1 = r.operator int( );r2= int(r); /處理成處理成 r2 = r.operator int( ) ;r3= r.GetFen( ); coutr1=r1endl;coutr2=r2endl;coutr3=r3endl; 使用使用類型自動(dòng)轉(zhuǎn)換類型自動(dòng)轉(zhuǎn)換 較方便、自然。較方便、自然。第32頁/共57頁13.2.4 其他運(yùn)算符的重載其他運(yùn)算符的重載1重載重載

36、+、-運(yùn)算符運(yùn)算符 重載重載前置前置 + 運(yùn)算符的運(yùn)算符的成員成員函數(shù)的一般格式為:函數(shù)的一般格式為: :operator+ ( ) . 重載重載后置后置 + 運(yùn)算符的運(yùn)算符的成員成員函數(shù)的一般格式為:函數(shù)的一般格式為: :operator+ (int) . int 用于區(qū)分,沒有實(shí)際意義,用于區(qū)分,沒有實(shí)際意義,可給出實(shí)參,也可以不給出實(shí)參??山o出實(shí)參,也可以不給出實(shí)參。第33頁/共57頁重載重載前置前置 + 運(yùn)算符的運(yùn)算符的友元友元函數(shù)的一般格式為:函數(shù)的一般格式為:friend operator+ ( &obj ) . 重載重載后置后置+運(yùn)算符的運(yùn)算符的友元友元函數(shù)的一般格式為:函數(shù)的一

37、般格式為:friend operator+ ( &obj, int) . int 用于區(qū)分,沒有實(shí)際意義,用于區(qū)分,沒有實(shí)際意義,可給出實(shí)參,也可以不給出實(shí)參??山o出實(shí)參,也可以不給出實(shí)參。例例13.12 實(shí)現(xiàn)實(shí)現(xiàn)+和和 - 的前置和后置運(yùn)算符重載,的前置和后置運(yùn)算符重載, 程序見程序見 “第第13章章 多態(tài)性多態(tài)性(例子例子).doc”第34頁/共57頁13.2.5 字符串類字符串類C+ 提供的字符串處理能力較弱,如不能用運(yùn)算符直提供的字符串處理能力較弱,如不能用運(yùn)算符直接對(duì)字符串對(duì)象進(jìn)行加、減等操作,接對(duì)字符串對(duì)象進(jìn)行加、減等操作,而必須通過字符串處理函數(shù)來實(shí)現(xiàn)拷貝、連接等操作而必須通過字

38、符串處理函數(shù)來實(shí)現(xiàn)拷貝、連接等操作。如:如:char s110=abc, s210=123; strcpy(s1, s2); /不能寫成不能寫成 s1= s2; strcat(s1, s2); /不能寫成不能寫成 s1= s1+s2;能否定義一個(gè)字符串類:能否定義一個(gè)字符串類:String 實(shí)現(xiàn):實(shí)現(xiàn): String s1(abc), s2(123), s3; s1 = s2; s3 = s1 + s2;能能! 可以利用可以利用C+提供的運(yùn)算符重載實(shí)現(xiàn)。提供的運(yùn)算符重載實(shí)現(xiàn)。第35頁/共57頁例例13.18 定義字符串類定義字符串類String,并測(cè)試重載的運(yùn)算,并測(cè)試重載的運(yùn)算符以及成員函數(shù)

39、符以及成員函數(shù) 程序見程序見 “第第13章章 多態(tài)性多態(tài)性(例子例子).doc”,或閱讀教材,或閱讀教材上的程序。上的程序。重點(diǎn)講解:重點(diǎn)講解:(1) 說明:函數(shù)名后的說明:函數(shù)名后的 const(2) (拷貝拷貝)構(gòu)造函數(shù),在主函數(shù)中如何使用?構(gòu)造函數(shù),在主函數(shù)中如何使用?(3) 重載賦值重載賦值 = 運(yùn)算符運(yùn)算符(4) 重載重載 + 運(yùn)算符運(yùn)算符(5) 類型轉(zhuǎn)換函數(shù)類型轉(zhuǎn)換函數(shù) operator const char *(6) 刪除子串圖示見下頁刪除子串圖示見下頁第36頁/共57頁刪除子串:刪除子串:String operator - (const String &s1, const ch

40、ar *s2 ) lenp1p2s1.Strps2t.Strp第37頁/共57頁13.3 靜態(tài)聯(lián)編靜態(tài)聯(lián)編聯(lián)編是指一個(gè)計(jì)算機(jī)程序彼此關(guān)聯(lián)的過程。聯(lián)編是指一個(gè)計(jì)算機(jī)程序彼此關(guān)聯(lián)的過程。 在本章中指在本章中指函數(shù)間調(diào)用關(guān)系的確定函數(shù)間調(diào)用關(guān)系的確定。按照聯(lián)編所確定的時(shí)刻不同,可分為兩種:按照聯(lián)編所確定的時(shí)刻不同,可分為兩種: 靜態(tài)聯(lián)編靜態(tài)聯(lián)編和和動(dòng)態(tài)聯(lián)編動(dòng)態(tài)聯(lián)編。 靜態(tài)聯(lián)編是指聯(lián)編出現(xiàn)在編譯連接階段,靜態(tài)聯(lián)編是指聯(lián)編出現(xiàn)在編譯連接階段, 即函數(shù)調(diào)用關(guān)系的確定是在程序執(zhí)行之前。即函數(shù)調(diào)用關(guān)系的確定是在程序執(zhí)行之前。這種聯(lián)編又稱早期聯(lián)編,這種聯(lián)編又稱早期聯(lián)編, 通過這種聯(lián)編可實(shí)現(xiàn)靜態(tài)多態(tài)。通過這種聯(lián)編

41、可實(shí)現(xiàn)靜態(tài)多態(tài)。 第38頁/共57頁例例13.20 普通函數(shù)的靜態(tài)聯(lián)編普通函數(shù)的靜態(tài)聯(lián)編#include int add(int a, int b) /重載函數(shù)重載函數(shù)1 return(a+b); double add(double a, double b) /重載函數(shù)重載函數(shù)2 return(a+b); void main( ) coutadd(1, 2)t; /編譯時(shí)確定調(diào)用重載函數(shù)編譯時(shí)確定調(diào)用重載函數(shù)1 coutadd(1.1, 2.2)n; /編譯時(shí)確定調(diào)用重載函數(shù)編譯時(shí)確定調(diào)用重載函數(shù)2在編譯連接階段,就能根據(jù)參數(shù)的個(gè)數(shù)和類型確定調(diào)用在編譯連接階段,就能根據(jù)參數(shù)的個(gè)數(shù)和類型確定調(diào)用

42、的是哪一個(gè)函數(shù)。的是哪一個(gè)函數(shù)。 第39頁/共57頁例例13.21 讀書上程序讀書上程序 重點(diǎn)講解:重點(diǎn)講解:double CalcArea( Point &p ) return(p.Area( ); /A 編譯連接時(shí)確定調(diào)用函數(shù)編譯連接時(shí)確定調(diào)用函數(shù) 1void main( ) Rectangle r(0, 0, 1, 1); Circle c(0, 0, 1); coutCalcArea( r )t; coutCalcArea( c )n;Point Rectangle Circle能否找到一種機(jī)制,能否找到一種機(jī)制,讓讓CalcArea( )函數(shù)變成一個(gè)函數(shù)變成一個(gè)通用的求面積的函數(shù)。通

43、用的求面積的函數(shù)。這就是這就是C+提供的動(dòng)態(tài)聯(lián)編和提供的動(dòng)態(tài)聯(lián)編和虛函數(shù)應(yīng)完成的工作。虛函數(shù)應(yīng)完成的工作。 用派生類實(shí)參初始化基類型參,用派生類實(shí)參初始化基類型參,p只能引用基類的成員。只能引用基類的成員。第40頁/共57頁13.4 動(dòng)態(tài)聯(lián)編和虛函數(shù)動(dòng)態(tài)聯(lián)編和虛函數(shù)運(yùn)行階段才能確定函數(shù)的調(diào)用關(guān)系,這就是動(dòng)態(tài)聯(lián)編運(yùn)行階段才能確定函數(shù)的調(diào)用關(guān)系,這就是動(dòng)態(tài)聯(lián)編 動(dòng)態(tài)聯(lián)編又稱滯后聯(lián)編、晚期聯(lián)編,動(dòng)態(tài)聯(lián)編又稱滯后聯(lián)編、晚期聯(lián)編, 動(dòng)態(tài)聯(lián)編技術(shù)能實(shí)現(xiàn)動(dòng)態(tài)多態(tài)。動(dòng)態(tài)聯(lián)編技術(shù)能實(shí)現(xiàn)動(dòng)態(tài)多態(tài)。 必須將類的成員函數(shù)定義成虛函數(shù),必須將類的成員函數(shù)定義成虛函數(shù), 才可以實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編。才可以實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編。 將成員函

44、數(shù)定義成虛函數(shù)的格式為:將成員函數(shù)定義成虛函數(shù)的格式為:virtual ( ) 13.4.1 虛函數(shù)虛函數(shù)第41頁/共57頁重點(diǎn)講解:重點(diǎn)講解:double CalcArea(Point &p) return( p.Area( ) ); /A Area( )是虛函數(shù)是虛函數(shù)void main( ) Point p(1, 2); Rectangle r(0, 0, 1, 1); Circle c(0, 0, 1); coutCalcArea( p )t CalcArea( r )t CalcArea( c )n;例例13.22 閱讀書上程序閱讀書上程序Area( )是虛函數(shù)是虛函數(shù) ,C+ 規(guī)定

45、,規(guī)定,在在 A 行保留相關(guān)的行保留相關(guān)的三個(gè)虛函數(shù)入口地址三個(gè)虛函數(shù)入口地址 。在程序的運(yùn)行階段,在程序的運(yùn)行階段,根據(jù)實(shí)參的類型來確定根據(jù)實(shí)參的類型來確定調(diào)用哪一個(gè)虛函數(shù)。調(diào)用哪一個(gè)虛函數(shù)。通用的通用的求求面積函數(shù)面積函數(shù)第42頁/共57頁(1)派生類的虛函數(shù)必須與基類虛函數(shù)同名,)派生類的虛函數(shù)必須與基類虛函數(shù)同名, 且參數(shù)的類型、個(gè)數(shù)、順序必須一致,且參數(shù)的類型、個(gè)數(shù)、順序必須一致, 否則,屬于函數(shù)重載,而不是虛函數(shù)。否則,屬于函數(shù)重載,而不是虛函數(shù)。有關(guān)虛函數(shù)的說明:有關(guān)虛函數(shù)的說明: (2)基類中虛函數(shù)前的關(guān)鍵字)基類中虛函數(shù)前的關(guān)鍵字virtual不能缺省。不能缺省。 (3)必須

46、通過基類對(duì)象的)必須通過基類對(duì)象的指針或引用指針或引用調(diào)用虛函數(shù),調(diào)用虛函數(shù), 才能實(shí)現(xiàn)動(dòng)態(tài)多態(tài)。才能實(shí)現(xiàn)動(dòng)態(tài)多態(tài)。 (4)虛函數(shù)必須是類的成員函數(shù),不能是友元函數(shù),)虛函數(shù)必須是類的成員函數(shù),不能是友元函數(shù), 也不能是靜態(tài)成員函數(shù)。也不能是靜態(tài)成員函數(shù)。 (5)不能將構(gòu)造函數(shù)定義為虛函數(shù),)不能將構(gòu)造函數(shù)定義為虛函數(shù), 但可將析構(gòu)函數(shù)定義為虛函數(shù)。但可將析構(gòu)函數(shù)定義為虛函數(shù)。 (6)調(diào)用虛函數(shù)速度較慢。因?yàn)椋獙?shí)現(xiàn)動(dòng)態(tài)多態(tài),)調(diào)用虛函數(shù)速度較慢。因?yàn)?,要?shí)現(xiàn)動(dòng)態(tài)多態(tài), 在函數(shù)調(diào)用處必須保留多個(gè)虛函數(shù)的入口地址。在函數(shù)調(diào)用處必須保留多個(gè)虛函數(shù)的入口地址。第43頁/共57頁例例13.23 在成員

47、函數(shù)中調(diào)用在成員函數(shù)中調(diào)用虛函數(shù)虛函數(shù)程序見程序見 “第第13章章 多態(tài)性多態(tài)性(例子例子).doc”,或閱讀教材上的程序?;蜷喿x教材上的程序。我們注意,我們注意,在成員函數(shù)中調(diào)用成員函數(shù)時(shí),在成員函數(shù)中調(diào)用成員函數(shù)時(shí),系統(tǒng)都是通過對(duì)象自身的指針系統(tǒng)都是通過對(duì)象自身的指針this調(diào)用的,調(diào)用的,A類中的類中的fun2( )的實(shí)際被處理成如下形式:的實(shí)際被處理成如下形式:void fun2( ) cout A:fun2 fun3( ); /EB b;b.fun1( ); / 調(diào)用調(diào)用A類的類的fun1( )和和fun2( ),在,在A類的類的fun2( )函數(shù)中,函數(shù)中, / 在在E行行, th

48、is 是指向是指向b的指針的指針, 所以調(diào)用所以調(diào)用B的的fun3( )函數(shù)函數(shù)第44頁/共57頁class Apublic: A( ) fun( ); virtual void fun( ) cout A:fun t; ;class B: public A public: B( ) fun( ); void fun( ) cout B:fun t; void g( ) fun( ); / 在成員函數(shù)中調(diào)用在成員函數(shù)中調(diào)用虛函數(shù)虛函數(shù); A B C 例例13.24 在構(gòu)造函數(shù)中調(diào)用在構(gòu)造函數(shù)中調(diào)用虛函數(shù)虛函數(shù)第45頁/共57頁class C: public B public:C( ) fun(

49、 ); void fun( ) cout C:fun n; ;void main( ) C c; /依次調(diào)用依次調(diào)用A、B、C三類的缺省構(gòu)造函數(shù)三類的缺省構(gòu)造函數(shù) c.g( );運(yùn)行結(jié)果:運(yùn)行結(jié)果:A:fun B:fun C:funC:fun構(gòu)造函數(shù)調(diào)用虛函數(shù),調(diào)用的是類本身的虛函數(shù)。構(gòu)造函數(shù)調(diào)用虛函數(shù),調(diào)用的是類本身的虛函數(shù)。成員函數(shù)調(diào)用成員函數(shù)調(diào)用虛函數(shù)虛函數(shù),遵循動(dòng)態(tài)多態(tài)性原則。,遵循動(dòng)態(tài)多態(tài)性原則。ABC第46頁/共57頁13.4.2 虛析構(gòu)函數(shù)虛析構(gòu)函數(shù)如果類的構(gòu)造函數(shù)中有如果類的構(gòu)造函數(shù)中有動(dòng)態(tài)申請(qǐng)動(dòng)態(tài)申請(qǐng)的存儲(chǔ)空間,的存儲(chǔ)空間,在析構(gòu)函數(shù)中在析構(gòu)函數(shù)中應(yīng)釋放該空間應(yīng)釋放該空間。此

50、時(shí),建議將析構(gòu)函數(shù)定義為虛函數(shù),此時(shí),建議將析構(gòu)函數(shù)定義為虛函數(shù),以便實(shí)現(xiàn)以便實(shí)現(xiàn)通過基類的指針或引用通過基類的指針或引用撤消派生類對(duì)象撤消派生類對(duì)象時(shí)的多態(tài)性。時(shí)的多態(tài)性。 第47頁/共57頁#include class Achar *Aptr;public:A( ) Aptr = new char100; A( ) /析構(gòu)函數(shù)不是虛函數(shù)析構(gòu)函數(shù)不是虛函數(shù) delete Aptr; coutDelete Aptrendl; ;例例: 析構(gòu)函數(shù)不是虛函數(shù)的情況析構(gòu)函數(shù)不是虛函數(shù)的情況第48頁/共57頁class B : public A char *Bptr; public: B( ) Bptr=new char100; B( ) delete Bptr; coutDelete Bptrendl; ;void main(void)B b; 輸出結(jié)果:輸出結(jié)果:Delete BptrDelete Aptr系統(tǒng)自動(dòng)撤銷派生類對(duì)象,系統(tǒng)自動(dòng)撤銷派生類對(duì)象,不需要將析構(gòu)函數(shù)定義為虛函數(shù)不需要將析構(gòu)函數(shù)定義為虛函數(shù)。第49頁/共57頁void main(void)A *p=new B; delete p;A &p1=*(new B); delete &p1;輸出結(jié)果:輸出結(jié)果:Delete Apt

溫馨提示

  • 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)論