第十三章運(yùn)算符重載_第1頁
第十三章運(yùn)算符重載_第2頁
第十三章運(yùn)算符重載_第3頁
第十三章運(yùn)算符重載_第4頁
第十三章運(yùn)算符重載_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第十三章第十三章 運(yùn)算符重載運(yùn)算符重載函數(shù)的重載函數(shù)的重載所謂函數(shù)的重載是指完成不同功能的函數(shù)可以具所謂函數(shù)的重載是指完成不同功能的函數(shù)可以具有有相同的函數(shù)名相同的函數(shù)名。 C+的編譯器是根據(jù)的編譯器是根據(jù)函數(shù)的實(shí)參函數(shù)的實(shí)參來確定應(yīng)該調(diào)用來確定應(yīng)該調(diào)用哪一個(gè)函數(shù)的。哪一個(gè)函數(shù)的。 int fun(int a, int b) return a+b; int fun (int a) return a*a; void main(void) coutfun(3,5)endl; coutfun(5)endl;825 1、定義的重載函數(shù)必須具有定義的重載函數(shù)必須具有不同的參數(shù)個(gè)數(shù)不同的參數(shù)個(gè)數(shù),或或不同

2、的參數(shù)類型不同的參數(shù)類型。只有這樣編譯系統(tǒng)才有可能。只有這樣編譯系統(tǒng)才有可能根據(jù)不同的參數(shù)去調(diào)用不同的重載函數(shù)。根據(jù)不同的參數(shù)去調(diào)用不同的重載函數(shù)。2、僅返回值不同時(shí),不能定義為重載函數(shù)。、僅返回值不同時(shí),不能定義為重載函數(shù)。 int sum,a=3,b=2;(int)=(int) + (int)sum=a+b; float add, x=3.2, y=2.5;(float)=(float) + (float)add=x+y; char str4, c12=a, c22=b;(char *)=(char *) + (char *)str=c1+c2; 編譯系統(tǒng)中的運(yùn)算符編譯系統(tǒng)中的運(yùn)算符“”本

3、身不能做這種運(yùn)算,本身不能做這種運(yùn)算,若使上式可以運(yùn)算,必須重新定義若使上式可以運(yùn)算,必須重新定義“”運(yùn)算符,運(yùn)算符,這種重新定義的過程成為運(yùn)算符的重載。這種重新定義的過程成為運(yùn)算符的重載。系統(tǒng)自動(dòng)識(shí)別系統(tǒng)自動(dòng)識(shí)別數(shù)據(jù)類型數(shù)據(jù)類型class A float x,y;public: A(float a=0, float b=0) x=a; y=b; void main(void) A a(2,3), b(3,4), c; c=a+b;兩對(duì)象不能使用,必須重新定義兩對(duì)象不能使用,必須重新定義運(yùn)算符重載就是賦予已有的運(yùn)算符多重運(yùn)算符重載就是賦予已有的運(yùn)算符多重含義含義。C+通過重新定義運(yùn)算符,使它通

4、過重新定義運(yùn)算符,使它能夠用于特定類的對(duì)象執(zhí)行特定的功能能夠用于特定類的對(duì)象執(zhí)行特定的功能運(yùn)算符的重載從另一個(gè)方面體現(xiàn)了運(yùn)算符的重載從另一個(gè)方面體現(xiàn)了OOP技術(shù)的多技術(shù)的多態(tài)性,態(tài)性,且同一運(yùn)算符根據(jù)不同的運(yùn)算對(duì)象可以完且同一運(yùn)算符根據(jù)不同的運(yùn)算對(duì)象可以完成不同的操作。成不同的操作。 為了重載運(yùn)算符,必須定義一個(gè)函數(shù),并告為了重載運(yùn)算符,必須定義一個(gè)函數(shù),并告訴編譯器,訴編譯器,遇到這個(gè)重載運(yùn)算符就調(diào)用該函數(shù),遇到這個(gè)重載運(yùn)算符就調(diào)用該函數(shù),由這個(gè)函數(shù)來完成該運(yùn)算符應(yīng)該完成的操作。由這個(gè)函數(shù)來完成該運(yùn)算符應(yīng)該完成的操作。這這種函數(shù)稱為運(yùn)算符重載函數(shù),它通常是種函數(shù)稱為運(yùn)算符重載函數(shù),它通常是類

