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

下載本文檔

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

文檔簡(jiǎn)介

1、1 面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)C+ 第6章 運(yùn)算符重載與友元2主要內(nèi)容主要內(nèi)容n運(yùn)算符重載的目的、定義和實(shí)質(zhì)運(yùn)算符重載的目的、定義和實(shí)質(zhì)n運(yùn)算符重載的規(guī)則運(yùn)算符重載的規(guī)則 n運(yùn)算符重載的兩種形式運(yùn)算符重載的兩種形式 n友元的作用和定義友元的作用和定義 n類型轉(zhuǎn)換運(yùn)算符重載類型轉(zhuǎn)換運(yùn)算符重載3提出問(wèn)題提出問(wèn)題n復(fù)數(shù)的加減運(yùn)算問(wèn)題:復(fù)數(shù)的加減運(yùn)算問(wèn)題:n對(duì)于非基本數(shù)據(jù)類型,如復(fù)數(shù)、分?jǐn)?shù),如何對(duì)于非基本數(shù)據(jù)類型,如復(fù)數(shù)、分?jǐn)?shù),如何在程序中進(jìn)行運(yùn)算?在程序中進(jìn)行運(yùn)算?n能否直接用運(yùn)算符(能否直接用運(yùn)算符(+ +、- -、* *、/ /)進(jìn)行運(yùn)算?)進(jìn)行運(yùn)算?4分析問(wèn)題分析問(wèn)題n自定義一個(gè)復(fù)數(shù)類自

2、定義一個(gè)復(fù)數(shù)類ComplexComplex完成復(fù)數(shù)的加減運(yùn)算完成復(fù)數(shù)的加減運(yùn)算n設(shè)計(jì)復(fù)數(shù)類設(shè)計(jì)復(fù)數(shù)類class Complex/復(fù)數(shù)類復(fù)數(shù)類public: Complex(double r=0.0,double i=0.0) /構(gòu)造函數(shù)構(gòu)造函數(shù) real=r; image=i; private:double real, image; /定義實(shí)部、虛部定義實(shí)部、虛部; 5思考思考n是否能通過(guò)下面的代碼完成復(fù)數(shù)的加減運(yùn)算:是否能通過(guò)下面的代碼完成復(fù)數(shù)的加減運(yùn)算:int main() /定義一個(gè)復(fù)數(shù)對(duì)象定義一個(gè)復(fù)數(shù)對(duì)象c1,其實(shí)部為其實(shí)部為2,虛部為,虛部為2.5 Complex c1(2, 2.5

3、); Complex c2(3, 1.4); Complex c3, c4; c3 = c1 + c2; c4 = c1 - c2; return 0; 6說(shuō)明說(shuō)明nC+C+預(yù)定義的預(yù)定義的“+”“+”、“-”“-”運(yùn)算只支持基運(yùn)算只支持基本數(shù)據(jù)類型,并不支持用戶自定義類型。本數(shù)據(jù)類型,并不支持用戶自定義類型。 n復(fù)數(shù)類的加減運(yùn)算不能采用系統(tǒng)預(yù)定義復(fù)數(shù)類的加減運(yùn)算不能采用系統(tǒng)預(yù)定義的運(yùn)算符的運(yùn)算符“+”“+”、“-”“-”完成,那么編寫完成,那么編寫成員函數(shù)來(lái)實(shí)現(xiàn)加、減運(yùn)算。成員函數(shù)來(lái)實(shí)現(xiàn)加、減運(yùn)算。7重新設(shè)計(jì)復(fù)數(shù)類重新設(shè)計(jì)復(fù)數(shù)類ComplexComplexclass Complex publ

4、ic: Complex(double r=0.0,double i=0.0) /構(gòu)造函數(shù)構(gòu)造函數(shù) real=r; image=i; double Real()return real; /返回復(fù)數(shù)的實(shí)部返回復(fù)數(shù)的實(shí)部 double Imag()return image;/返回復(fù)數(shù)的虛部返回復(fù)數(shù)的虛部 Complex add(Complex &c); /函數(shù)重載,實(shí)現(xiàn)復(fù)數(shù)加復(fù)數(shù)函數(shù)重載,實(shí)現(xiàn)復(fù)數(shù)加復(fù)數(shù) Complex add(double d); /函數(shù)重載,實(shí)現(xiàn)復(fù)數(shù)加實(shí)數(shù)函數(shù)重載,實(shí)現(xiàn)復(fù)數(shù)加實(shí)數(shù) Complex sub(Complex &c); /函數(shù)重載,實(shí)現(xiàn)復(fù)數(shù)減復(fù)數(shù)函數(shù)重載

5、,實(shí)現(xiàn)復(fù)數(shù)減復(fù)數(shù) Complex sub(double d); /函數(shù)重載,實(shí)現(xiàn)復(fù)數(shù)減實(shí)數(shù)函數(shù)重載,實(shí)現(xiàn)復(fù)數(shù)減實(shí)數(shù)private: double real, image; /定義實(shí)部、虛部定義實(shí)部、虛部;8n完成復(fù)數(shù)與復(fù)數(shù)相加完成復(fù)數(shù)與復(fù)數(shù)相加Complex Complex:add(Complex &c) Complex temp; temp.real = real + c.real; temp.image = image + c.image; return temp; 成員函數(shù)定義成員函數(shù)定義9n完成復(fù)數(shù)與實(shí)數(shù)相加完成復(fù)數(shù)與實(shí)數(shù)相加Complex Complex:add(double

6、 d) Complex temp; temp.real = real + d; temp.image = image; return temp; 10int main() Complex c1(2, 2.5); Complex c2(3, 1.4); Complex c3, c4; c3=c1.add(c2); c4=c1.sub(c2); coutc3= c3.Real() +i c3.Imag()endl; coutc4= c4.Real() +i c4.Imag()endl; return 0;不如不如c3=c1+c2直觀直觀!11n用函數(shù)的方式將復(fù)數(shù)的加減運(yùn)算表示出用函數(shù)的方式將復(fù)數(shù)的

