




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1多態(tài)與重載多態(tài)與重載2函數(shù)的重載函數(shù)的重載所謂函數(shù)的重載是指完成不同功能的函數(shù)可以具所謂函數(shù)的重載是指完成不同功能的函數(shù)可以具有有相同的函數(shù)名相同的函數(shù)名。 C+的編譯器是根據(jù)的編譯器是根據(jù)函數(shù)的實(shí)參函數(shù)的實(shí)參來(lái)確定應(yīng)該調(diào)用來(lái)確定應(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;8253 1、定義的重載函數(shù)必須具有定義的重載函數(shù)必須具有不同的參數(shù)個(gè)數(shù)不同的參數(shù)個(gè)數(shù),或或不同的參數(shù)類型不
2、同的參數(shù)類型。只有這樣編譯系統(tǒng)才有可能。只有這樣編譯系統(tǒng)才有可能根據(jù)不同的參數(shù)去調(diào)用不同的重載函數(shù)。根據(jù)不同的參數(shù)去調(diào)用不同的重載函數(shù)。2、僅返回值不同時(shí),不能定義為重載函數(shù)。、僅返回值不同時(shí),不能定義為重載函數(shù)。 4成員函數(shù)的重載成員函數(shù)的重載 類中的成員函數(shù)與前面介紹的普通函數(shù)一樣,類中的成員函數(shù)與前面介紹的普通函數(shù)一樣,成員函數(shù)可以成員函數(shù)可以帶有缺省的參數(shù)帶有缺省的參數(shù),也可以,也可以重載重載成員函數(shù)成員函數(shù) 。重載時(shí),函數(shù)的形參必須在重載時(shí),函數(shù)的形參必須在類型類型或或數(shù)目數(shù)目上不上不同。同。5class Testint x , y;int m, n; public: void Se
3、txy(int a, int b)x=a;y=b; void Setxy(int a,int b,int c,int d) x=a;y=b;m=c;n=d; void Printxy(int x)cout “m=mt“n=nendl; void Printxy(void) coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3, 5); p2.Setxy(10,20,30,40);/參數(shù)不同參數(shù)不同 p1.Printxy(); p2.Printxy(); p2.Printxy(2);/參數(shù)、類型不同參數(shù)、類型不同輸出:輸出:x=3 y=
4、5x=10 y=20m=30 n=406class Stuchar Name20;float Chinese;float Math;float English;float Physical;public:float Average(void);/語(yǔ)文、數(shù)學(xué)平均成績(jī)float Average(int n);/四門(mén)課的平均成績(jī)float Sum(void);/語(yǔ)文、數(shù)學(xué)總分float Sum(int n);/四門(mén)課總分void Show(void);void SetStudent(char*,float,float);/置姓名、語(yǔ)文、數(shù)學(xué)初值void SetStudent(char *, floa
5、t,float,float,float);/置姓名、成績(jī)void SetName(char *);char *GetName(void);7運(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ù)來(lái)完成該運(yùn)算符應(yīng)該完成的操作。由這個(gè)函數(shù)來(lái)完成該運(yùn)算符應(yīng)該完成的操作。這這種函數(shù)稱為運(yùn)算符重載
6、函數(shù),它通常是種函數(shù)稱為運(yùn)算符重載函數(shù),它通常是類的成員類的成員函數(shù)或者是友元函數(shù)函數(shù)或者是友元函數(shù)。運(yùn)算符的操作數(shù)通常也應(yīng)運(yùn)算符的操作數(shù)通常也應(yīng)該是類的對(duì)象。該是類的對(duì)象。8int 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)算符“”本身不能做這種運(yùn)算,本身不能做這種運(yùn)算,若使上式可以運(yùn)
7、算,必須重新定義若使上式可以運(yùn)算,必須重新定義“”運(yùn)算符,運(yùn)算符,這種重新定義的過(guò)程成為運(yùn)算符的重載。這種重新定義的過(guò)程成為運(yùn)算符的重載。系統(tǒng)自動(dòng)系統(tǒng)自動(dòng)識(shí)別數(shù)據(jù)識(shí)別數(shù)據(jù)類型類型9class 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+通過(guò)重新定義運(yùn)算符,使它通過(guò)重新定義運(yùn)算符,使它能夠用于特定類的對(duì)象執(zhí)行特定
8、的功能能夠用于特定類的對(duì)象執(zhí)行特定的功能10重載為類的重載為類的成員函數(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ì)象11class Aint i;public:A(int a=0) i=a; void Show(void)couti=iendl;void AddA(A
9、&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)用專門(mén)的功能函數(shù)調(diào)用專門(mén)的功能函數(shù)a3.Show ();沒(méi)有重載運(yùn)算符的例子沒(méi)有重載運(yùn)算符的例子利用函數(shù)完成了加法運(yùn)算利用函數(shù)完成了加法運(yùn)算用和作對(duì)象調(diào)用函數(shù)用和作對(duì)象調(diào)用函數(shù)12class Aint i;public:A(int a=0) i=a;void Show(void)couti=iendl;void Add
10、A(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)用專門(mén)的功能函數(shù)調(diào)用專門(mén)的功能函數(shù)a3.Show ();相當(dāng)于相當(dāng)于a3=a1.operator+(a2)13重載運(yùn)算符與一般函數(shù)的比較:重載運(yùn)算符與一般函數(shù)
11、的比較:相同:相同: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+(a2);由對(duì)象由對(duì)象a1調(diào)用調(diào)用14A operator +(A &a) A t; t.i=i+a.i; return t;a3=a1+a2
12、;返回值返回值函數(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ì)象。15class Aint i;public:A(int 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
13、+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)用專門(mén)的功能函數(shù)調(diào)用專門(mén)的功能函數(shù)a3.Show ();相當(dāng)于相當(dāng)于a3=a1.operator+(a2)16當(dāng)用當(dāng)用成員函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí)成員函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí),運(yùn)算符,運(yùn)算符重載函數(shù)的參數(shù)只能有二種情況:重載函數(shù)的參數(shù)只能有二種情況:沒(méi)有參數(shù)沒(méi)有參數(shù)或帶有一個(gè)參數(shù)或帶有一個(gè)參數(shù)。對(duì)于只有一個(gè)操作數(shù)的運(yùn)對(duì)于只有一個(gè)操作數(shù)的
14、運(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)算符172、在、在C+中中,允許重載的運(yùn)算符列于允許重載的運(yùn)算符列于表表13.1中。中。3、在、在C+中不允許重載的運(yùn)算符列于中不允許重載的運(yùn)算符列于表表13.2。4、只能對(duì)只能對(duì)C+中已定義了的運(yùn)算符進(jìn)行重載,中已定義了的運(yùn)算符進(jìn)行重載,而且,當(dāng)
15、重載一個(gè)運(yùn)算符時(shí),而且,當(dāng)重載一個(gè)運(yùn)算符時(shí),該運(yùn)算符的優(yōu)該運(yùn)算符的優(yōu)先級(jí)和結(jié)合律是不能改變的先級(jí)和結(jié)合律是不能改變的。18class 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) coutArea=Length*Wideendl; room operator+(room &);/重載運(yùn)算符重載運(yùn)算符+,函數(shù)原型,函數(shù)原型;room room
16、: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;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í)和
17、結(jié)運(yùn)算符的優(yōu)先級(jí)和結(jié)合律是不能改變的合律是不能改變的19class 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.Show ();a2.Show ();a3=a1+a2;a1+=a2;a3.Show ();由左操作符調(diào)用右操由左操作符調(diào)用右操作符作符,沒(méi)有返回值,沒(méi)有返回值,故函數(shù)類型為故函
18、數(shù)類型為void。相當(dāng)于相當(dāng)于a3=a1.operator+(a2)相當(dāng)于相當(dāng)于a1.operator+=(a2)20單目運(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)算符函數(shù)的返回值不一致,重載運(yùn)算符函數(shù)的返回值不一致,必必須在重載時(shí)予以區(qū)分須在重載時(shí)予以區(qū)分。21+為前置運(yùn)算時(shí),為前置運(yùn)算時(shí),它的運(yùn)算符重載函數(shù)的一般格式為:它的運(yùn)算符重載
19、函數(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) . 22class A float x, y;public: A(float a=0, float b=0) x=a; y=b; A operator +( )A t; t.x=+ x; t.y=+y; return t; A oper
20、ator +(int) A t; t.x=x+; t.y=y+; return t;void main(void) A a(2,3), b; b=+a; b=a+;23A operator +( ) A t; t.x=+ x; t.y=+y; return t; b=+a; b=a.operator+( );返回值返回值函數(shù)名函數(shù)名23at3344t作為函數(shù)值返回賦給作為函數(shù)值返回賦給bA operator +( ) + x; +y; return *this;將對(duì)象本身作為函將對(duì)象本身作為函數(shù)值返回賦給數(shù)值返回賦給b24A operator +(int) A t; t.x=x+; t.y=y
21、+; return t;b=a+; b=a.operator+(3);23at3243返回值返回值函數(shù)名函數(shù)名t作為函數(shù)值返回賦給作為函數(shù)值返回賦給b25class 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, b)friend A operator + (A &a, A &b).30class Aint i;public:public:A(int a=
22、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=a1+a2;/重新解釋了加法,可以直接進(jìn)行類的運(yùn)算重新解釋了加法,可以直接進(jìn)行類的運(yùn)算a3.Show ();相當(dāng)于相當(dāng)于a3=operator+(a1,a2)31+為前置運(yùn)算時(shí),為前置運(yùn)算時(shí),它
23、的運(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+;A operator +( A a ) . A operator +(A a, int) . 32class Aint i;public:public:A(int a=0) i=a; void Show(void)cou
24、ti=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)于a2=operator+(a1)相當(dāng)于相當(dāng)于a3=operator+(a1,int)33class incountint c1,c2;public: incount(int a=0,int b=0) c1=a; c2=b; void
25、Show(void)coutc1=c1tc2=c2endl; friend incount operator +(incount &);/前置前置 friend incount operator +(incount &,int);/后置后置;incount operator+(incount &c)c.c1+; c.c2+; return c;incount 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 ,
26、 ic4;ic1.Show ();ic2.Show ();ic3=+ic1;/ic3=operator(ic1)ic4=ic2+;/ic4=operator(ic2,n)ic3.Show ();ic4.Show ();34class ThreeDfloat x,y,z;public: ThreeD(float a=0,float b=0, float c=0)x=a;y=b;z=c;friend ThreeD & operator +(ThreeD &);/前置前置friend ThreeD operator +(ThreeD & ,int);/后置后置void Show()cout x=xt
27、y=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(void )ThreeD m1(25,50, 100),m2(1,2,3),m3;m1.Show();m3=+m1;m1.Show();m3.Show();m3=m2+;m2.Show();m3.Show();35 對(duì)雙目運(yùn)算符,重載為成員函數(shù)時(shí),僅一個(gè)對(duì)雙目運(yùn)算符,重載為成員函數(shù)時(shí),僅一個(gè)參數(shù),另一
28、個(gè)被隱含;重載為友元函數(shù)時(shí),有兩參數(shù),另一個(gè)被隱含;重載為友元函數(shù)時(shí),有兩個(gè)參數(shù),沒(méi)有隱含參數(shù)。個(gè)參數(shù),沒(méi)有隱含參數(shù)。 一般來(lái)說(shuō),單目運(yùn)算符最好被重載為成員函一般來(lái)說(shuō),單目運(yùn)算符最好被重載為成員函數(shù);對(duì)雙目運(yùn)算符最好被重載友元函數(shù)。數(shù);對(duì)雙目運(yùn)算符最好被重載友元函數(shù)。36轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù)就是在類中定義一個(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); cout
29、aendl;錯(cuò)誤!類的對(duì)象不能直接輸出錯(cuò)誤!類的對(duì)象不能直接輸出利用轉(zhuǎn)換函數(shù)將利用轉(zhuǎn)換函數(shù)將類類A的對(duì)象的對(duì)象a轉(zhuǎn)換轉(zhuǎn)換成某種數(shù)據(jù)類型成某種數(shù)據(jù)類型Afloat37A : operator float ( ) return x+y; Afloat格式為:格式為:ClassName : operator ( ).類名類名具體的轉(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)用是隱含的,沒(méi)有參數(shù)。隱含的,沒(méi)有參數(shù)。38class Aint i;public:publ
30、ic:A(int a=0) i=a; void Show(void)couti=iendl; operator int( ) returni;void main(void)A a1(10),a2(20);couta1endl;couta2endl;39class Complexfloat Real,Image;public: Complex(float real=0,float image=0)Real=real;Image=image; void Show(void) coutReal=RealtImage=Imagefloat;Complex:operator float ()return
31、 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)換40注意,注意,轉(zhuǎn)換函數(shù)只能是成員函數(shù),不能是友轉(zhuǎn)換函數(shù)只能是成員函數(shù),不能是友元函數(shù)。元函數(shù)。轉(zhuǎn)換函數(shù)的操作數(shù)是對(duì)象轉(zhuǎn)換函數(shù)的操作數(shù)是對(duì)象。轉(zhuǎn)換函。轉(zhuǎn)換函數(shù)可以被派生類繼承,也可以被說(shuō)明為虛函數(shù)可以被派生類繼承,也可以被說(shuō)明為虛函數(shù)。數(shù)。41賦值運(yùn)算符與賦值運(yùn)算符重載賦值運(yùn)算符與賦值運(yùn)算符重載 “”同類型的對(duì)象間可以相互賦值,等同于對(duì)象的各同類型的對(duì)象間可以相互賦值,等同于
32、對(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開(kāi)辟空間),就不能直接相互賦值,否則在程開(kāi)辟空間),就不能直接相互賦值,否則在程序的執(zhí)行期間會(huì)出現(xiàn)運(yùn)行錯(cuò)誤序的執(zhí)行期間會(huì)出現(xiàn)運(yùn)行錯(cuò)誤。42class 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、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;s1 ps“China”s2 psComputers2.ps=s1.ps首先析構(gòu)首先析構(gòu)s2接著析構(gòu)接著析構(gòu)s1出錯(cuò)出錯(cuò)43這時(shí),利用編譯系統(tǒng)的默認(rèn)賦值無(wú)法正確運(yùn)行程這時(shí),利用編譯系統(tǒng)的默認(rèn)賦值無(wú)法正確運(yùn)行程序,必須重載賦值運(yùn)算符序,必須重載賦值運(yùn)算符“”,即,即重新定義重新定義“”。格式為:格式為: :operator=()賦值運(yùn)算符必須重載為成員函數(shù)。賦值運(yùn)算符必
34、須重載為成員函數(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)用右操作符用右操作符44class Sampleint x;public: Sample(int i=0)x=i;void disp(void) 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;/使用賦值
35、運(yùn)算符重載使用賦值運(yùn)算符重載 B.disp(); A.disp();45class 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;A& operator=(A &b);void main(void ) A s1(China!),s2(Computer!); s1.Show(); s2.Show(); s2=s1; s1.Show(); s2.Show();必須重新定義必須重新定義“=”46
36、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;s1 ps“China”s2 ps“Computer”s2=s1;s2.operator=(s1);“China”返回同種類型的引用適合于連等。返回同種類型的引用適合于連等。s3=s2=s1;47class Achar *ps;public: A( ) ps=0;A(char *s )ps =new char
37、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)算符重載賦值運(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
38、=s1;cout s1= s1.GetS()t;cout s2= s2.GetS()n;s2.ps重新開(kāi)辟內(nèi)存,存放重新開(kāi)辟內(nèi)存,存放“China”重新開(kāi)辟內(nèi)存重新開(kāi)辟內(nèi)存48一個(gè)字符串類一個(gè)字符串類在在C+中,系統(tǒng)提供的字符串處理能力比較中,系統(tǒng)提供的字符串處理能力比較弱,都是通過(guò)字符處理函數(shù)來(lái)實(shí)現(xiàn)的,并且弱,都是通過(guò)字符處理函數(shù)來(lái)實(shí)現(xiàn)的,并且不能直接對(duì)字符串進(jìn)行加法、減法,字符串不能直接對(duì)字符串進(jìn)行加法、減法,字符串的拼接,字符串之間的相互賦值等操作的拼接,字符串之間的相互賦值等操作??伞?梢酝ㄟ^(guò)應(yīng)用以通過(guò)應(yīng)用C+提供的運(yùn)算符重載機(jī)制,可提供的運(yùn)算符重載機(jī)制,可以提供字符串的直接操作能力,
39、使得字符串以提供字符串的直接操作能力,使得字符串的操作與一般的數(shù)據(jù)一樣方便。的操作與一般的數(shù)據(jù)一樣方便。49class String int Length;/字符串長(zhǎng)度字符串長(zhǎng)度 char *Sp; /字符串在內(nèi)存中的首地址字符串在內(nèi)存中的首地址 public: .可見(jiàn),字符串類只定義了指針,并沒(méi)有開(kāi)辟具體可見(jiàn),字符串類只定義了指針,并沒(méi)有開(kāi)辟具體的空間以存放字符串的內(nèi)容,所以,無(wú)論是構(gòu)造、的空間以存放字符串的內(nèi)容,所以,無(wú)論是構(gòu)造、析構(gòu)還是加減等,析構(gòu)還是加減等,均需要考慮動(dòng)態(tài)開(kāi)辟空間的問(wèn)均需要考慮動(dòng)態(tài)開(kāi)辟空間的問(wèn)題題,這也是字符串類的難點(diǎn)。,這也是字符串類的難點(diǎn)。50class Strin
40、gint Length;/字符串的長(zhǎng)度字符串的長(zhǎng)度 char *Sp;/指向字符串的指針指向字符串的指針public: String()Sp=0;Length=0;/缺省的構(gòu)造函數(shù)缺省的構(gòu)造函數(shù)String( char *s)/以一個(gè)字符串常量作為參數(shù)以一個(gè)字符串常量作為參數(shù)Length = strlen(s);Sp=new charLength+1;strcpy(Sp,s);String() if(Sp) delete Sp; friend String operator +(String &,String &);/友元函數(shù)重載友元函數(shù)重載String & operator =(String
41、 &);/成員函數(shù)重載賦值成員函數(shù)重載賦值 String (String &s); /拷貝的構(gòu)造函數(shù)拷貝的構(gòu)造函數(shù)(必須有必須有);void main(void)String str1(China);String str2(CCTV);String str3;str3=str1+str2;str2=str1;coutstr3Show();basep-Show()基類指針基類指針派生類對(duì)象派生類對(duì)象基類對(duì)象基類對(duì)象55class Pointfloat x,y;public: Point()Point(float i,float j)x=i;y=j;float area(void) return
42、0.0;const float Pi=3.14159;class Circle:public Point/類類Point的派生類的派生類float radius;public: Circle(float r)radius=r;float area(void) return Pi*radius*radius;void main(void) Point *pp; /基類指針,可以將派生類對(duì)象的地址賦給基類指針基類指針,可以將派生類對(duì)象的地址賦給基類指針 Circle c(5.4321); pp=&c; coutarea ()Show()Base *basep;basep=&b;basep = &d
43、;basep -Show();即指向派生類新增的成員函數(shù)即指向派生類新增的成員函數(shù)需要將基類中的需要將基類中的Show()說(shuō)明為虛函數(shù)說(shuō)明為虛函數(shù)57若要訪問(wèn)派生類中相同名字的函數(shù),必須將若要訪問(wèn)派生類中相同名字的函數(shù),必須將基類中的基類中的同名函數(shù)定義為虛函數(shù)同名函數(shù)定義為虛函數(shù),這樣,將,這樣,將不同的派生類對(duì)象的地址賦給基類的指針變不同的派生類對(duì)象的地址賦給基類的指針變量后,就可以量后,就可以動(dòng)態(tài)地根據(jù)這種賦值語(yǔ)句調(diào)用動(dòng)態(tài)地根據(jù)這種賦值語(yǔ)句調(diào)用不同類中的函數(shù)不同類中的函數(shù)。58class Point float x,y;public: Point()Point(float i,float
44、 j)x=i;y=j;virtual float area(void) return 0.0; ;const float Pi=3.14159;class Circle:public Point/類類Point的派生類的派生類float radius;public: Circle(float r)radius=r;float area(void) return Pi*radius*radius;void main(void) Point *pp; /基類指針,可以將派生類對(duì)象的地址賦給基類指針基類指針,可以將派生類對(duì)象的地址賦給基類指針 Circle c(5.4321); pp=&c; cou
45、tarea ()endl; /調(diào)用虛函數(shù)調(diào)用虛函數(shù)將將area()聲明為虛函數(shù),編譯器對(duì)其進(jìn)行動(dòng)態(tài)聚束,按照實(shí)際對(duì)象聲明為虛函數(shù),編譯器對(duì)其進(jìn)行動(dòng)態(tài)聚束,按照實(shí)際對(duì)象c調(diào)用了調(diào)用了Circle中的函數(shù)中的函數(shù)area()。使。使Point類中的類中的area()與與Circle類中的類中的area()有一個(gè)統(tǒng)一有一個(gè)統(tǒng)一的接口。的接口。輸出:輸出:92.7011聲明為虛函數(shù)聲明為虛函數(shù)調(diào)用虛函數(shù)調(diào)用虛函數(shù)虛函數(shù)再定義虛函數(shù)再定義59虛函數(shù)的定義和使用虛函數(shù)的定義和使用 可以在程序運(yùn)行時(shí)通過(guò)調(diào)用相同的函數(shù)名而實(shí)可以在程序運(yùn)行時(shí)通過(guò)調(diào)用相同的函數(shù)名而實(shí)現(xiàn)不同功能的函數(shù)稱為虛函數(shù)?,F(xiàn)不同功能的函數(shù)稱
46、為虛函數(shù)。定義格式為:定義格式為:virtual FuncName();一旦把基類的成員函數(shù)定義為虛函數(shù),由基類所一旦把基類的成員函數(shù)定義為虛函數(shù),由基類所派生出來(lái)的所有派生類中,該函數(shù)均保持虛函數(shù)派生出來(lái)的所有派生類中,該函數(shù)均保持虛函數(shù)的特性。的特性。 在派生類中重新定義基類中的虛函數(shù)時(shí),可以不在派生類中重新定義基類中的虛函數(shù)時(shí),可以不用關(guān)鍵字用關(guān)鍵字virtual來(lái)修飾這個(gè)成員函數(shù)來(lái)修飾這個(gè)成員函數(shù) 。60虛函數(shù)是用關(guān)鍵字虛函數(shù)是用關(guān)鍵字virtual修飾的某基類中的修飾的某基類中的protected或或public成員函數(shù)。它可以在派生成員函數(shù)。它可以在派生類中重新定義,以形成不同版本
47、。類中重新定義,以形成不同版本。只有在程只有在程序的執(zhí)行過(guò)程中,依據(jù)指針具體指向哪個(gè)類序的執(zhí)行過(guò)程中,依據(jù)指針具體指向哪個(gè)類對(duì)象,或依據(jù)引用哪個(gè)類對(duì)象,才能確定激對(duì)象,或依據(jù)引用哪個(gè)類對(duì)象,才能確定激活哪一個(gè)版本,實(shí)現(xiàn)動(dòng)態(tài)聚束活哪一個(gè)版本,實(shí)現(xiàn)動(dòng)態(tài)聚束。61class Aprotected:int x;public: A()x =1000; virtual void print()cout “x=”xt;/虛函數(shù)虛函數(shù);class B:public Aint y;public: B() y=2000;void print()cout “y=”yt;/派生虛函數(shù)派生虛函數(shù);class C:pub
48、lic Aint z;public: C()z=3000;void print()cout “z=”zprint();/調(diào)用類調(diào)用類A的虛函數(shù)的虛函數(shù) pa=&b; pa-print();/調(diào)用類調(diào)用類B的虛函數(shù)的虛函數(shù) pa=&c; pa-print();/調(diào)用類調(diào)用類C的虛函數(shù)的虛函數(shù)62class Base public : virtual int Set(int a, int b) . .;class Derive:public Basepublic : int Set(int x, int y) . .;class Base public : virtual int Set(int
49、a, int b) . .;class Derive:public Basepublic : int Set(int x, int y=0) . .;int Set(int ,int )是虛函數(shù)是虛函數(shù)兩個(gè)兩個(gè)Set()函數(shù)參數(shù)函數(shù)參數(shù)不一致,是重載,不一致,是重載,不是虛函數(shù)不是虛函數(shù)63關(guān)于虛函數(shù),說(shuō)明以下幾點(diǎn):關(guān)于虛函數(shù),說(shuō)明以下幾點(diǎn):1、當(dāng)在基類中把成員函數(shù)定義為虛函數(shù)后,當(dāng)在基類中把成員函數(shù)定義為虛函數(shù)后,在其派生類中定義的虛函數(shù)必須與基類中的在其派生類中定義的虛函數(shù)必須與基類中的虛函數(shù)同名,參數(shù)的類型、順序、參數(shù)的個(gè)虛函數(shù)同名,參數(shù)的類型、順序、參數(shù)的個(gè)數(shù)必須一一對(duì)應(yīng),函數(shù)的返回的
50、類型也相同數(shù)必須一一對(duì)應(yīng),函數(shù)的返回的類型也相同。若函數(shù)名相同,但參數(shù)的個(gè)數(shù)不同或者參數(shù)若函數(shù)名相同,但參數(shù)的個(gè)數(shù)不同或者參數(shù)的類型不同時(shí),則屬于函數(shù)的重載,而不是的類型不同時(shí),則屬于函數(shù)的重載,而不是虛函數(shù)。若函數(shù)名不同,顯然這是不同的成虛函數(shù)。若函數(shù)名不同,顯然這是不同的成員函數(shù)。員函數(shù)。642、實(shí)現(xiàn)這種動(dòng)態(tài)的多態(tài)性時(shí),必須使用實(shí)現(xiàn)這種動(dòng)態(tài)的多態(tài)性時(shí),必須使用基類類型基類類型的指針變量的指針變量,并使該指針,并使該指針指向不同的派生類對(duì)象指向不同的派生類對(duì)象,并通過(guò)調(diào)用指針?biāo)赶虻奶摵瘮?shù)才能實(shí)現(xiàn)動(dòng)態(tài)的并通過(guò)調(diào)用指針?biāo)赶虻奶摵瘮?shù)才能實(shí)現(xiàn)動(dòng)態(tài)的多態(tài)性。多態(tài)性。xShow()xShow()yS
51、how()xShow()zShow()類類A類類B類類CShow()定義為虛函數(shù)定義為虛函數(shù)類類B與類與類C均為類均為類A的公有派生。的公有派生。A *p; B b;C c; p=&b ; p-Show();p=&c ; p-Show();即在程序運(yùn)行時(shí),即在程序運(yùn)行時(shí),通過(guò)賦值語(yǔ)句實(shí)通過(guò)賦值語(yǔ)句實(shí)現(xiàn)多態(tài)性現(xiàn)多態(tài)性653、虛函數(shù)必須是類的一個(gè)成員函數(shù),不能是虛函數(shù)必須是類的一個(gè)成員函數(shù),不能是友元函數(shù),也不能是靜態(tài)的成員函數(shù)。友元函數(shù),也不能是靜態(tài)的成員函數(shù)。4、在派生類中、在派生類中沒(méi)有重新定義虛函數(shù)沒(méi)有重新定義虛函數(shù)時(shí),與一時(shí),與一般的成員函數(shù)一樣,當(dāng)調(diào)用這種派生類對(duì)象般的成員函數(shù)一樣,當(dāng)
52、調(diào)用這種派生類對(duì)象的虛函數(shù)時(shí),的虛函數(shù)時(shí),則調(diào)用其基類中的虛函數(shù)則調(diào)用其基類中的虛函數(shù)。5、可把析構(gòu)函數(shù)定義為虛函數(shù),但是,不能可把析構(gòu)函數(shù)定義為虛函數(shù),但是,不能將構(gòu)造函數(shù)定義為虛函數(shù)將構(gòu)造函數(shù)定義為虛函數(shù)。666、虛函數(shù)與一般的成員函數(shù)相比較,、虛函數(shù)與一般的成員函數(shù)相比較,調(diào)用時(shí)的執(zhí)調(diào)用時(shí)的執(zhí)行速度要慢一些行速度要慢一些。為了實(shí)現(xiàn)多態(tài)性,在每一個(gè)派。為了實(shí)現(xiàn)多態(tài)性,在每一個(gè)派生類中均要保存相應(yīng)虛函數(shù)的入口地址表,函數(shù)生類中均要保存相應(yīng)虛函數(shù)的入口地址表,函數(shù)的調(diào)用機(jī)制也是間接實(shí)現(xiàn)的。因此,除了要編寫(xiě)的調(diào)用機(jī)制也是間接實(shí)現(xiàn)的。因此,除了要編寫(xiě)一些通用的程序,并一定要使用虛函數(shù)才能完成一些通
53、用的程序,并一定要使用虛函數(shù)才能完成其功能要求外,通常不必使用虛函數(shù)。其功能要求外,通常不必使用虛函數(shù)。7、一個(gè)函數(shù)如果被定義成虛函數(shù),則不管經(jīng)歷多、一個(gè)函數(shù)如果被定義成虛函數(shù),則不管經(jīng)歷多少次派生,仍將保持其虛特性,以實(shí)現(xiàn)少次派生,仍將保持其虛特性,以實(shí)現(xiàn)“一個(gè)接一個(gè)接口,多個(gè)形態(tài)口,多個(gè)形態(tài)”。67虛函數(shù)的訪問(wèn)虛函數(shù)的訪問(wèn)用基指針訪問(wèn)與用對(duì)象名訪問(wèn)用基指針訪問(wèn)與用對(duì)象名訪問(wèn)用基指針訪問(wèn)虛函數(shù)時(shí),指向其實(shí)際派生類用基指針訪問(wèn)虛函數(shù)時(shí),指向其實(shí)際派生類對(duì)象重新定義的函數(shù)。實(shí)現(xiàn)動(dòng)態(tài)聚束。對(duì)象重新定義的函數(shù)。實(shí)現(xiàn)動(dòng)態(tài)聚束。通過(guò)一個(gè)通過(guò)一個(gè)對(duì)象名對(duì)象名訪問(wèn)時(shí),只能靜態(tài)聚束。即訪問(wèn)時(shí),只能靜態(tài)聚束。即
54、由編譯器在編譯的時(shí)候決定調(diào)用哪個(gè)函數(shù)。由編譯器在編譯的時(shí)候決定調(diào)用哪個(gè)函數(shù)。68class Point float x,y;public: Point()Point(float i,float j)x=i;y=j;virtual float area(void) return 0.0; /聲明為虛函數(shù)聲明為虛函數(shù);const float Pi=3.14159;class Circle:public Point/類類Point的派生類的派生類float radius;public: Circle(float r)radius=r;float area(void) return Pi*radius
55、*radius;/虛函數(shù)再定義虛函數(shù)再定義;void main(void) Point *pp; /基類指針,可以將派生類對(duì)象的地址賦給基類指針基類指針,可以將派生類對(duì)象的地址賦給基類指針 Circle c(5.4321); coutc.area()endl; coutc.Point:area()endl; coutc.Circle:area ()endl;輸出:輸出:92.7011092.7011可見(jiàn),利用對(duì)象名進(jìn)行調(diào)用與一般非虛函數(shù)沒(méi)有區(qū)別??梢?jiàn),利用對(duì)象名進(jìn)行調(diào)用與一般非虛函數(shù)沒(méi)有區(qū)別。用對(duì)象名調(diào)用用對(duì)象名調(diào)用area( )69class base0public: void v(void
56、)coutbase0n;class base1:public base0public: virtual void v(void) coutbase1n; ;class A1:public base1public: void v()coutA1n; ;class A2:public A1public: void v(void)coutA2n; ;class B1:private base1public: void v(void)coutB1n; ;class B2:public B1public: void v(void)coutv(); A2 a2; (pb=&a2)-v(); B1 b1;
57、(pb=&b1)-v(); B2 b2; (pb=&b2)-v();base0base0私有派生,在類外私有派生,在類外不能調(diào)用基類函數(shù)不能調(diào)用基類函數(shù)70class base0public: void v(void)coutbase0n;class base1:public base0public: virtual void v(void) coutbase1n; ;class A1:public base1public: void v()coutA1n; ;class A2:public A1public: void v(void)coutA2n; ;class B1:private ba
58、se1public: void v(void)coutB1n; ;class B2:public B1public: void v(void)coutv(); A2 a2; (pb=&a2)-v();A1A271純虛函數(shù)純虛函數(shù)在基類中不對(duì)虛函數(shù)給出有意義的實(shí)現(xiàn)在基類中不對(duì)虛函數(shù)給出有意義的實(shí)現(xiàn),它只是它只是在派生類中有具體的意義。這時(shí)基類中的虛函數(shù)在派生類中有具體的意義。這時(shí)基類中的虛函數(shù)只是一個(gè)入口,具體的目的地由不同的派生類中只是一個(gè)入口,具體的目的地由不同的派生類中的對(duì)象決定。這個(gè)虛函數(shù)稱為的對(duì)象決定。這個(gè)虛函數(shù)稱為純虛函數(shù)純虛函數(shù)。class virtual ()=0;.;72cla
59、ss Aprotected:int x;public: A()x =1000; virtual void print()=0; /定義純虛函數(shù)定義純虛函數(shù);class B:public A /派生類派生類private: int y;public: B() y=2000;void print()cout “y=”yn;/重新定義純虛函數(shù)重新定義純虛函數(shù);class C:public A /派生類派生類int z;public: C()z=3000;void print()cout “z=”zprint(); pa=&c; pa-print(); A a; pa=&a; pa-print( );
60、y=2000z=3000抽象類抽象類不能定義抽象類的對(duì)象不能定義抽象類的對(duì)象731、在定義純虛函數(shù)時(shí),不能定義虛函數(shù)的實(shí)、在定義純虛函數(shù)時(shí),不能定義虛函數(shù)的實(shí)現(xiàn)部分?,F(xiàn)部分。2、把函數(shù)名賦于、把函數(shù)名賦于0,本質(zhì)上是將指向函數(shù)體,本質(zhì)上是將指向函數(shù)體的指針值賦為初值的指針值賦為初值0。與定義空函數(shù)不一樣,。與定義空函數(shù)不一樣,空函數(shù)的函數(shù)體為空,即調(diào)用該函數(shù)時(shí),不空函數(shù)的函數(shù)體為空,即調(diào)用該函數(shù)時(shí),不執(zhí)行任何動(dòng)作。執(zhí)行任何動(dòng)作。在沒(méi)有重新定義這種純虛函在沒(méi)有重新定義這種純虛函數(shù)之前,是不能調(diào)用這種函數(shù)的。數(shù)之前,是不能調(diào)用這種函數(shù)的。743、把至少包含一個(gè)純虛函數(shù)的類,稱為抽象把至少包含一個(gè)純
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度競(jìng)業(yè)協(xié)議失效一個(gè)月競(jìng)業(yè)限制解除補(bǔ)償合同
- 二零二五年度大型商場(chǎng)裝修合同(含室內(nèi)外環(huán)境美化)
- 二零二五年度特色主題展臺(tái)設(shè)計(jì)制作安裝一體化合同
- 二零二五年度紋身技藝培訓(xùn)與加盟合作協(xié)議
- 二零二五年度新能源產(chǎn)業(yè)臨時(shí)研發(fā)人員服務(wù)協(xié)議
- 2025年度網(wǎng)絡(luò)安全防護(hù)合同價(jià)款調(diào)整與網(wǎng)絡(luò)安全事件應(yīng)對(duì)
- 二零二五年度虛擬現(xiàn)實(shí)產(chǎn)業(yè)利潤(rùn)分配協(xié)議書(shū)
- 二零二五年度搏擊教練員免責(zé)責(zé)任書(shū)
- 農(nóng)業(yè)現(xiàn)代化技術(shù)推廣合作協(xié)議
- 智能建筑系統(tǒng)合同
- 2023年全國(guó)高考體育單招考試英語(yǔ)試卷試題真題(精校打印版)
- 2023年四川省綿陽(yáng)市中考化學(xué)試卷真題(含答案與解析)
- 財(cái)務(wù)管理中的財(cái)務(wù)指標(biāo)
- 2016-2023年青島酒店管理職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 第二章-環(huán)境數(shù)據(jù)統(tǒng)計(jì)與分析
- 電力各種材料重量表總
- 腸道健康講座活動(dòng)策劃
- 醫(yī)療器械(耗材)項(xiàng)目投標(biāo)服務(wù)投標(biāo)方案(技術(shù)方案)
- 小學(xué)三年級(jí)下冊(cè)數(shù)學(xué)教案3篇
- pci術(shù)后術(shù)肢腫脹處理流程
- 遼寧省營(yíng)口市2023-2024學(xué)年七年級(jí)上學(xué)期期末英語(yǔ)試題
評(píng)論
0/150
提交評(píng)論