5、的成員類的成員函數(shù)或者是友元函數(shù)函數(shù)或者是友元函數(shù)。運(yùn)算符的操作數(shù)通常也應(yīng)運(yùn)算符的操作數(shù)通常也應(yīng)該是類的對(duì)象。該是類的對(duì)象。重載為類的重載為類的成員函數(shù)成員函數(shù)格式如下:格式如下: operator()函數(shù)體函數(shù)體A operator + (A &);/重載了類重載了類A的的“+”運(yùn)算符運(yùn)算符其中:其中:operator是定義運(yùn)算符重載函數(shù)的關(guān)鍵字,是定義運(yùn)算符重載函數(shù)的關(guān)鍵字,它與其后的運(yùn)算符一起構(gòu)成函數(shù)名。它與其后的運(yùn)算符一起構(gòu)成函數(shù)名。返回類型返回類型運(yùn)算的對(duì)象運(yùn)算的對(duì)象關(guān)鍵字關(guān)鍵字函數(shù)名函數(shù)名運(yùn)算的對(duì)象運(yùn)算的對(duì)象class Aint i;public:A(int a=0) i=

6、a;void Show(void)couti=iendl;void AddA(A &a,A &b)/利用函數(shù)進(jìn)行類之間的運(yùn)算利用函數(shù)進(jìn)行類之間的運(yùn)算i=a.i+b.i;void main(void)A a1(10),a2(20),a3;a1.Show ();a2.Show ();/a3=a1+a2;/不可直接運(yùn)算不可直接運(yùn)算a3.AddA(a1,a2);/調(diào)用專門的功能函數(shù)調(diào)用專門的功能函數(shù)a3.Show ();沒有重載運(yùn)算符的例子沒有重載運(yùn)算符的例子利用函數(shù)完成了加法運(yùn)算利用函數(shù)完成了加法運(yùn)算用和作對(duì)象調(diào)用函數(shù)用和作對(duì)象調(diào)用函數(shù)class Aint i;public:A(in

7、t a=0) i=a;void Show(void)couti=iendl;void AddA(A &a, A &b) /利用函數(shù)進(jìn)行類之間的運(yùn)算利用函數(shù)進(jìn)行類之間的運(yùn)算i=a.i+b.i;A operator +(A &a)/重載運(yùn)算符重載運(yùn)算符+A t;t.i=i+a.i; return t;void main(void)A a1(10),a2(20),a3;a1.Show ();a2.Show ();a3=a1+a2;/重新解釋了加法,可以直接進(jìn)行類的運(yùn)算重新解釋了加法,可以直接進(jìn)行類的運(yùn)算a3.AddA(a1,a2);/調(diào)用專門的功能函數(shù)調(diào)用專門的功能函數(shù)a3.