7、加減運(yùn)算表示出來(lái)遠(yuǎn)不如用運(yùn)算符來(lái)遠(yuǎn)不如用運(yùn)算符“+”“+”、“-”“-”直觀直觀 n如果復(fù)數(shù)的運(yùn)算能夠用已有的運(yùn)算符表如果復(fù)數(shù)的運(yùn)算能夠用已有的運(yùn)算符表示出來(lái),則程序的易讀性會(huì)大大增強(qiáng),示出來(lái),則程序的易讀性會(huì)大大增強(qiáng),同時(shí)更符合人的思維習(xí)慣同時(shí)更符合人的思維習(xí)慣 nC+C+提供了提供了運(yùn)算符重載機(jī)制運(yùn)算符重載機(jī)制,使得系統(tǒng)預(yù),使得系統(tǒng)預(yù)定義的運(yùn)算符能夠完成用戶自定義數(shù)據(jù)定義的運(yùn)算符能夠完成用戶自定義數(shù)據(jù)類型的運(yùn)算類型的運(yùn)算 說(shuō)明說(shuō)明12運(yùn)算符重載運(yùn)算符重載n運(yùn)算符重載就是為用戶自定義類型運(yùn)算符重載就是為用戶自定義類型重新定重新定義運(yùn)算符義運(yùn)算符,使同一個(gè)運(yùn)算符既可以作用于使同一個(gè)運(yùn)算符既可以

8、作用于預(yù)定義的數(shù)據(jù)類型,也可以作用于用戶自預(yù)定義的數(shù)據(jù)類型,也可以作用于用戶自定義的數(shù)據(jù)類型。定義的數(shù)據(jù)類型。n運(yùn)算符重載本質(zhì)上是一種特殊的運(yùn)算符重載本質(zhì)上是一種特殊的函數(shù)重載函數(shù)重載。13運(yùn)算符重載運(yùn)算符重載n為了重載運(yùn)算符,必須定義一個(gè)運(yùn)算符重載為了重載運(yùn)算符,必須定義一個(gè)運(yùn)算符重載函數(shù),函數(shù),由這個(gè)函數(shù)來(lái)完成該運(yùn)算符應(yīng)該完成由這個(gè)函數(shù)來(lái)完成該運(yùn)算符應(yīng)該完成的操作。的操作。運(yùn)算符的操作數(shù)通常是類的對(duì)象。運(yùn)算符的操作數(shù)通常是類的對(duì)象。n可以將運(yùn)算符重載函數(shù)作為可以將運(yùn)算符重載函數(shù)作為類的成員函數(shù)或類的成員函數(shù)或者是友元函數(shù)者是友元函數(shù)。14重載為類的成員函數(shù)重載為類的成員函數(shù)格式如下:格式如

9、下: operator operator () 函數(shù)體函數(shù)體 A operator + (A &);/重載了類重載了類A A的的“+”+”運(yùn)算運(yùn)算符符返回類型返回類型運(yùn)算的對(duì)象運(yùn)算的對(duì)象關(guān)鍵字關(guān)鍵字函數(shù)名函數(shù)名運(yùn)算的對(duì)象運(yùn)算的對(duì)象15在復(fù)數(shù)類中重載運(yùn)算符在復(fù)數(shù)類中重載運(yùn)算符class Complex/復(fù)數(shù)類復(fù)數(shù)類public: Complex(double r=0.0,double i=0.0)real=r;image=i; const double Real()return real; const double Imag()return image; Complex operator

10、+( Complex &c); /重載運(yùn)算符重載運(yùn)算符“+”“+” Complex operator+( double d); /重載運(yùn)算符重載運(yùn)算符“+”“+” Complex operator-( Complex &c); /重載運(yùn)算符重載運(yùn)算符“-”“-” Complex operator-( double d); /重載運(yùn)算符重載運(yùn)算符-private: double real,image; ;16n運(yùn)算符重載為成員函數(shù)時(shí)運(yùn)算符重載為成員函數(shù)時(shí)最多有一個(gè)形最多有一個(gè)形參參 n運(yùn)算符重載的運(yùn)算符重載的實(shí)質(zhì)就是函數(shù)重載實(shí)質(zhì)就是函數(shù)重載,只不,只不過(guò)函數(shù)名換成了關(guān)鍵字過(guò)函數(shù)名

11、換成了關(guān)鍵字operatoroperator和具體和具體要重載的運(yùn)算符要重載的運(yùn)算符n運(yùn)算符重載的函數(shù)參數(shù)運(yùn)算符重載的函數(shù)參數(shù)就是該運(yùn)算符涉就是該運(yùn)算符涉及的操作數(shù)及的操作數(shù),因此運(yùn)算符重載在參數(shù)個(gè),因此運(yùn)算符重載在參數(shù)個(gè)數(shù)上是有限制的,這是它不同于函數(shù)重?cái)?shù)上是有限制的,這是它不同于函數(shù)重載之處。載之處。說(shuō)明說(shuō)明17class 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;int main()A a1

