




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、計算機學院 計算機網(wǎng)絡與信息安全研究室 張榮博 Shenyang Aerospace University1第第8 8章章 多態(tài)性多態(tài)性8.1 多態(tài)性多態(tài)性8.4 純虛函數(shù)純虛函數(shù)()()8.3 虛函數(shù)虛函數(shù)()8.2 運算符重載運算符重載()()8.5 抽象類抽象類Shenyang Aerospace University2教學目標教學目標 理解廣義多態(tài)性與狹義多態(tài)性的區(qū)別與聯(lián)系。理解廣義多態(tài)性與狹義多態(tài)性的區(qū)別與聯(lián)系。熟練掌握運算符重載的應用方法。熟練掌握運算符重載的應用方法。重點及難點重點及難點 重點:運算符重載的格式。重點:運算符重載的格式。 難點:運算符重載的應用。難點:運算符重載的
2、應用。Shenyang Aerospace University3多態(tài)性多態(tài)性q封裝性、封裝性、繼承性繼承性、多態(tài)性多態(tài)性構(gòu)成了面向?qū)ο蟪绦蛟O計構(gòu)成了面向?qū)ο蟪绦蛟O計的三大特性。的三大特性。q多態(tài)性是指發(fā)出多態(tài)性是指發(fā)出被被接收接收時有可能導致時有可能導致。q多態(tài)的分類:多態(tài)的分類:重載多態(tài)重載多態(tài) 通過函數(shù)重載來實現(xiàn)(包括運算符重載)通過函數(shù)重載來實現(xiàn)(包括運算符重載) 強制多態(tài)強制多態(tài) 通過強制類型轉(zhuǎn)換實現(xiàn)。通過強制類型轉(zhuǎn)換實現(xiàn)。包含多態(tài)包含多態(tài) 通過虛函數(shù)來實現(xiàn)。通過虛函數(shù)來實現(xiàn)。參數(shù)多態(tài)參數(shù)多態(tài) 通過模板來實現(xiàn)。(也叫泛型編程)通過模板來實現(xiàn)。(也叫泛型編程) Shenyang Aer
3、ospace University4函數(shù)重載 普通函數(shù)的重載普通函數(shù)的重載void max (int a, int b);void max (float a, float b);void max (float a, float b, float c); 類成員函數(shù)的重載類成員函數(shù)的重載同一個類內(nèi)的同名函數(shù)(參數(shù)表不同)。同一個類內(nèi)的同名函數(shù)(參數(shù)表不同)。 同名函數(shù)的隱藏同名函數(shù)的隱藏不同類內(nèi)的同名函數(shù)。不同類內(nèi)的同名函數(shù)。Shenyang Aerospace University5運算符重載運算符重載的需要class Complex/復數(shù)類聲明public:Complex (double r
4、=0.0,double i=0.0);void display( );/顯示復數(shù)的值private:double real;double imag;Shenyang Aerospace University6 如何實現(xiàn)兩復數(shù)相加?而數(shù)學中用“+”進行兩個復數(shù)求和,“-”求差!C3 = C1 + C2; C = C1-C2;Shenyang Aerospace University7運算符重載的定義q什么是運算符重載?什么是運算符重載?所謂運算符重載就是所謂運算符重載就是賦予已有的運算符多重含義賦予已有的運算符多重含義。 C+C+中預定義的運算符只適用于基本數(shù)據(jù)類型,而中預定義的運算符只適用于基
5、本數(shù)據(jù)類型,而不適用于用戶自定義類型(如類)不適用于用戶自定義類型(如類). . 運算符重載運算符重載使運算符的運算對象擴充為自定義類型。使運算符的運算對象擴充為自定義類型。main() complex c1 , c2 ; / 復數(shù)類對象復數(shù)類對象 c1 = c1 +c2;Shenyang Aerospace University8運算符重載的實質(zhì)運算符重載的實質(zhì)q將指定的運算表達式轉(zhuǎn)化為對運算符函數(shù)的將指定的運算表達式轉(zhuǎn)化為對運算符函數(shù)的調(diào)用,運算對象轉(zhuǎn)化為運算符函數(shù)的實參。調(diào)用,運算對象轉(zhuǎn)化為運算符函數(shù)的實參。q編譯系統(tǒng)對重載運算符的選擇,遵循函數(shù)重編譯系統(tǒng)對重載運算符的選擇,遵循函數(shù)重載
6、的選擇原則。載的選擇原則。Shenyang Aerospace University9運算符重載的規(guī)則1.1. 只能重載只能重載C+C+語言中已有的、可以重載的語言中已有的、可以重載的運算符,不可臆造新的運算符。運算符,不可臆造新的運算符。+*(乘乘)/%&|!=+=*=/=%=&=!=&|+ ( )-NewDelete C+ 中不可以被重載的運算符:中不可以被重載的運算符:* (指針運算符指針運算符)Shenyang Aerospace University10運算符重載的規(guī)則2.2. 不改變原運算符的優(yōu)先級和結(jié)合性。不改變原運算符的優(yōu)先級和結(jié)合性。3.3. 不能改變
7、操作數(shù)個數(shù)。不能改變操作數(shù)個數(shù)。4.4. 經(jīng)重載的運算符,其操作數(shù)中至少應該有經(jīng)重載的運算符,其操作數(shù)中至少應該有一個是自定義類型。一個是自定義類型。int a = b+c*d;int a = b+c;Complex a, c;int b;c = a+b;Shenyang Aerospace University11運算符重載的形式Shenyang Aerospace University12運算符函數(shù) 聲明形式聲明形式type operator (形參(形參1 1,形參,形參2 2, ) . . Point operator = (const Point &src );Point o
8、perator = (const Point &src ); Point operator+( Point a, Point b );Point operator+( Point a, Point b ); Point operator+();Point operator+();Shenyang Aerospace University13 聲明形式聲明形式type operator (形參(形參1 1,形參,形參2 2, ) . . 重載為重載為類成員函數(shù)類成員函數(shù)時時 參數(shù)個數(shù)參數(shù)個數(shù)= =原操作數(shù)個數(shù)原操作數(shù)個數(shù)-1-1(后置(后置+、-除外)除外) 重載為重載為友元函數(shù)友元函數(shù)
9、時時 參數(shù)個數(shù)參數(shù)個數(shù)= =原操作數(shù)個數(shù)原操作數(shù)個數(shù),且至少應該有一個自定,且至少應該有一個自定義類型的形參。義類型的形參。Shenyang Aerospace University14二元運算符二元運算符對任意二元運算符對任意二元運算符 : aa bb 如如: aa+bb: aa+bb可以解釋為:可以解釋為: aa . operator ( bb )aa . operator ( bb ) operator ( aa , bb )operator ( aa , bb )二元運算符函數(shù)二元運算符函數(shù) operator 所需的一個操作數(shù)由對象所需的一個操作數(shù)由對象 aaaa通過通過 this t
10、his 指針隱含地傳遞。因此它只有一個參數(shù)。這時,運算符指針隱含地傳遞。因此它只有一個參數(shù)。這時,運算符函數(shù)用類的函數(shù)用類的 成員函數(shù)成員函數(shù) 表示。表示。二元運算符函數(shù)二元運算符函數(shù) operator 所需的兩個操作數(shù)在參數(shù)表中所需的兩個操作數(shù)在參數(shù)表中由對象由對象 aa aa 和和 bbbb顯式地提供,適用于沒有顯式地提供,適用于沒有thisthis指針的情況。這時,指針的情況。這時,運算符函數(shù)用類的運算符函數(shù)用類的 友員函數(shù)友員函數(shù) 表示表示Shenyang Aerospace University15用成員函數(shù)重載運算符例例1 1:將:將“+”+”、“-”-”運算重載為復數(shù)類的運算重載
11、為復數(shù)類的成員函數(shù)。成員函數(shù)。 規(guī)則規(guī)則: :實部和虛部分別相加減。實部和虛部分別相加減。 操作數(shù)操作數(shù): :兩個操作數(shù)都是復數(shù)類的對象。兩個操作數(shù)都是復數(shù)類的對象。Shenyang Aerospace University16#includeusing namespace std;class Complex/復數(shù)類聲明public:/外部接口Complex(double r=0.0,double i=0.0)real=r;imag=i; /構(gòu)造函數(shù)Complex operator + (Complex c2); /+重載為成員函數(shù)Complex operator - (Complex c2)
12、; /-重載為成員函數(shù)void display( );/輸出復數(shù)private:/私有數(shù)據(jù)成員double real;/復數(shù)實部double imag;/復數(shù)虛部;Shenyang Aerospace University17/運算符重載函數(shù)實現(xiàn)Complex Complex : operator + ( Complex c2 )Complex c;c.real=c2.real+real;c.imag=c2.imag+imag;return Complex(c.real,c.imag);Complex Complex : operator - ( Complex c2 )Complex c;c
13、.real=c2.real-real;c.imag=c2.imag-imag;return Complex(c.real,c.imag);Shenyang Aerospace University18void Complex:display( ) cout(real,imag)endl; void main( ) /主函數(shù)主函數(shù) Complex c1(5,4),c2(2,10),c3; /聲明復數(shù)類的對象聲明復數(shù)類的對象cout c1=; c1.display( );coutc2=; c2.display( );c3=c1-c2;/使用重載運算符完成復數(shù)減法使用重載運算符完成復數(shù)減法coutc
14、3=c1-c2=;c3.display( );c3=c1+c2;/使用重載運算符完成復數(shù)加法使用重載運算符完成復數(shù)加法coutc3=c1+c2=;c3.display( );c1=(5,4)c2=(2,10)c3=c1-c2=(3,-6)c3=c1+c2=(7,14)Shenyang Aerospace University19一元運算符一元運算符 一元運算符,不論是一元運算符,不論是前置前置還是還是后置后置,都需要一個操作數(shù):,都需要一個操作數(shù):obj及及 obj可以解釋為:可以解釋為: obj. operator ( )obj. operator ( ) operator ( obj )o
15、perator ( obj ) 一元運算符函數(shù)一元運算符函數(shù) operator 所需的一個操作數(shù)由對象所需的一個操作數(shù)由對象 objobj通過通過this this 指針隱含地傳遞,因此參數(shù)表為空。這時,運算符函指針隱含地傳遞,因此參數(shù)表為空。這時,運算符函數(shù)用類的數(shù)用類的 成員函數(shù)成員函數(shù) 表示。表示。一元運算符函數(shù)一元運算符函數(shù) operator 所需的一個操作數(shù)在參數(shù)表中所需的一個操作數(shù)在參數(shù)表中由對象顯式地提供,適用于沒有由對象顯式地提供,適用于沒有thisthis指針的情況。這時,運算符指針的情況。這時,運算符函數(shù)用類的函數(shù)用類的 友員函數(shù)友員函數(shù) 表示。表示。Shenyang Ae
16、rospace University20例例2. 2. 將運算符前置將運算符前置+(例如(例如 +i+i)和后置)和后置+(例如(例如i+i+)重載為時鐘類的)重載為時鐘類的成員函數(shù)成員函數(shù)。說明說明 前置單目運算符,重載函數(shù)沒有形參,后置單前置單目運算符,重載函數(shù)沒有形參,后置單目運算符,重載函數(shù)需要有一個整型形參。目運算符,重載函數(shù)需要有一個整型形參。 操作數(shù)是時鐘類的對象。操作數(shù)是時鐘類的對象。 實現(xiàn)時間增加實現(xiàn)時間增加1 1秒鐘。秒鐘。Shenyang Aerospace University21#includeusing namespace std;class Clock/時鐘類聲明
17、public:/外部接口Clock(int NewH=0, int NewM=0, int NewS=0);void operator +( ); /前置一元運算符重載void operator +( int ); /后置一元運算符重載private:/私有數(shù)據(jù)成員int Hour, Minute, Second;Shenyang Aerospace University22void Clock:operator +( )/前置一元運算符重載函數(shù) Second+;if(Second=60) Second=Second-60;Minute+;if(Minute=60) Minute=Minute
18、-60;Hour+;Hour=Hour%24; cout+Clock: “Hour“:”Minute“:”Seconde;Shenyang Aerospace University23void Clock:operator +(int) /后置一元運算符重載 coutClock+: “Hour“:”Minute“:”=60) Second=Second-60;Minute+;if(Minute=60) Minute=Minute-60; Hour+; Hour=Hour%24;Shenyang Aerospace University24/其它成員函數(shù)的實現(xiàn)略void main( )Clock
19、 myClock(23,59,59);myClock+; /運算符后置+myClock; /運算符前置Clock+: 23:59:59+Clock: 0:0:1Shenyang Aerospace University25有時候,用成員函數(shù)重載運算符會碰到麻煩。有時候,用成員函數(shù)重載運算符會碰到麻煩。例如:例如:class Complex int Real ;int Imag ; public : Complex ( int a ) Real = a ; Imag = 0 ; Complex ( int a , int b ) Real = a ; Imag = b ; Complex ope
20、rator + ( Complex ) ;. ; int main ( ) Complex z ( 2 , 3 ) , k ( 3 , 4 ) ; z = z + 27 ;/ ok z = 27 + z ;/error .表達式 z + 27 可被解釋為z . operator + ( 27 ) z 是復數(shù)對象,使用“ + ”的 重載版本; 由于重載算符函數(shù)要求的 右操作數(shù)也為復數(shù),系統(tǒng)通過 構(gòu)造函數(shù) Complex ( int a ) 將 整數(shù) 27 轉(zhuǎn)換為 Complex 類常 量Complex ( 27 ) 表達式表達式 27 + z 可被解釋為可被解釋為 27 . operator +
21、 ( z ) 該式子毫無意義。該式子毫無意義。 27不是不是 Complex 類對象,類對象, 不能調(diào)用算符重載函數(shù)與對象不能調(diào)用算符重載函數(shù)與對象 z 相加相加 ! 此時,成員函數(shù)重載的算此時,成員函數(shù)重載的算 符符“ + ”不支持交換律。不支持交換律。Shenyang Aerospace University26用友元重載運算符 采用友元運算符的時機采用友元運算符的時機: 在第一個參數(shù)需要隱式轉(zhuǎn)換的情形下,使用友在第一個參數(shù)需要隱式轉(zhuǎn)換的情形下,使用友員函數(shù)重載算符是正確的選擇。員函數(shù)重載算符是正確的選擇。 原因原因: 由于友員函數(shù)沒有隱含由于友員函數(shù)沒有隱含 this this 指針,用
22、友員函指針,用友員函數(shù)重載算符時,所需操作數(shù)都必須在參數(shù)表顯數(shù)重載算符時,所需操作數(shù)都必須在參數(shù)表顯式聲明,所以很容易實現(xiàn)類型的隱式轉(zhuǎn)換。式聲明,所以很容易實現(xiàn)類型的隱式轉(zhuǎn)換。Shenyang Aerospace University27例3.將+、-(二元運算符)重載為復數(shù)類的友元函數(shù)。說明:兩個操作數(shù)都是復數(shù)類的對象。Shenyang Aerospace University28#includeusing namespace std;class complexpublic: complex(double r=0.0,double i=0.0) /構(gòu)造函數(shù)構(gòu)造函數(shù) real=r; imag=
23、i; friend complex operator + (complex c1,complex c2);/運算符運算符+ +重載為友元函數(shù)重載為友元函數(shù)friend complex operator - (complex c1,complex c2); /運算符運算符- -重載為友元函數(shù)重載為友元函數(shù)void display( ); private:double real;double imag;Shenyang Aerospace University29complex operator + (complex c1,complex c2) /運算符重載友元函數(shù)實現(xiàn)運算符重載友元函數(shù)實現(xiàn) r
24、eturn complex(c2.real+c1.real, c2.imag+c1.imag);complex operator - (complex c1,complex c2) /運算符重載友元函數(shù)實現(xiàn)運算符重載友元函數(shù)實現(xiàn)return complex(c1.real-c2.real, c1.imag-c2.imag);/ / 其它函數(shù)和主函數(shù)同例其它函數(shù)和主函數(shù)同例1 1Shenyang Aerospace University30使用友員運算符重載的問題首先看一個三維坐標點類的設計,例首先看一個三維坐標點類的設計,例4 4: / / 重載重載“+”“+”/ / 重載重載“+” Shen
25、yang Aerospace University31 & Shenyang Aerospace University32在上例中,類在上例中,類 Point3D 用成員函數(shù)重載用成員函數(shù)重載“+”的版本是:的版本是: Point3D& Point3D : operator + + ( ) x + + ; y + + ; z + + ; return *this ; / ok , / ok , 修改了修改了this this 指針所指對象指針所指對象用成員函數(shù)重載一元算符時,所需要的唯一變元通過用成員函數(shù)重載一元算符時,所需要的唯一變元通過 this this 指針傳遞,對指針
26、傳遞,對 this this 所指向的數(shù)據(jù)的任何改變都所指向的數(shù)據(jù)的任何改變都會影響到激活運算符函數(shù)的對象會影響到激活運算符函數(shù)的對象Shenyang Aerospace University331. 但若定義友員函數(shù)但若定義友員函數(shù) friend operator + + ( ) 版本:版本: Point3D & Point3D : operator + + (Point3D opl ) opl . x + + ; opl . y + + ; opl . z + + ; return opl ; operator + + (Point3D opl )函數(shù)是傳值的,對函數(shù)是傳值的,對
27、opl opl 的所有修改都無法傳到函數(shù)體外,不會影響被的所有修改都無法傳到函數(shù)體外,不會影響被調(diào)用的對象調(diào)用的對象Shenyang Aerospace University34C+ 不知道如何激活該函數(shù),下述代碼無法編譯:不知道如何激活該函數(shù),下述代碼無法編譯:Point3D ob ( 1 , 2 , 3 ) ;& ob + + ;/ errorShenyang Aerospace University35下述代碼是正確的:下述代碼是正確的:Shenyang Aerospace University36運算符重載說明q 若一運算符的操作需要若一運算符的操作需要修改類對象狀態(tài)修改類對象
28、狀態(tài)時,則時,則它它應該是成員函數(shù)應該是成員函數(shù)(如(如 =,*=,+)。定義成友)。定義成友員時要用引用參數(shù)。員時要用引用參數(shù)。q 如果運算符的操作數(shù)(尤其是第一個操作數(shù))如果運算符的操作數(shù)(尤其是第一個操作數(shù))希望有希望有隱式轉(zhuǎn)換,則重載算符時必須隱式轉(zhuǎn)換,則重載算符時必須用友員函數(shù)用友員函數(shù)q 不能用友員函數(shù)重載的運算符是不能用友員函數(shù)重載的運算符是=()() Shenyang Aerospace University37常見運算符重載舉例1、重載賦值運算符( a = b)重載格式重載格式Shenyang Aerospace University38 / / 省略省略其它成員函數(shù)定義其它
29、成員函數(shù)定義Shenyang Aerospace University39有關說明有關說明重載的運算符函數(shù)重載的運算符函數(shù) operator = 必須是成員函數(shù);必須是成員函數(shù);如果用戶沒有為類重載賦值運算符函數(shù),編輯程序?qū)⑷绻脩魶]有為類重載賦值運算符函數(shù),編輯程序?qū)⑸梢粋€缺省的賦值運算符;生成一個缺省的賦值運算符;拷貝函數(shù)用于創(chuàng)建一個新對象,賦值運算符是改變一拷貝函數(shù)用于創(chuàng)建一個新對象,賦值運算符是改變一個已存在的對象的值;個已存在的對象的值;使用缺省的賦值運算符。對于簡單的類(使用缺省的賦值運算符。對于簡單的類(Point3D),),缺省賦值函數(shù)工作得很好。但數(shù)據(jù)成員使用指針時會出缺省
30、賦值函數(shù)工作得很好。但數(shù)據(jù)成員使用指針時會出問題。問題。Shenyang Aerospace University40class string char * p ; int size ; string ( int sz ): size (sz) p = new char sz ; string ( ) delete p ; ;Shenyang Aerospace University41class string char * p ; int size ; string ( int sz ): size (sz) p = new char sz ; string ( ) delete p ; ;
31、Shenyang Aerospace University42/ / 防止防止 s1 = s2s1 = s2/ / 釋放釋放 s1 s1 對象指向的內(nèi)存空間對象指向的內(nèi)存空間/ / 重新分配重新分配 s1 s1 的空間的空間Shenyang Aerospace University43&TomJohnS1.pS2.p&TomJohnS1.pJohn新建存儲區(qū)新建存儲區(qū)拷貝串拷貝串&S2.p釋放空間釋放空間內(nèi)存空間變化情況p = new char size = a . size ; strcpy ( p , a . p ) ;Shenyang Aerospace Univ
32、ersity為什么賦值運算符不能聲明為友元?#include using namespace std; class A int x;public: A()x=99; A(int xx) coutCall A(int xx)endl; x = xx; ;44int main() A a; a = 7;程序執(zhí)行結(jié)果為:程序執(zhí)行結(jié)果為: Call A(Call A(intint xx) xx)說明執(zhí)行說明執(zhí)行a = 7a = 7這程序語句這程序語句時,程序去調(diào)用類時,程序去調(diào)用類A A中的帶中的帶參構(gòu)造函數(shù)。參構(gòu)造函數(shù)。Shenyang Aerospace University 在類在類A A中加入
33、一賦值運算重載成員函數(shù),如下中加入一賦值運算重載成員函數(shù),如下 A operator=(int xx) / /重載賦值運算符運算重載賦值運算符運算 coutCall A operator=(int xx), , () 為什么不能重載為友元函數(shù),也是跟上面一樣的道理。即編譯器發(fā)現(xiàn)當類中沒有定義這3個運算符的重載成員函數(shù)時,就會自己加入默認的運算符重載成員函數(shù)。48Shenyang Aerospace University賦值運算符不能聲明為靜態(tài)成員? C+C+規(guī)定賦值運算符規(guī)定賦值運算符“= =”只能重載為類的只能重載為類的非靜態(tài)成員函數(shù)。非靜態(tài)成員函數(shù)。 因為靜態(tài)成員函數(shù)是屬于整個類的,不是因
34、為靜態(tài)成員函數(shù)是屬于整個類的,不是屬于某個對象的,它只能去操作類靜態(tài)數(shù)屬于某個對象的,它只能去操作類靜態(tài)數(shù)據(jù)成員。而賦值運算符據(jù)成員。而賦值運算符“= =”是基于對象操是基于對象操作的。作的。49Shenyang Aerospace University重載賦值運算符為什么要返回引用? 1、c/c+賦值運算符的本意為“返回左值的引用”(左值:賦值號左面的變量而非其值) int a, b = 3, c = 2;(a = b) = c;coutabcendl; 結(jié)果:結(jié)果:232232對于對于a = b(aa = b(a,b b均為對象時均為對象時) ),若不返回左值的引用,若不返回左值的引用,將
35、會生成臨時對象。如果不處理將會生成臨時對象。如果不處理a = b = ca = b = c這樣的表達式這樣的表達式,也會正常,也會正常( (只是會調(diào)用拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù)處理臨只是會調(diào)用拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù)處理臨時對象時對象) )。50Shenyang Aerospace University2、為了進行連續(xù)賦值,即、為了進行連續(xù)賦值,即 x = y = z(1)賦值返回引用賦值返回引用x = y = z x = y = z 先執(zhí)行先執(zhí)行y = zy = z,返回,返回y y的引用,執(zhí)行的引用,執(zhí)行x = yx = y(2 2)賦值不返回引用)賦值不返回引用x = y = z x = y
36、= z 先執(zhí)行先執(zhí)行y = zy = z,返回用,返回用y y初始化的臨時對象初始化的臨時對象( (注意臨時對象都是常對象注意臨時對象都是常對象) ),再執(zhí)行,再執(zhí)行x = yx = y的臨時對象的臨時對象( (要要求求operator=(const X&) )operator=(const X&) ),返回用,返回用x x初始化的臨時對象初始化的臨時對象( (此處要求拷貝構(gòu)造函數(shù)必須為此處要求拷貝構(gòu)造函數(shù)必須為X(const X&) )X(const X&) )。所以也并非必須返回引用,返回引用的好處既可以于賦值的所以也并非必須返回引用,返回引用的好處既可以于
37、賦值的原始語義已知,又可避免拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用原始語義已知,又可避免拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用。51Shenyang Aerospace University522、重載下標運算符、重載下標運算符 int main() int arr10; arr10 = 0; int tmp = arr10; return 0;設設 x 是類是類 X 的一個對象,則表達式的一個對象,則表達式 x y 可被解釋為可被解釋為x . operator ( y )重載時,只能顯式地聲明一個參數(shù)重載時,只能顯式地聲明一個參數(shù)Shenyang Aerospace University53 下面的類下面的類V
38、ector中定義了一個私有的數(shù)組成員,要想訪問數(shù)組中的某個元素,中定義了一個私有的數(shù)組成員,要想訪問數(shù)組中的某個元素,習慣上是使用下標比較直觀(如習慣上是使用下標比較直觀(如Vector4),但由于類的封裝性,但由于類的封裝性,不可能訪問到這樣的細節(jié)??梢酝ㄟ^重載下標運算符不可能訪問到這樣的細節(jié)。可以通過重載下標運算符 來實現(xiàn)。來實現(xiàn)。/file Vector.h#ifndef VECTOR_H#define VECTOR_H#include using namespace std;class VectorVectorint length ;int *arr;public: VectorVec
39、tor(int len); VectorVector();void Print();void Add(int value);/返回當前下標所指數(shù)組元素返回當前下標所指數(shù)組元素int &operator(int n);#endif/file Vector.cpp#include VectorVector.hVectorVector : VectorVector(int len)arr=new intlen;if (arr=NULL) exit(1);length=0;VectorVector : VectorVector() if (arr!=NULL) delete arr;arr=N
40、ULL;void VectorVector :Print()coutn數(shù)組元素數(shù)組元素:;for(int i=0;ilength;i+)coutarri ;Shenyang Aerospace University54void VectorVector :Add(int value)arrlength+=value;int & VectorVector :operator(int n)return arrn;/file Main.cpp#include VectorVector.hvoid main()VectorVector vectorvector(5);cout請連續(xù)輸入請連續(xù)輸
41、入5個整數(shù)個整數(shù)n;int tempvalue;for(int i=0;itempvalue; vectorvector.Add(tempvalue); vectorvector.Print();vectorvector3=50;coutn修改后的修改后的 和輸出運算符 ”可以實現(xiàn)實現(xiàn)用戶自定義類型的輸入輸出可以實現(xiàn)實現(xiàn)用戶自定義類型的輸入輸出/file Complex.h#ifndef COMPLEX_H#define COMPLEX _H#include using namespace std;class Complexfloat real,imag;public:Complex(float r,float i)real=r; imag=i;Complex()real=0;imag=0;friend ostream & operator (istream &,Complex &);#endifShenyang Aerospace Univ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Module 1 Unit 2 He's cool(教學設計)-2023-2024學年外研版(三起)英語四年級下冊
- 設備供貨裝合同范本
- 1秋天 第一課時 教學設計-2024-2025學年語文一年級上冊統(tǒng)編版(五四制)
- 綠化栽植勞務合同范本
- 10《我們所了解的環(huán)境污染》(教學設計)-部編版道德與法治四年級上冊
- Unit 1 My Classroom Part B. Lets talk. Lets play (教學設計)-2024-2025學年人教PEP版英語四年級上冊
- 3《學會反思》教學設計-2023-2024學年道德與法治六年級下冊統(tǒng)編版
- 外裝合同范本
- 個人購買瓷磚合同范本
- 2023-2024學年高二上學期體育與健康人教版必修第一冊教學設計
- 婦產(chǎn)科運用PDCA降低產(chǎn)后乳房脹痛發(fā)生率品管圈成果報告書
- 第四章泵的汽蝕
- 數(shù)字孿生水利工程建設技術(shù)導則(試行)
- GB/T 90.1-2023緊固件驗收檢查
- 2023屆高三生物一輪復習必修一二背誦默寫紙條課堂默寫
- (魯科版五四制)小學三四五年級全部單詞(帶音標)
- 湘教版二年級下冊科學教案
- 高考地理復習課件:摩爾曼斯克(共12張PPT)
- 壓力容器分析設計習題
- GB/T 5915-2020仔豬、生長育肥豬配合飼料
- 五十二個中醫(yī)護理方案
評論
0/150
提交評論