8、Show ();相當(dāng)于相當(dāng)于a3=a1.operator+(a2)重載運(yùn)算符與一般函數(shù)的比較:重載運(yùn)算符與一般函數(shù)的比較:相同:相同:1)均為類的成員函數(shù);)均為類的成員函數(shù);2)實(shí)現(xiàn)同一功能)實(shí)現(xiàn)同一功能void AddA(A &a, A &b)i=a.i+b.i; A operator +(A &a) A t; t.i=i+a.i; return t;a3=a1+a2;a3.AddA(a1,a2);返回值返回值函數(shù)名函數(shù)名形參列表形參列表由對(duì)象由對(duì)象a3調(diào)用調(diào)用函數(shù)調(diào)用:函數(shù)調(diào)用:返回值返回值函數(shù)名函數(shù)名形參形參函數(shù)調(diào)用:函數(shù)調(diào)用:a3=a1.operator+(a

9、2);由對(duì)象由對(duì)象a1調(diào)用調(diào)用A operator +(A &a) A t; t.i=i+a.i; return t;a3=a1+a2;返回值返回值函數(shù)名函數(shù)名形參形參函數(shù)調(diào)用:函數(shù)調(diào)用:a3=a1.operator+(a2);由對(duì)象由對(duì)象a1調(diào)用調(diào)用總結(jié):總結(jié):重新定義運(yùn)算符,重新定義運(yùn)算符,由左由左操作符調(diào)用右操作符操作符調(diào)用右操作符。最后將函數(shù)返回值賦給最后將函數(shù)返回值賦給運(yùn)算結(jié)果的對(duì)象。運(yùn)算結(jié)果的對(duì)象。class Aint i;public:A(int a=0) i=a;void Show(void)couti=iendl;void AddA(A &a, A &

10、b) /利用函數(shù)進(jìn)行類之間的運(yùn)算利用函數(shù)進(jìn)行類之間的運(yùn)算i=a.i+b.i;A operator +(A &a)/重載運(yùn)算符重載運(yùn)算符+A t;t.i=i+a.i; return t;void main(void)A a1(10),a2(20),a3;a1.Show ();a2.Show ();a3=a1+a2;/重新解釋了加法,可以直接進(jìn)行類的運(yùn)算重新解釋了加法,可以直接進(jìn)行類的運(yùn)算a3.AddA(a1,a2);/調(diào)用專門的功能函數(shù)調(diào)用專門的功能函數(shù)a3.Show ();相當(dāng)于相當(dāng)于a3=a1.operator+(a2)當(dāng)用當(dāng)用成員函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí)成員函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí),運(yùn)

11、算符,運(yùn)算符重載函數(shù)的參數(shù)只能有二種情況:重載函數(shù)的參數(shù)只能有二種情況:沒有參數(shù)沒有參數(shù)或帶有一個(gè)參數(shù)或帶有一個(gè)參數(shù)。對(duì)于只有一個(gè)操作數(shù)的運(yùn)對(duì)于只有一個(gè)操作數(shù)的運(yùn)算符算符(如如+),在重載這種運(yùn)算符時(shí),通常不,在重載這種運(yùn)算符時(shí),通常不能有參數(shù);而對(duì)于有二個(gè)操作數(shù)的運(yùn)算符,能有參數(shù);而對(duì)于有二個(gè)操作數(shù)的運(yùn)算符,只能帶有一個(gè)參數(shù)。只能帶有一個(gè)參數(shù)。這參數(shù)可以是對(duì)象,對(duì)這參數(shù)可以是對(duì)象,對(duì)象的引用,或其它類型的參數(shù)。在象的引用,或其它類型的參數(shù)。在C+中不中不允許重載有三個(gè)操作數(shù)的運(yùn)算符允許重載有三個(gè)操作數(shù)的運(yùn)算符2、在、在C+中中,允許重載的運(yùn)算符列于允許重載的運(yùn)算符列于表表13.1中。中。3、

12、在、在C+中不允許重載的運(yùn)算符列于中不允許重載的運(yùn)算符列于表表13.2。4、只能對(duì)只能對(duì)C+中已定義了的運(yùn)算符進(jìn)行重載,中已定義了的運(yùn)算符進(jìn)行重載,而且,當(dāng)重載一個(gè)運(yùn)算符時(shí),而且,當(dāng)重載一個(gè)運(yùn)算符時(shí),該運(yùn)算符的優(yōu)該運(yùn)算符的優(yōu)先級(jí)和結(jié)合律是不能改變的先級(jí)和結(jié)合律是不能改變的。class roomfloat Length;float Wide;public: room(float a=0.0,float b=0.0) Length=a; Wide=b; void Show(void)coutLength=LengthtWide=Wideendl; void ShowArea(void)coutAr

13、ea=Length*Wideendl; room operator+(room &);/重載運(yùn)算符重載運(yùn)算符+,函數(shù)原型,函數(shù)原型;room room:operator + (room &r) /重載運(yùn)算符,函數(shù)定義重載運(yùn)算符,函數(shù)定義 room rr; rr.Length =Length+r.Length; rr.Wide =Wide+r.Wide ; return rr;void main(void) room r1(3,2),r2(1,4), r3,r4; r1.Show (); r2.Show (); r3=r1+r2; r3.Show (); r4=r1+r2+r3;