12、(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 (); return 0; 沒(méi)有重載運(yùn)算符的例子沒(méi)有重載運(yùn)算符的例子利用函數(shù)完成了加法運(yùn)算利用函數(shù)完成了加法運(yùn)算用和作對(duì)象調(diào)用函數(shù)用和作對(duì)象調(diào)用函數(shù)18class 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+

13、b.i;A operator +(A &a) /重載運(yùn)算符重載運(yùn)算符+ +A t;t.i=i+a.i;return t;int main()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 (); return 0;相當(dāng)于相當(dāng)于a3=a1.operator+(a2)有重載運(yùn)算符的例子有重載運(yùn)算符的例子19重載運(yùn)算符與一般成員函數(shù)的比較:重載運(yùn)算符與一般成員函數(shù)的比較:相同:相同:1

14、 1)均為類的成員函數(shù);)均為類的成員函數(shù);2 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ì)象a3a3調(diào)用調(diào)用函數(shù)調(diào)用:函數(shù)調(diào)用:返回值返回值函數(shù)名函數(shù)名形參形參函數(shù)調(diào)用:函數(shù)調(diào)用:a3=a1.operator+(a2);由對(duì)象由對(duì)象a1a1調(diào)用調(diào)用20A operator +(A &a) A t; t.i=i+a.i; retu

15、rn t;a3=a1+a2;返回值返回值函數(shù)名函數(shù)名形參形參函數(shù)調(diào)用:函數(shù)調(diào)用:a3=a1.operator+(a2);由對(duì)象由對(duì)象a1a1調(diào)用調(diào)用總結(jié):總結(jié):運(yùn)算符重載為成員函數(shù)運(yùn)算符重載為成員函數(shù)時(shí),左操作數(shù)必須是對(duì)時(shí),左操作數(shù)必須是對(duì)象本身,象本身,由左操作數(shù)調(diào)由左操作數(shù)調(diào)用右操作數(shù)用右操作數(shù)。最后將函。最后將函數(shù)返回值賦給運(yùn)算結(jié)果數(shù)返回值賦給運(yùn)算結(jié)果的對(duì)象。的對(duì)象。21運(yùn)算符重載的規(guī)則運(yùn)算符重載的規(guī)則n重載的功能應(yīng)當(dāng)與原有功能類似,不能重載的功能應(yīng)當(dāng)與原有功能類似,不能改變?cè)\(yùn)算符的操作數(shù)個(gè)數(shù),同時(shí)至少改變?cè)\(yùn)算符的操作數(shù)個(gè)數(shù),同時(shí)至少要有一個(gè)操作數(shù)的類型是自定義類型。要有一個(gè)操作數(shù)的

16、類型是自定義類型。n重載之后運(yùn)算符的優(yōu)先級(jí)和結(jié)合性都不重載之后運(yùn)算符的優(yōu)先級(jí)和結(jié)合性都不會(huì)改變,并且要保持原運(yùn)算符的語(yǔ)法結(jié)會(huì)改變,并且要保持原運(yùn)算符的語(yǔ)法結(jié)構(gòu)。參數(shù)和函數(shù)值類型都可以重新說(shuō)明。構(gòu)。參數(shù)和函數(shù)值類型都可以重新說(shuō)明。 22運(yùn)算符重載的規(guī)則運(yùn)算符重載的規(guī)則n當(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ù)或帶有一個(gè)參數(shù)沒(méi)有參數(shù)或帶有一個(gè)參數(shù)。n在重載在重載單目單目運(yùn)算符時(shí),通常運(yùn)算符時(shí),通常不能有參數(shù);不能有參數(shù);在重載在重載雙目雙目運(yùn)算符時(shí),只能帶有運(yùn)算符時(shí),只能帶有一個(gè)參一個(gè)參數(shù)。數(shù)。

17、參數(shù)可以是對(duì)象,對(duì)象的引用,或參數(shù)可以是對(duì)象,對(duì)象的引用,或其它類型的參數(shù)。其它類型的參數(shù)。n在在C+C+中不允許重載有三個(gè)操作數(shù)的運(yùn)算中不允許重載有三個(gè)操作數(shù)的運(yùn)算符。符。23不能重載的運(yùn)算符不能重載的運(yùn)算符不能重載的運(yùn)算符不能重載的運(yùn)算符 說(shuō)明說(shuō)明 :作用域運(yùn)算符作用域運(yùn)算符.成員訪問(wèn)運(yùn)算符成員訪問(wèn)運(yùn)算符.*成員指針訪問(wèn)運(yùn)算符成員指針訪問(wèn)運(yùn)算符?:條件運(yùn)算符條件運(yùn)算符sizeof求表達(dá)式或數(shù)據(jù)類型所占存儲(chǔ)求表達(dá)式或數(shù)據(jù)類型所占存儲(chǔ)空間字節(jié)數(shù)空間字節(jié)數(shù)typeid用于運(yùn)行時(shí)類型信息(用于運(yùn)行時(shí)類型信息(RTTI)的識(shí)別,指出指針或引用指向的識(shí)別,指出指針或引用指向的對(duì)象的實(shí)際派生類型的對(duì)象的

18、實(shí)際派生類型24單目運(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ū)分。25+為前置運(yùn)算時(shí),為前置運(yùn)算時(shí),它的運(yùn)算符重載函數(shù)的一般格式為:它的運(yùn)算符重載函數(shù)的一般格式為: operator +( ) operator +( )+為后置運(yùn)算時(shí)為后置運(yùn)算時(shí),

19、它的運(yùn)算符重載函數(shù)的一般格式為:,它的運(yùn)算符重載函數(shù)的一般格式為: operator +( operator +(intint) )A a, b;b=+a;b=a+;A operator +( ) . A operator +(int) . 26class 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 operator +(int) A t; t.x=x+; t.y=y+; return t;int main() A a(2,3),

20、b; b=+a; b=a+; return 0; 27A operator +( ) A t; t.x=+ x; t.y=+y; return t; b=+a; b=a.operator+( );返回值返回值函數(shù)名函數(shù)名23at3344t t作為函數(shù)值返回賦給作為函數(shù)值返回賦給b bA operator +( ) + x; +y; return *this;將對(duì)象本身作為函將對(duì)象本身作為函數(shù)值返回賦給數(shù)值返回賦給b b28A operator +(int) A t; t.x=x+; t.y=y+; return t;b=a+; b=a.operator+(3);23at3243返回值返回值函數(shù)

21、名函數(shù)名t t作為函數(shù)值返回賦給作為函數(shù)值返回賦給b b29n運(yùn)算符重載為成員函數(shù)后,它可以自由地運(yùn)算符重載為成員函數(shù)后,它可以自由地訪問(wèn)類的所有成員。實(shí)際使用時(shí),總是通過(guò)訪問(wèn)類的所有成員。實(shí)際使用時(shí),總是通過(guò)該類的某個(gè)對(duì)象來(lái)訪問(wèn)重載的運(yùn)算符。該類的某個(gè)對(duì)象來(lái)訪問(wèn)重載的運(yùn)算符。 n運(yùn)算符重載為類的成員函數(shù)時(shí),函數(shù)的參運(yùn)算符重載為類的成員函數(shù)時(shí),函數(shù)的參數(shù)個(gè)數(shù)比原來(lái)操作數(shù)少一個(gè)(后綴數(shù)個(gè)數(shù)比原來(lái)操作數(shù)少一個(gè)(后綴“+”“+”和和后綴后綴“-”“-”除外)。除外)。說(shuō)明說(shuō)明30n用成員函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí),用成員函數(shù)實(shí)現(xiàn)運(yùn)算符的重載時(shí),運(yùn)算符運(yùn)算符的左操作數(shù)為當(dāng)前對(duì)象的左操作數(shù)為當(dāng)前對(duì)象,并且要

22、用到隱含的,并且要用到隱含的thisthis指針。指針。 n運(yùn)算符重載函數(shù)不能定義為靜態(tài)的成員函運(yùn)算符重載函數(shù)不能定義為靜態(tài)的成員函數(shù),因?yàn)殪o態(tài)的成員函數(shù)中沒(méi)有數(shù),因?yàn)殪o態(tài)的成員函數(shù)中沒(méi)有thisthis指針指針。說(shuō)明說(shuō)明31說(shuō)明說(shuō)明n如果是雙目運(yùn)算符,左操作數(shù)一定是對(duì)象本如果是雙目運(yùn)算符,左操作數(shù)一定是對(duì)象本身,由身,由thisthis指針給出,另一個(gè)操作數(shù)需要由指針給出,另一個(gè)操作數(shù)需要由運(yùn)算符重載的參數(shù)表來(lái)傳遞。運(yùn)算符重載的參數(shù)表來(lái)傳遞。 n如果是單目運(yùn)算符,操作數(shù)由對(duì)象的如果是單目運(yùn)算符,操作數(shù)由對(duì)象的thisthis指指針給出,就不再需要任何參數(shù)。但重載針給出,就不再需要任何參數(shù)。但

23、重載“+”“+”和和“-”“-”運(yùn)算符時(shí),運(yùn)算符時(shí),C+C+約定,如果在參數(shù)表約定,如果在參數(shù)表中放一個(gè)整型參數(shù),則表示重載的運(yùn)算符為中放一個(gè)整型參數(shù),則表示重載的運(yùn)算符為后綴運(yùn)算符。后綴運(yùn)算符。 32n根據(jù)類的封裝性,一般將數(shù)據(jù)成員聲明根據(jù)類的封裝性,一般將數(shù)據(jù)成員聲明為私有成員,外部不能直接訪問(wèn),只能為私有成員,外部不能直接訪問(wèn),只能通過(guò)類的公有成員函數(shù)對(duì)私有成員進(jìn)行通過(guò)類的公有成員函數(shù)對(duì)私有成員進(jìn)行訪問(wèn)。訪問(wèn)。nC+C+從高效的角度出發(fā)從高效的角度出發(fā),提供友元機(jī)制,提供友元機(jī)制,使被聲明為友元的全局函數(shù)或者其他類使被聲明為友元的全局函數(shù)或者其他類可以直接訪問(wèn)當(dāng)前類中的私有成員,又可以直

24、接訪問(wèn)當(dāng)前類中的私有成員,又不改變其私有成員的訪問(wèn)權(quán)限。不改變其私有成員的訪問(wèn)權(quán)限。 友元友元33n友元可以是一個(gè)友元可以是一個(gè)全局函數(shù)全局函數(shù)、另一個(gè)類的、另一個(gè)類的成成員函數(shù)員函數(shù)或者是一個(gè)或者是一個(gè)類類。分別稱為友元函數(shù)。分別稱為友元函數(shù)和友元類。友元類的所有成員函數(shù)都是友和友元類。友元類的所有成員函數(shù)都是友元函數(shù),可以訪問(wèn)被訪問(wèn)類的任何成員。元函數(shù),可以訪問(wèn)被訪問(wèn)類的任何成員。n友元聲明以關(guān)鍵字友元聲明以關(guān)鍵字friendfriend開(kāi)始開(kāi)始,只能出現(xiàn)只能出現(xiàn)在在被訪問(wèn)類被訪問(wèn)類的定義中的定義中。具體格式如下:。具體格式如下: nfriend friend (););nfriend c

25、lass friend class ; ; 友元友元34n友元函數(shù)不是成員函數(shù)友元函數(shù)不是成員函數(shù),用法也與普通的,用法也與普通的函數(shù)完全一致,函數(shù)完全一致,只不過(guò)它能訪問(wèn)類中所有只不過(guò)它能訪問(wèn)類中所有的數(shù)據(jù)的數(shù)據(jù)。友元函數(shù)破壞了類的封裝性和隱友元函數(shù)破壞了類的封裝性和隱蔽性,使得非成員函數(shù)可以訪問(wèn)類的私有蔽性,使得非成員函數(shù)可以訪問(wèn)類的私有成員成員。n一個(gè)類的友元可以自由地用該類中的所有一個(gè)類的友元可以自由地用該類中的所有成員。成員。 友元友元35class Afloat x,y;public: A(float a, float b) x=a; y=b; float Sum() return