14、r4.Show ();r4=r1+r2+r3;(r1+r2); (r1+r2)+r3;r4=r1+(r2+r3);(r2+r3);r1+(r2+r3);運(yùn)算符的優(yōu)先級(jí)和結(jié)運(yùn)算符的優(yōu)先級(jí)和結(jié)合律是不能改變的合律是不能改變的class Aint i;public:A(int a=0) i=a;void Show(void)couti=iendl;A operator +(A &a)/重載運(yùn)算符重載運(yùn)算符+A t;t.i=i+a.i; return t; void operator+=(A &a)i=i+a.i;void main(void)A a1(10),a2(20),a3;a1

15、.Show ();a2.Show ();a3=a1+a2;a1+=a2;a3.Show ();由左操作符調(diào)用右操由左操作符調(diào)用右操作符作符,沒有返回值,沒有返回值,故函數(shù)類型為故函數(shù)類型為void。相當(dāng)于相當(dāng)于a3=a1.operator+(a2)相當(dāng)于相當(dāng)于a1.operator+=(a2)單目運(yùn)算符的重載單目運(yùn)算符的重載只具有一個(gè)操作數(shù)的運(yùn)算符為單目運(yùn)算符,最常只具有一個(gè)操作數(shù)的運(yùn)算符為單目運(yùn)算符,最常用的為及。用的為及。A a, b;b=+a;b=a+;A a;+a;a+;可以看出,雖然運(yùn)算后對(duì)象可以看出,雖然運(yùn)算后對(duì)象a a的值一致,但先自加的值一致,但先自加或后自加的或后自加的重載運(yùn)

16、算符函數(shù)的返回值不一致,重載運(yùn)算符函數(shù)的返回值不一致,必必須在重載時(shí)予以區(qū)分須在重載時(shí)予以區(qū)分。+為前置運(yùn)算時(shí),為前置運(yùn)算時(shí),它的運(yùn)算符重載函數(shù)的一般格式為:它的運(yùn)算符重載函數(shù)的一般格式為: operator +( ) operator +( ) . .; +為后置運(yùn)算時(shí)為后置運(yùn)算時(shí),它的運(yùn)算符重載函數(shù)的一般格式為:,它的運(yùn)算符重載函數(shù)的一般格式為: operator +( operator +(intint) ) . .; A a, b;b=+a;b=a+;A operator +( ) . A operator +(int) . class A float x, y;public: A(f

17、loat a=0, float b=0) x=a; y=b; A operator +( )A t; t.x=+ x; t.y=+y; return t; A operator +(int) A t; t.x=x+; t.y=y+; return t;void main(void) A a(2,3), b; b=+a; b=a+;A operator +( ) A t; t.x=+ x; t.y=+y; return t; b=+a; b=a.operator+( );返回值返回值函數(shù)名函數(shù)名at3344t作為函數(shù)值返回賦給作為函數(shù)值返回賦給bA operator +( ) + x; +y;

18、return *this;將對(duì)象本身作為函將對(duì)象本身作為函數(shù)值返回賦給數(shù)值返回賦給bA operator +(int) A t; t.x=x+; t.y=y+; return t;b=a+; b=a.operator+(3);at3243返回值返回值函數(shù)名函數(shù)名t作為函數(shù)值返回賦給作為函數(shù)值返回賦給bclass incountint c1,c2;public: incount(int a=0,int b=0) c1=a; c2=b; void Show(void)coutc1=c1tc2=c2等等格式為:格式為:friend operator().c=a+b; / c=operator+( a

19、, b)friend A operator + (A &a, A &b).class Aint i;public:public:A(int a=0) i=a;void Show(void) couti=iendl; friend A operator +(A &,A &);/友元函數(shù),兩個(gè)參數(shù),為引用友元函數(shù),兩個(gè)參數(shù),為引用;A operator +(A &a , A &b)A t;t.i=a.i+b.i;return t; void main(void)A a1(10),a2(20),a3;a1.Show ();a2.Show ();a3=a