26、 x+y; friend float Sum(A &a) return a.x+a.y; ;int main() A t1(4,5),t2(10,20); coutt1.Sum()endl; coutSum(t2)endl; return 0;友元函數(shù)友元函數(shù)成員函數(shù)成員函數(shù)友元函數(shù)的調(diào)用,直接調(diào)用友元函數(shù)的調(diào)用,直接調(diào)用成員函數(shù)的調(diào)用,利用對(duì)象名調(diào)用成員函數(shù)的調(diào)用,利用對(duì)象名調(diào)用友元函數(shù)只能用友元函數(shù)只能用對(duì)象對(duì)象名名引用類中的數(shù)據(jù)。引用類中的數(shù)據(jù)。私有數(shù)據(jù)私有數(shù)據(jù)36友元函數(shù)與普通函數(shù)友元函數(shù)與普通函數(shù)n友元函數(shù)近似于友元函數(shù)近似于普通的函數(shù)普通的函數(shù),它不帶有,它不帶有thist

27、his指針,指針,因此必須將對(duì)象名或?qū)ο蟮囊虼吮仨殞?duì)象名或?qū)ο蟮囊米鳛橛言瘮?shù)的參數(shù)引用作為友元函數(shù)的參數(shù),這樣才能訪,這樣才能訪問(wèn)到對(duì)象的成員。問(wèn)到對(duì)象的成員。n友元函數(shù)必須在類的定義中聲明,友元函數(shù)必須在類的定義中聲明,其函其函數(shù)體可在類內(nèi)定義,也可在類外定義數(shù)體可在類內(nèi)定義,也可在類外定義。n友元函數(shù)可以訪問(wèn)該類中的所有成員友元函數(shù)可以訪問(wèn)該類中的所有成員(公有的、私有的和保護(hù)的)(公有的、私有的和保護(hù)的),而一般,而一般函數(shù)只能訪問(wèn)類中的公有成員。函數(shù)只能訪問(wèn)類中的公有成員。37class Afloat x,y;public: A(float a, float b) x=a; y=

28、b; float Getx() return x; float Gety() return y; float Sum() return x+y; friend float Sum(A &); ;float Sumxy(A &a) return a.Getx()+a.Gety(); float Sum(A &a) return a.x+a.y; int main() A t1(1,2),t2(10,20), t3(100,200); coutt1.Sum()endl; coutSum(t2)endl; coutSumxy(t3)endl; return 0;成員函數(shù)成員函

29、數(shù)友元函數(shù)友元函數(shù),可以直接調(diào)用類中私有成員可以直接調(diào)用類中私有成員普通函數(shù),必須通過(guò)公有函數(shù)訪問(wèn)私有成員普通函數(shù),必須通過(guò)公有函數(shù)訪問(wèn)私有成員對(duì)象調(diào)用成員函數(shù)對(duì)象調(diào)用成員函數(shù)調(diào)用友元函數(shù)調(diào)用友元函數(shù)調(diào)用普通函數(shù)調(diào)用普通函數(shù)友元函數(shù)友元函數(shù)38n友元函數(shù)不受類中訪問(wèn)權(quán)限關(guān)鍵字的限制,友元函數(shù)不受類中訪問(wèn)權(quán)限關(guān)鍵字的限制,可以把它放在類的私有、公有或保護(hù)部分,可以把它放在類的私有、公有或保護(hù)部分,其作用都是一樣的。換言之,其作用都是一樣的。換言之,在類中對(duì)友元在類中對(duì)友元函數(shù)指定訪問(wèn)權(quán)限是不起作用的函數(shù)指定訪問(wèn)權(quán)限是不起作用的。n友元函數(shù)的作用域與普通函數(shù)的作用域相同。友元函數(shù)的作用域與普通函數(shù)

30、的作用域相同。n謹(jǐn)慎使用友元函數(shù)謹(jǐn)慎使用友元函數(shù)n通常使用友元函數(shù)來(lái)通常使用友元函數(shù)來(lái)取取對(duì)象中的數(shù)據(jù)成員值,而對(duì)象中的數(shù)據(jù)成員值,而不修改不修改對(duì)象中的成員值,保證數(shù)據(jù)安全。對(duì)象中的成員值,保證數(shù)據(jù)安全。39n大多數(shù)情況是友元函數(shù)是某個(gè)類的成員函數(shù),大多數(shù)情況是友元函數(shù)是某個(gè)類的成員函數(shù),即即A A類中的某個(gè)成員函數(shù)是類中的某個(gè)成員函數(shù)是B B類中的友元函數(shù),類中的友元函數(shù),這個(gè)成員函數(shù)可以直接訪問(wèn)這個(gè)成員函數(shù)可以直接訪問(wèn)B B類中的私有數(shù)類中的私有數(shù)據(jù)。據(jù)。這就實(shí)現(xiàn)了類與類之間的溝通。這就實(shí)現(xiàn)了類與類之間的溝通。n注意:注意:一個(gè)類的成員函數(shù)作為另一個(gè)類的友元一個(gè)類的成員函數(shù)作為另一個(gè)類的

31、友元函數(shù)時(shí),函數(shù)時(shí),應(yīng)先定義友元函數(shù)所在的類。應(yīng)先定義友元函數(shù)所在的類。class Avoid fun( B &);class Bfriend void fun( B &);既是類既是類A A的成員函數(shù)的成員函數(shù)又是類又是類B B的友元函數(shù)的友元函數(shù)40class B ;/先定義類先定義類A,則首先對(duì)類,則首先對(duì)類B作引用性說(shuō)明作引用性說(shuō)明class A ./類類A的成員定義的成員定義 public: void fun( B & );/函數(shù)的原型說(shuō)明函數(shù)的原型說(shuō)明 ;class B. friend void A:fun( B & );/定義友元函數(shù)定義友元函數(shù);

32、 void A:fun ( B &b) /函數(shù)的完整定義函數(shù)的完整定義 ./函數(shù)體的定義函數(shù)體的定義類類A A中的成員函數(shù)中的成員函數(shù)fun()fun()是類是類B B的友元的友元函數(shù)。即在函數(shù)。即在fun()fun()中中可以直接引用類可以直接引用類B B的的私有成員。私有成員。41class B;/必須在此進(jìn)行引用性說(shuō)明必須在此進(jìn)行引用性說(shuō)明class Afloat x,y;public: A(float a, float b) x=a; y=b; void Sum(B &); /說(shuō)明友元函數(shù)的函數(shù)原型,是類說(shuō)明友元函數(shù)的函數(shù)原型,是類A的成員函數(shù)的成員函數(shù);class B

33、float m,n;public: B(float a,float b) m=a;n=b; friend void A:Sum(B &);/說(shuō)明類說(shuō)明類A的成員函數(shù)是類的成員函數(shù)是類B的友元函數(shù)的友元函數(shù);void A:Sum( B &b)/定義該友元函數(shù)定義該友元函數(shù) x=b.m+b.n; y=b.m-b.n; int main() A a1(3,5); B b1(10,20); a1.Sum(b1); /調(diào)用該函數(shù),調(diào)用該函數(shù),因是類因是類A的成員函數(shù),故用類的成員函數(shù),故用類A的對(duì)象調(diào)用的對(duì)象調(diào)用 return 0;a1.x=30a1.y=-10直接引用類直接引用類B B

34、的私有成員的私有成員類類A中有一個(gè)函數(shù)可以直中有一個(gè)函數(shù)可以直接引用類接引用類B的私有成員的私有成員42友元類友元類class A . friend class B;class B . 類類B B是類是類A A的友元的友元類類B B可以自由使用可以自由使用類類A A中的成員中的成員對(duì)于類對(duì)于類B B而言,類而言,類A A是透明的是透明的類類B B必須通過(guò)必須通過(guò)類類A A的對(duì)象的對(duì)象使用類使用類A A的成員的成員43const float PI =3.1415926;class Afloat r ;float h;public: A(float a,float b)r=a; h=b;float

35、 Getr()return r;float Geth()return h;friend class B;/定義類定義類B為類為類A的友元的友元;class B int number;public: B(int n=1)number=n;void Show(A &a) coutPI*a.r*a.r*a.h*numberendl; /求類求類A的某個(gè)對(duì)象的某個(gè)對(duì)象*n的體積的體積;int main()A a1(25,40),a2(10,40);B b1(2);b1.Show (a1); b1.Show (a2); return 0;直接引用類直接引用類A A的私有成員的私有成員類類B B中

36、的任何函數(shù)都中的任何函數(shù)都能使用類能使用類A A中的所有中的所有私有成員。私有成員。44n不管是按哪一種方式派生,基類的私有成不管是按哪一種方式派生,基類的私有成員在派生類中都是不可見(jiàn)的。員在派生類中都是不可見(jiàn)的。n如果在一個(gè)派生類中要訪問(wèn)基類中的私有如果在一個(gè)派生類中要訪問(wèn)基類中的私有成員,可以將這個(gè)成員,可以將這個(gè)派生類聲明為基類的友元派生類聲明為基類的友元。class Base friend class Derive; .class Derive:public Base .直接使用直接使用Base中的私有成員中的私有成員45class M friend class N; /N為為M的友元

37、,可以直接使用的友元,可以直接使用M中的私有成員中的私有成員private: int i , j; void show(void)couti=itj=jt;public: M(int a=0,int b=0) i=a; j=b;class N :public M /N為為M的派生類的派生類public: N(int a=0,int b=0):M(a,b) void Print(void) show(); couti+j=i+jendl;int main() N n1(10,20); M m1(100,200);/ m1.show();/私有成員函數(shù),在類外不可調(diào)用私有成員函數(shù),在類外不可調(diào)用

38、n1.Print(); return 0;直接引用類直接引用類M M的私有成員函數(shù)和私有成員的私有成員函數(shù)和私有成員46基類對(duì)象基類對(duì)象 M派生類對(duì)象派生類對(duì)象 Nx(私有)私有)Show( )(私私有有)x(私有私有)Show( )(私有私有)y(公有公有)Showy( )(公有公有)showy( ) show(); coutxendl; 當(dāng)派生類是基類的友元時(shí)當(dāng)派生類是基類的友元時(shí):N n; n.showy( ); n.show( ); 錯(cuò)誤錯(cuò)誤, ,類外不可調(diào)用類外不可調(diào)用47n友元的出現(xiàn)主要是為了解決一些實(shí)際問(wèn)題,友元本身不是面向?qū)τ言某霈F(xiàn)主要是為了解決一些實(shí)際問(wèn)題,友元本身不是面向

39、對(duì)象的內(nèi)容。象的內(nèi)容。n通過(guò)友元機(jī)制,一個(gè)類或函數(shù)可以直接訪問(wèn)另一類中的非公有成通過(guò)友元機(jī)制,一個(gè)類或函數(shù)可以直接訪問(wèn)另一類中的非公有成員。員。n可以將全局函數(shù)、類、類的成員函數(shù)聲明為友元??梢詫⑷趾瘮?shù)、類、類的成員函數(shù)聲明為友元。n友元關(guān)系是不能傳遞的。友元關(guān)系是不能傳遞的。B B類是類是A A類的友元,類的友元,C C類是類是B B類的友元,類的友元,C C類和類和A A類之間,如果沒(méi)有聲明,就沒(méi)有任何友元關(guān)系,不能進(jìn)行類之間,如果沒(méi)有聲明,就沒(méi)有任何友元關(guān)系,不能進(jìn)行數(shù)據(jù)共享。數(shù)據(jù)共享。n友元關(guān)系是單向的,如果聲明友元關(guān)系是單向的,如果聲明B B類是類是A A類的友元,類的友元,B B