20、1+a2;/重新解釋了加法,可以直接進(jìn)行類的運(yùn)算重新解釋了加法,可以直接進(jìn)行類的運(yùn)算a3.Show ();相當(dāng)于相當(dāng)于a3=operator+(a1,a2)+為前置運(yùn)算時(shí),為前置運(yùn)算時(shí),它的運(yùn)算符重載函數(shù)的一般格式為:它的運(yùn)算符重載函數(shù)的一般格式為:A operator +(A &a)A operator +(A &a) . .; +為后置運(yùn)算時(shí)為后置運(yùn)算時(shí),它的運(yùn)算符重載函數(shù)的一般格式為:,它的運(yùn)算符重載函數(shù)的一般格式為:A operator +(A &a, A operator +(A &a, intint) ) . .; A a, b;b=+a;b=a+;

21、A operator +( A a ) . A operator +(A a, int) . class Aint i;public:public:A(int a=0) i=a;void Show(void) couti=iendl;friend A operator+(A &a) a.i+; retrurn a;friend A operator+(A &a, int n) A t;t.i=a.i; a.i+; return t; ;void main(void)A a1(10),a2,a3;a2=+a1;a3=a1+;a2.Show();a3.Show ();相當(dāng)于相當(dāng)于a

22、2=operator+(a1)相當(dāng)于相當(dāng)于a3=operator+(a1,int)class incountint c1,c2;public: incount(int a=0,int b=0) c1=a; c2=b; void Show(void)coutc1=c1tc2=c2endl; friend incount operator +(incount &);/前置前置 friend incount operator +(incount &,int);/后置后置;incount operator+(incount &c)c.c1+;c.c2+;return c;inc

23、ount operator +(incount &c,int)incount cc;cc=c;c.c1+;c.c2+;return cc;void main(void)incount ic1(10,20),ic2(100,200), ic3 , ic4;ic1.Show ();ic2.Show ();ic3=+ic1;/ic3=operator(ic1)ic4=ic2+;/ic4=operator(ic2,n)ic3.Show ();ic4.Show ();class ThreeDfloat x,y,z;public: ThreeD(float a=0,float b=0, float

24、 c=0)x=a;y=b;z=c;friend ThreeD & operator +(ThreeD &);/前置前置friend ThreeD operator +(ThreeD & ,int);/后置后置void Show()cout x=xty=ytz=zn;ThreeD & operator +(ThreeD & t)t.x+;t.y+;t.z+;return t;ThreeD operator +(ThreeD &t ,int )ThreeD temp=t;t.x+;t.y+;t.z+;return temp;void main(voi

25、d )ThreeD m1(25,50, 100),m2(1,2,3),m3;m1.Show();m3=+m1;m1.Show();m3.Show();m3=m2+;m2.Show();m3.Show(); 對(duì)雙目運(yùn)算符,重載為成員函數(shù)時(shí),僅一個(gè)對(duì)雙目運(yùn)算符,重載為成員函數(shù)時(shí),僅一個(gè)參數(shù),另一個(gè)被隱含;重載為友元函數(shù)時(shí),有兩參數(shù),另一個(gè)被隱含;重載為友元函數(shù)時(shí),有兩個(gè)參數(shù),沒有隱含參數(shù)。個(gè)參數(shù),沒有隱含參數(shù)。 一般來說,單目運(yùn)算符最好被重載為成員一般來說,單目運(yùn)算符最好被重載為成員函數(shù);對(duì)雙目運(yùn)算符最好被重載友元函數(shù)。函數(shù);對(duì)雙目運(yùn)算符最好被重載友元函數(shù)。轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù)就是在類中定義一