40、類的成員函數(shù)類的成員函數(shù)就可以訪問(wèn)就可以訪問(wèn)A A類的私有成員和保護(hù)成員。但類的私有成員和保護(hù)成員。但A A類的成員不能訪問(wèn)類的成員不能訪問(wèn)B B類的私有成員和保護(hù)成員,除非聲明類的私有成員和保護(hù)成員,除非聲明A A類是類是B B類的友元。類的友元。n友元關(guān)系是不能繼承的。友元關(guān)系是不能繼承的。B B類是類是A A類的友元,類的友元,C C類是類是B B類的派生類,類的派生類,則則C C類和類和A A類之間沒(méi)有任何友元關(guān)系,除非類之間沒(méi)有任何友元關(guān)系,除非C C類聲明類聲明A A類是友元。類是友元。 友元小結(jié)友元小結(jié)48n運(yùn)算符重載有兩種方式:運(yùn)算符重載為運(yùn)算符重載有兩種方式:運(yùn)算符重載為類的

41、類的成員函數(shù)成員函數(shù),運(yùn)算符重載為,運(yùn)算符重載為類的友元函數(shù)類的友元函數(shù)。n當(dāng)運(yùn)算符重載為類的成員函數(shù)時(shí),對(duì)于單目當(dāng)運(yùn)算符重載為類的成員函數(shù)時(shí),對(duì)于單目運(yùn)算符,操作數(shù)一定是對(duì)象本身,對(duì)于雙目運(yùn)算符,操作數(shù)一定是對(duì)象本身,對(duì)于雙目運(yùn)算符,左操作數(shù)一定是對(duì)象。運(yùn)算符,左操作數(shù)一定是對(duì)象。n當(dāng)運(yùn)算符重載為友元函數(shù)時(shí),參數(shù)中同樣必當(dāng)運(yùn)算符重載為友元函數(shù)時(shí),參數(shù)中同樣必須有一個(gè)是用戶自定義類型的對(duì)象,但不限須有一個(gè)是用戶自定義類型的對(duì)象,但不限定其必須是左操作數(shù)。定其必須是左操作數(shù)。運(yùn)算符重載的使用運(yùn)算符重載的使用49運(yùn)算符重載為運(yùn)算符重載為成員函數(shù)成員函數(shù)時(shí),是由一個(gè)操作數(shù)調(diào)用時(shí),是由一個(gè)操作數(shù)調(diào)用另

42、一個(gè)操作數(shù)。另一個(gè)操作數(shù)。A a ,b , c;c=a+b;實(shí)際上是實(shí)際上是c=a.operator+(b);c=+a;實(shí)際上是實(shí)際上是c=a.operator+( );即函數(shù)的實(shí)參只有一個(gè)或沒(méi)有。即函數(shù)的實(shí)參只有一個(gè)或沒(méi)有。c+=a;實(shí)際上是實(shí)際上是c.operator+=( a );50n將運(yùn)算符的重載函數(shù)定義為友元函數(shù),將運(yùn)算符的重載函數(shù)定義為友元函數(shù),參與參與運(yùn)算的對(duì)象全部成為函數(shù)參數(shù)。運(yùn)算的對(duì)象全部成為函數(shù)參數(shù)。A a ,b , c;c=a+b;實(shí)際上是實(shí)際上是 c=operator+(a, b);c=+a;實(shí)際上是實(shí)際上是 c=operator+(a);c+=a;實(shí)際上是實(shí)際上是

43、operator+=( c, a );51n語(yǔ)法形式語(yǔ)法形式friendfriend operator operator () ; n運(yùn)算符重載為類的友元函數(shù)運(yùn)算符重載為類的友元函數(shù)最多只能有兩個(gè)參數(shù)最多只能有兩個(gè)參數(shù)n如果重載雙目運(yùn)算符,則如果重載雙目運(yùn)算符,則第一個(gè)參數(shù)代表左操作第一個(gè)參數(shù)代表左操作數(shù),第二個(gè)參數(shù)代表右操作數(shù)數(shù),第二個(gè)參數(shù)代表右操作數(shù)重載為類的友元函數(shù)重載為類的友元函數(shù)52friend const double operator+(Triangle &t1,Triangle &t2) /運(yùn)算符重載為友元函數(shù)運(yùn)算符重載為友元函數(shù) return t1.area+

44、t2.area; private: int x,y,z; double area; ; int main() Triangle t1(3,4,5),t2(4,5,6); double s; coutt1:;t1.disparea(); coutt2:;t2.disparea(); s=t1+t2; cout總面積總面積=sendl; return 0;class Triangle;const double operator+(Triangle &t1,Triangle &t2);class Triangle public: Triangle(int i,int j,int k)

45、 double s; x=i;y=j;z=k; s=(x+y+z)/2.0; area=sqrt(s*(s-x)*(s-y)*(s-z); void disparea() coutArea=areaendl; 【例例6-96-9】示例運(yùn)算符重載為類示例運(yùn)算符重載為類的友元函數(shù)。的友元函數(shù)。53class 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

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

47、式為:A operator +(A &a, int)A a, b;b=+a;b=a+;A operator +( A a ) . A operator +(A a, int) . 重載為類的友元函數(shù)重載為類的友元函數(shù)55class Aint i;public:A(int a=0) i=a; void Show(void)couti=i、-*必須為成員函數(shù)必須為成員函數(shù)+=、=、/=、*=、=、&=、|=、%=、=、=成員函數(shù)成員函數(shù)所有其他二元運(yùn)算符所有其他二元運(yùn)算符友元函數(shù)友元函數(shù)59類型轉(zhuǎn)換運(yùn)算符重載類型轉(zhuǎn)換運(yùn)算符重載n基本類型到類類型的轉(zhuǎn)換基本類型到類類型的轉(zhuǎn)換n類類型到

48、基本類型的轉(zhuǎn)換類類型到基本類型的轉(zhuǎn)換60基本類型到類類型的轉(zhuǎn)換基本類型到類類型的轉(zhuǎn)換n同類型的對(duì)象可以相互賦值,相當(dāng)于類同類型的對(duì)象可以相互賦值,相當(dāng)于類中的數(shù)據(jù)成員相互賦值。中的數(shù)據(jù)成員相互賦值。n如果如果直接將數(shù)據(jù)賦給對(duì)象直接將數(shù)據(jù)賦給對(duì)象,所賦入的數(shù),所賦入的數(shù)據(jù)需要強(qiáng)制類型轉(zhuǎn)換,據(jù)需要強(qiáng)制類型轉(zhuǎn)換,這種轉(zhuǎn)換需要調(diào)用這種轉(zhuǎn)換需要調(diào)用構(gòu)造函數(shù)構(gòu)造函數(shù)。也就是。也就是利用利用構(gòu)造函數(shù)構(gòu)造函數(shù)能完成從能完成從基本類型到類類型的轉(zhuǎn)換?;绢愋偷筋愵愋偷霓D(zhuǎn)換。n使用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換必須有一個(gè)使用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換必須有一個(gè)前提,那就是在這個(gè)類中定義一個(gè)只有一前提,那就是在這個(gè)類中定義一個(gè)只有

49、一個(gè)參數(shù)的構(gòu)造函數(shù)。個(gè)參數(shù)的構(gòu)造函數(shù)。61注意:當(dāng)構(gòu)造函數(shù)只有一個(gè)參數(shù)時(shí),可以用注意:當(dāng)構(gòu)造函數(shù)只有一個(gè)參數(shù)時(shí),可以用= 強(qiáng)制賦值強(qiáng)制賦值。class Bint x;public: B(int a) x=a; cout調(diào)用構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)n; B() cout調(diào)用析構(gòu)函數(shù)調(diào)用析構(gòu)函數(shù)n; void Print() coutxendl; ;int main()B b1(1) ; b1.Print(); b1=10; b1.Print(); cout退出主函數(shù)退出主函數(shù)n; return 0;調(diào)用構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)單參數(shù)可以這樣賦值單參數(shù)可以這樣賦值1調(diào)用構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)調(diào)用析構(gòu)函數(shù)調(diào)用

50、析構(gòu)函數(shù)10退出主函數(shù)退出主函數(shù)調(diào)用析構(gòu)函數(shù)調(diào)用析構(gòu)函數(shù)b1=B(10)產(chǎn)生一個(gè)產(chǎn)生一個(gè)臨時(shí)對(duì)象臨時(shí)對(duì)象62class A int x, y; public: A(int a, int b) x=a; y=b; int main() A a(2,3); coutaendl; return0;錯(cuò)誤!類的對(duì)象不能直接輸出錯(cuò)誤!類的對(duì)象不能直接輸出利用類型轉(zhuǎn)換運(yùn)利用類型轉(zhuǎn)換運(yùn)算符重載將類算符重載將類A的對(duì)象的對(duì)象a轉(zhuǎn)換成轉(zhuǎn)換成某種基本數(shù)據(jù)類某種基本數(shù)據(jù)類型型Aint63類類型到基本類型的轉(zhuǎn)換n構(gòu)造函數(shù)能夠把基本類型數(shù)據(jù)轉(zhuǎn)換成指定類對(duì)構(gòu)造函數(shù)能夠把基本類型數(shù)據(jù)轉(zhuǎn)換成指定類對(duì)象,但不能把類對(duì)象轉(zhuǎn)換為基本

51、類型數(shù)據(jù)。象,但不能把類對(duì)象轉(zhuǎn)換為基本類型數(shù)據(jù)。nC+引入一種特殊的成員函數(shù)引入一種特殊的成員函數(shù)類類型轉(zhuǎn)換類類型轉(zhuǎn)換函函數(shù)。類類型轉(zhuǎn)換函數(shù)實(shí)際上就是一個(gè)類型轉(zhuǎn)換運(yùn)數(shù)。類類型轉(zhuǎn)換函數(shù)實(shí)際上就是一個(gè)類型轉(zhuǎn)換運(yùn)算符算符重載函數(shù)重載函數(shù)。n類類型轉(zhuǎn)換函數(shù)專門用來(lái)將類類型轉(zhuǎn)換為基本類類型轉(zhuǎn)換函數(shù)專門用來(lái)將類類型轉(zhuǎn)換為基本數(shù)據(jù)類型,它只能被重載為成員函數(shù)。數(shù)據(jù)類型,它只能被重載為成員函數(shù)。64類類型到基本類型的轉(zhuǎn)換 重載重載類型轉(zhuǎn)換運(yùn)算符函數(shù)格式:類型轉(zhuǎn)換運(yùn)算符函數(shù)格式:operator返回返回基本基本類型名類型名()() return 基本類型值基本類型值轉(zhuǎn)換函數(shù)的調(diào)用是隱轉(zhuǎn)換函數(shù)的調(diào)用是隱含的,沒(méi)有參數(shù)。含的,沒(méi)有參數(shù)。函數(shù)前不需要加函數(shù)前不需要加函數(shù)值類型。函數(shù)值類型。65class Aint i;public:public:A(int a=0) i=a; void Show(void)couti=iendl; operator int( ) returni;int ma

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論