26、個(gè)成員函數(shù),其作用轉(zhuǎn)換函數(shù)就是在類中定義一個(gè)成員函數(shù),其作用是是將類轉(zhuǎn)換為某種數(shù)據(jù)類型將類轉(zhuǎn)換為某種數(shù)據(jù)類型。class A float x, y; public: A(float a, float b) x=a; y=b; ;void main(void) A a(2,3); coutaendl;錯(cuò)誤!類的對(duì)象不能直接輸出錯(cuò)誤!類的對(duì)象不能直接輸出利用轉(zhuǎn)換函數(shù)將利用轉(zhuǎn)換函數(shù)將類類A的對(duì)象的對(duì)象a轉(zhuǎn)換轉(zhuǎn)換成某種數(shù)據(jù)類型成某種數(shù)據(jù)類型AfloatA : operator float ( ) return x+y; Afloat格式為:格式為:ClassName : operator ( ).類名

27、類名具體的轉(zhuǎn)換算法具體的轉(zhuǎn)換算法欲轉(zhuǎn)換類型欲轉(zhuǎn)換類型關(guān)鍵字關(guān)鍵字轉(zhuǎn)換算法自己定義轉(zhuǎn)換算法自己定義1. 轉(zhuǎn)換函數(shù)必須是轉(zhuǎn)換函數(shù)必須是類的成員函數(shù)。類的成員函數(shù)。2. 轉(zhuǎn)換函數(shù)的調(diào)用是轉(zhuǎn)換函數(shù)的調(diào)用是隱含的,沒有參數(shù)。隱含的,沒有參數(shù)。class Aint i;public:public:A(int a=0) i=a;void Show(void)couti=iendl;operator int( ) returni;void main(void)A a1(10),a2(20);couta1endl;couta2endl;class Complexfloat Real,Image;public:

28、Complex(float real=0,float image=0)Real=real;Image=image; void Show(void) coutReal=RealtImage=Imagefloat;Complex:operator float ()return Real*Real+Image*Image;void main(void)Complex c(10,20);c.Show ();coutcendl;/可以直接輸出可以直接輸出c,因?yàn)橐呀?jīng)進(jìn)行類型轉(zhuǎn)換,因?yàn)橐呀?jīng)進(jìn)行類型轉(zhuǎn)換注意,注意,轉(zhuǎn)換函數(shù)只能是成員函數(shù),不能是友轉(zhuǎn)換函數(shù)只能是成員函數(shù),不能是友元函數(shù)。元函數(shù)。轉(zhuǎn)換函數(shù)的操作

29、數(shù)是對(duì)象轉(zhuǎn)換函數(shù)的操作數(shù)是對(duì)象。轉(zhuǎn)換函。轉(zhuǎn)換函數(shù)可以被派生類繼承,也可以被說明為虛函數(shù)可以被派生類繼承,也可以被說明為虛函數(shù)。數(shù)。賦值運(yùn)算符與賦值運(yùn)算符重載賦值運(yùn)算符與賦值運(yùn)算符重載 “”同類型的對(duì)象間可以相互賦值,等同于對(duì)象的各同類型的對(duì)象間可以相互賦值,等同于對(duì)象的各個(gè)成員的一一賦值。個(gè)成員的一一賦值。A a(2,3), b;A a(2,3), b;b ba;a; 但當(dāng)對(duì)象的成員中使用了動(dòng)態(tài)的數(shù)據(jù)類型時(shí)但當(dāng)對(duì)象的成員中使用了動(dòng)態(tài)的數(shù)據(jù)類型時(shí)(用用new開辟空間),就不能直接相互賦值,否則在程開辟空間),就不能直接相互賦值,否則在程序的執(zhí)行期間會(huì)出現(xiàn)運(yùn)行錯(cuò)誤序的執(zhí)行期間會(huì)出現(xiàn)運(yùn)行錯(cuò)誤。cla

30、ss Achar *ps;public:A( ) ps=0;A(char *s )ps =new char strlen(s)+1; strcpy(ps,s);A( ) if (ps) delete ps;void Show(void) coutpsendl;void main(void ) A s1(China!),s2(Computer!); s1.Show(); s2.Show(); s2=s1; s1.Show(); s2.Show();/相當(dāng)于相當(dāng)于 s2.ps=s1.ps;s1ps“China”s2psComputers2.ps=s1.ps首先析構(gòu)首先析構(gòu)s2接著析構(gòu)接著析構(gòu)s1出

31、錯(cuò)出錯(cuò)這時(shí),利用編譯系統(tǒng)的默認(rèn)賦值無法正確運(yùn)行程這時(shí),利用編譯系統(tǒng)的默認(rèn)賦值無法正確運(yùn)行程序,必須重載賦值運(yùn)算符序,必須重載賦值運(yùn)算符“”,即,即重新定義重新定義“”。格式為:格式為: :operator=()賦值運(yùn)算符必須重載為成員函數(shù)。賦值運(yùn)算符必須重載為成員函數(shù)。A A: operator = (A &a)函數(shù)返回值類型函數(shù)返回值類型成員函數(shù)作用域成員函數(shù)作用域函數(shù)名函數(shù)名函數(shù)參數(shù)函數(shù)參數(shù)b=a;b.operator=(a);左操作符調(diào)左操作符調(diào)用右操作符用右操作符class Sampleint x;public: Sample(int i=0)x=i;void disp(voi

32、d) cout“x=“xendl;void operator=(Sample &p) x=p.x; ;void main(void) Sample A(20),B; Sample C(A);/使用缺省的拷貝構(gòu)造函數(shù)使用缺省的拷貝構(gòu)造函數(shù) B=A; /使用賦值運(yùn)算符重載使用賦值運(yùn)算符重載 B.disp(); A.disp();class Achar *ps;public:A( ) ps=0;A(char *s )ps =new char strlen(s)+1; strcpy(ps,s);A( ) if (ps) delete ps;void Show(void) coutpsendl;

33、A& operator=(A &b);void main(void ) A s1(China!),s2(Computer!); s1.Show(); s2.Show(); s2=s1; s1.Show(); s2.Show();必須重新定義必須重新定義“=”A &A:operator = ( A &b)/重載賦值運(yùn)算符重載賦值運(yùn)算符 if ( ps ) delete ps; if ( b.ps) ps = new char strlen(b.ps)+1;strcpy( ps, b.ps); else ps =0; return *this;s1ps“China”

34、s2ps“Computer”s2=s1;s2.operator=(s1);“China”返回同種類型的引用適合于連等。返回同種類型的引用適合于連等。s3=s2=s1;class Achar *ps;public: A( ) ps=0;A(char *s )ps =new char strlen(s)+1;strcpy(ps,s);A( ) if (ps) delete ps;char *GetS( ) return ps;A & operator = ( A &b);/重載賦值運(yùn)算符重載賦值運(yùn)算符;A &A:operator = ( A &b)/重載賦值運(yùn)算符重

35、載賦值運(yùn)算符 if ( ps ) delete ps; if ( b.ps) ps = new char strlen(b.ps)+1;strcpy( ps, b.ps); else ps =0; return *this;void main(void )A s1(China!),s2(Computer!);s2=s1;cout s1= s1.GetS()t;cout s2= s2.GetS()n;s2.ps重新開辟內(nèi)存,存放重新開辟內(nèi)存,存放“China”重新開辟內(nèi)存重新開辟內(nèi)存一個(gè)字符串類一個(gè)字符串類在在C+中,系統(tǒng)提供的字符串處理能力比較中,系統(tǒng)提供的字符串處理能力比較弱,都是通過字符處理函數(shù)來實(shí)現(xiàn)的,并且弱,都是通過字符處理函數(shù)來實(shí)現(xiàn)的,并且不能直接對(duì)字符串進(jìn)行加法、減法,字符串不能直接對(duì)字符串進(jìn)行加法、減法,字符串的拼接,字符串之間的相互賦值等操作的拼接,字符串之間的相互賦值等操作。可。可以通過應(yīng)用以通過應(yīng)用C+提供的運(yùn)算符重載機(jī)制,可提供的運(yùn)算符重載機(jī)制,可以提供字符串的直接操作能力,使得字符串以提供字符串的直接操作能力,使得字符串的操作與一般的數(shù)據(jù)一樣方便。的操作與一般的數(shù)據(jù)一樣方便。class String int Length;/字符串長度字符串長度 char *Sp; /

溫馨提示

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