![第4章對(duì)運(yùn)算符進(jìn)行重載_第1頁](http://file4.renrendoc.com/view/a2ac97a7b0053750b205ce68f7516bf8/a2ac97a7b0053750b205ce68f7516bf81.gif)
![第4章對(duì)運(yùn)算符進(jìn)行重載_第2頁](http://file4.renrendoc.com/view/a2ac97a7b0053750b205ce68f7516bf8/a2ac97a7b0053750b205ce68f7516bf82.gif)
![第4章對(duì)運(yùn)算符進(jìn)行重載_第3頁](http://file4.renrendoc.com/view/a2ac97a7b0053750b205ce68f7516bf8/a2ac97a7b0053750b205ce68f7516bf83.gif)
![第4章對(duì)運(yùn)算符進(jìn)行重載_第4頁](http://file4.renrendoc.com/view/a2ac97a7b0053750b205ce68f7516bf8/a2ac97a7b0053750b205ce68f7516bf84.gif)
![第4章對(duì)運(yùn)算符進(jìn)行重載_第5頁](http://file4.renrendoc.com/view/a2ac97a7b0053750b205ce68f7516bf8/a2ac97a7b0053750b205ce68f7516bf85.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章對(duì)運(yùn)算符進(jìn)行重載4.1為什么要對(duì)運(yùn)算符重載4.2對(duì)運(yùn)算符重載的方法4.3重載運(yùn)算符的規(guī)則4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)4.5重載單目運(yùn)算符4.6重載流插入運(yùn)算符和流提取運(yùn)算符4.6.1重載流插入運(yùn)算符"<<"4.6.2重載流提取運(yùn)算符">>"4.7有關(guān)運(yùn)算符重載的歸納4.8不同類型數(shù)據(jù)間的轉(zhuǎn)換4.8.1標(biāo)準(zhǔn)類型數(shù)據(jù)間的轉(zhuǎn)換4.8.2用轉(zhuǎn)換構(gòu)造函數(shù)進(jìn)行不同類型數(shù)據(jù)的轉(zhuǎn)換4.8.3類型轉(zhuǎn)換函數(shù)4.1為什么要對(duì)運(yùn)算符重載前面提過一般函數(shù)和構(gòu)造函數(shù)可以重載。類成員函數(shù)也可以重載,規(guī)則和構(gòu)造函數(shù)一樣。重載函數(shù)之間靠所包含的參數(shù)的類型與個(gè)數(shù)之不同進(jìn)行區(qū)分。在C++中,說明一個(gè)類就是說明一個(gè)新類型。因此,類對(duì)象和變量一樣,可以作為參數(shù)傳遞,也可以作為返回類型。用戶能否根據(jù)自己的需要對(duì)C++已提供的運(yùn)算符進(jìn)行重載,賦予它們新的含義,使之一名多用。例如,能否用"+"號(hào)進(jìn)行兩個(gè)復(fù)數(shù)的相加。重載運(yùn)算符增強(qiáng)了C++語言的可擴(kuò)充性。在基本數(shù)據(jù)類型上,系統(tǒng)提供了許多預(yù)定義的運(yùn)算符,它們可以用一種簡(jiǎn)潔的方式工作,例如“+”運(yùn)算符:
intx,y;y=x+y;這是表達(dá)兩個(gè)整數(shù)相加的方法,非常簡(jiǎn)單。4.1為什么要對(duì)運(yùn)算符重載若有一個(gè)類:classx{ public: inty;//…};main(){xa,b;a.y=a.y+b.y;//…return1;}4.1為什么要對(duì)運(yùn)算符重載從上面的例子看出:上述表達(dá)式a.y=a.y+b.y不如y=x+y簡(jiǎn)潔,也不直觀;而且還存在一個(gè)問題,若類x中的y為私有成員,上述表達(dá)式a.y=a.y+b.y就是錯(cuò)誤的。為了表達(dá)上的方便,希望已預(yù)定義的運(yùn)算符也可以在特定類的對(duì)象上以新的含義進(jìn)行解釋。如上面的a=a+b,這就需要重載運(yùn)算符來解決。4.2運(yùn)算符重載的方法運(yùn)算符重載實(shí)質(zhì)上是函數(shù)重載。重載運(yùn)算符的一般格式如下:函數(shù)類型operator運(yùn)算符名稱(形參表){對(duì)運(yùn)算符的重載處理}例如,想將"+"用于Complex類的加法運(yùn)算,函數(shù)的原型可以是這樣的:Complexoperator+(Complex&c1,Complex&c2);operator是關(guān)鍵字,用于定義重載運(yùn)算符的函數(shù),運(yùn)算符名稱就是C++已有的運(yùn)算符。函數(shù)名是由operator和運(yùn)算符組成的。上面的"operator+"就是函數(shù)名意思是“對(duì)運(yùn)算符+重載的函數(shù)”,即函數(shù)“operator+”重載了運(yùn)算符"+"。這類函數(shù)和其他函數(shù)在形式上沒有什么區(qū)別。4.2運(yùn)算符重載的方法例:對(duì)運(yùn)算符"+"實(shí)行重載,使之能用于兩個(gè)復(fù)數(shù)相加#include<iostream>usingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);voiddisplay();private:doublereal;doubleimag;};4.2運(yùn)算符重載的方法ComplexComplex::operator+(Complex&c2){Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}voidComplex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}4.2運(yùn)算符重載的方法intmain(){Complexc1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c1=";c1.display();cout<<"c2=";c2.display();cout<<"c1+c2=";c3.display();return0;}4.2運(yùn)算符重載的方法在將運(yùn)算符“+”重載為類的成員函數(shù)后,C++編譯系統(tǒng)將程序中的表達(dá)式c1+c2解釋為c1.operator+(c2)。C++提供的運(yùn)算符原來只能用于標(biāo)準(zhǔn)類型數(shù)據(jù)的運(yùn)算,但C++程序設(shè)計(jì)的重要基礎(chǔ)是類和對(duì)象,為了使類和對(duì)象有更強(qiáng)的生命力,C++采取的方法不是為類對(duì)象另外定義一批新的運(yùn)算符,而是允許重載現(xiàn)有的運(yùn)算符,使這些簡(jiǎn)單眾所周知的運(yùn)算符能直接應(yīng)用于自己定義的類對(duì)象。通過運(yùn)算符重載,擴(kuò)大了C++已有運(yùn)算符的作用范圍,使之能用于類對(duì)象。4.3重載運(yùn)算符的規(guī)則(1)C++不允許用戶自己定義新的運(yùn)算符,只能對(duì)已有的C++運(yùn)算符進(jìn)行重載。(2)C++允許重載的運(yùn)算符雙目算術(shù)運(yùn)算符+-*/%關(guān)系運(yùn)算符==!=<><=>=邏輯運(yùn)算符||&&!單目運(yùn)算符+-*(指針)&(取地址)自增自減運(yùn)算符++--位運(yùn)算符^&|
~<<>>
賦值運(yùn)算符=+=-=*=
/=%=^=&=|=>>=<<=空間申請(qǐng)與釋放newdeletenew[]delete[]其他運(yùn)算符()(函數(shù)調(diào)用)->(成員訪問)->*(成員指針訪問),(逗號(hào))[](下標(biāo))4.3重載運(yùn)算符的規(guī)則不能被重載的運(yùn)算符:.(成員訪問)
::(域運(yùn)算符)*(成員指針訪問運(yùn)算符)
?:(條件運(yùn)算符)
sizeof(3)重載不能改變這些運(yùn)算符所需操作數(shù)的數(shù)目。(4)重載運(yùn)算符時(shí),不能改變它們的優(yōu)先級(jí)(5)重載不能改變運(yùn)算符的結(jié)合性(6)重載運(yùn)算符的函數(shù)不能有默認(rèn)的參數(shù),否則就改變了運(yùn)算符參數(shù)的個(gè)數(shù),與前面矛盾4.3重載運(yùn)算符的規(guī)則(7)重載的運(yùn)算符必須和用戶定義的自定義類型的對(duì)象一起使用,其參數(shù)至少有一個(gè)是類對(duì)象(或類對(duì)象的引用)。也就是說,參數(shù)不能全部是C++的標(biāo)準(zhǔn)類型,以防止用戶修改標(biāo)準(zhǔn)類型數(shù)據(jù)的運(yùn)算符性質(zhì)。(8)用于類對(duì)象的運(yùn)算符一般必須存在,但有兩個(gè)例外,運(yùn)算符“=”和“&”不必用戶重載。“=”可以用于每一個(gè)類對(duì)象,可以利用它在同類對(duì)象之間相互賦值?!?”能返回類對(duì)象在內(nèi)存中的起始地址。(9)從理論上說,可以將一個(gè)運(yùn)算符重載為執(zhí)行任意的操作。應(yīng)該使重載運(yùn)算符的功能類似于該運(yùn)算符作用于標(biāo)準(zhǔn)類型數(shù)據(jù)時(shí)所實(shí)現(xiàn)的功能。4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)對(duì)運(yùn)算符重載的函數(shù)有兩種處理方式:(1)把運(yùn)算符重載的函數(shù)作為類的成員函數(shù)(2)運(yùn)算符重載的函數(shù)不是類的成員函數(shù)(可以是一個(gè)普通函數(shù)),在類中把它聲明為友元函數(shù)。一、用成員函數(shù)重載運(yùn)算符在C++中,運(yùn)算符重載實(shí)際上是一種函數(shù)調(diào)用的形式,用成員函數(shù)重載運(yùn)算符就是將運(yùn)算符重載定義成一個(gè)類的成員函數(shù)的形式。
1.用成員函數(shù)重載運(yùn)算符的語法形式(1)在類定義體中聲明運(yùn)算符函數(shù)
typeoperator@(參數(shù)表)
其中type為返回類型;operator為關(guān)鍵字;@為要重載的運(yùn)算符符號(hào); 若運(yùn)算符為一元的,參數(shù)表為空,此當(dāng)前對(duì)象作為運(yùn)算符的左操作數(shù); 若運(yùn)算符是二元的,參數(shù)表中有一個(gè)操作數(shù),此時(shí)當(dāng)前對(duì)象作為運(yùn)算符 的左操作數(shù),參數(shù)表中的操作數(shù)作為此運(yùn)算符的右操作數(shù)。4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)前面的例子,"+"是雙目運(yùn)算符,為什么重載函數(shù)中只有一個(gè)參數(shù)呢?實(shí)際上,運(yùn)算符重載函數(shù)應(yīng)當(dāng)有兩個(gè)參數(shù),由于重載函數(shù)是Complex類中的成員函數(shù),因此有一個(gè)參數(shù)是隱含的,運(yùn)算符函數(shù)是用this指針隱式地訪問類對(duì)象的成員。例:
classx{ intoperator+(xa);
};(2)定義運(yùn)算符函數(shù)typex::operator@(參數(shù)表){....}其中x是重載此運(yùn)算符的類名,符號(hào)含義與上面相同。上面在x類中重載“+”的例子也可定義為下面的形式:intx::operator+(xa){//…}4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)(3)重載運(yùn)算符的使用定義后的重載運(yùn)算符使用起來就像原運(yùn)算符一樣方便。但要注意它的操作數(shù)。一定要是定義它的特定類的對(duì)象,如上面重載“+”運(yùn)算符的例子可用一個(gè)main()來使用它。main(){ xa1,b1; ya2,b2; a1=a1+b1;//正確
a2=a2+b2;//錯(cuò)誤
//…}從例子中看出,a1=a1+b1;是正確的,因?yàn)閍1,b1是類x的對(duì)象,在類x中已經(jīng)重載了“+”運(yùn)算符,因此可以直接使用。而a2=a2+b2;是錯(cuò)誤,因?yàn)閍2,b2是類y的對(duì)象,在y中沒有定義“+”重載,因此不能使用。在類x中對(duì)“+”運(yùn)算符有了重載定義,因此對(duì)此類對(duì)象進(jìn)行相加時(shí)就像做一般的加法一樣簡(jiǎn)單。4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)
2.用成員函數(shù)重載運(yùn)算符的使用舉例前面討論的point類中有兩個(gè)數(shù)據(jù)成員x,y,若希望使兩個(gè)點(diǎn)之間進(jìn)行相加或相減,實(shí)際上是兩個(gè)點(diǎn)坐標(biāo)的x,y值各自相加或相減。如果使用重載運(yùn)算符“+”,“-”的方法,可以使表達(dá)式之間的相加或者相減非常方便,下面給出這個(gè)例子實(shí)現(xiàn)的程序。4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)#include<iostream.h>classpoint{ intx,y; public: point(intvx,intvy) {x=vx;y=vy;} point(){x=0;y=0;} pointoperator+(pointp1);//重載運(yùn)算符"+" pointoperator-(pointp1);//重載運(yùn)算符"-" voidprint() {cout<<x<<""<<y<<"\n";}};4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)pointpoint::operator+(pointp1){//定義兩個(gè)對(duì)象的"+"函數(shù)
pointp; p.x=x+p1.x; p.y=y+p1.y; returnp;//返回當(dāng)前對(duì)象與p對(duì)象之和}pointpoint::operator-(pointp1){//定義兩個(gè)對(duì)象的"+"函數(shù)
pointp; p.x=x-p1.x; p.y=y-p1.y; returnp;//返回當(dāng)前對(duì)象與p對(duì)象之差}4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)main(){ pointp1(10,10),p2(20,20); p1=p1+p2; p1.print(); return1;}4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)二、用友元重載運(yùn)算符在C++中,還可以把重載運(yùn)算符定義成某個(gè)類的友元函數(shù)的形式,而且這種方法用得更多。在定義格式上與用成員函數(shù)定義相似,但稍有差別。
1.用友元重載運(yùn)算符的語法形式用友元重載運(yùn)算符的函數(shù)也稱運(yùn)算符函數(shù)。它與用成員函數(shù)重載運(yùn)算符的函數(shù)之不同,在于后者本身是類中的成員函數(shù);而它是類的友元函數(shù),是獨(dú)立于類外的一般函數(shù)。(1)在類定義體中聲明重載運(yùn)算符,在定義體中,要聲明用友元重載的運(yùn)算符時(shí)與一般的友元函數(shù)有些相似,可采用如下形式:
friendtypeoperator@(參數(shù)表);與用成員函數(shù)定義的方法相比,只是在前面多了一個(gè)friend,其他項(xiàng)目含義相同。4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)
在為友元函數(shù)重載運(yùn)算符的參數(shù)表填寫操作數(shù)時(shí),要注意友元函數(shù)是不屬于任何類的,他沒有this指針,這與成員函數(shù)不同。若重載的是一元運(yùn)算符,則在參數(shù)表中有一個(gè)操作數(shù);若重載的是二元運(yùn)算符,則在參數(shù)表中有兩個(gè)操作數(shù),即所有的操作數(shù)均需用參數(shù)傳遞。 例:
classpoint{ intx,y; public://…friendpointoperator+(pointp1,pointp2);};4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)(2)定義重載運(yùn)算符定義用友元重載的運(yùn)算符與定義一般的友元函數(shù)相似,格式如下:typeoperator@(參數(shù)表){//定義的操作}
因?yàn)榇撕瘮?shù)不屬于任何類,所以不需綴上類名例如上面point類中用友元重載的”+”運(yùn)算符的定義為:pointoperator+(pointp1,pointp2){ pointp; p.x=p1.x+p2.x; p.y=p1.y+p2.y; returnp;}
(3)重載運(yùn)算符的使用 和用成員函數(shù)定義的重載運(yùn)算符的使用一樣。4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)2.用友元重載運(yùn)算符的使用舉例例1用重載運(yùn)算符的方法進(jìn)行復(fù)數(shù)運(yùn)算加法:(a+bi)+(c+di)=(a+c)+(b+d)i減法:(a+bi)-(c+di)=(a-c)+(b-d)i乘法:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i除法:(a+bi)/(c+di)=((a+bi)*(c-di))/(c*c+d*d)現(xiàn)在定義一個(gè)復(fù)數(shù)類complex。在complex類中包含兩個(gè)數(shù)據(jù)成員,即復(fù)數(shù)的實(shí)數(shù)部分real和復(fù)數(shù)的虛數(shù)部分imag。在類中定義必須的成員函數(shù),再將上述+,-,*,/四種算法用友元來重載運(yùn)算符。4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)#include<iostream.h>classcomplex{ floatreal,imag; public: complex(floatr,floati) {real=r;
imag=i;} complex()
{real=0;
imag=0; }voidprint(); friendcomplexoperator+(complexa,complexb); friendcomplexoperator-(complexa,complexb); friendcomplexoperator*(complexa,complexb); friendcomplexoperator/(complexa,complexb);};4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)
voidcomplex::print(){ cout<<real; if(imag>0)cout<<"+"; if(imag!=0)cout<<imag<<"i\n";}complexoperator+(complexa,complexb)//重載+定義
{ complextemp; temp.real=a.real+b.real; temp.imag=a.imag+b.imag; returntemp;}
4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)
complexoperator-(complexa,complexb)//重載-定義
{ complextemp; temp.real=a.real-b.real; temp.imag=a.imag-b.imag; returntemp;}complexoperator*(complexa,complexb)//重載*定義
{ complextemp; temp.real=a.real*b.real-a.imag*b.imag; temp.imag=a.real*b.imag+a.imag*b.real; returntemp;}4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)
complexoperator/(complexa,complexb)//重載/定義
{ complextemp; floattt; tt=1/(b.real*b.real+b.imag*b.imag); temp.real=(a.real*b.real+a.imag*b.imag)*tt; temp.imag=(b.real*a.imag-a.real*b.imag)*tt; returntemp;}4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)main(){
complexc1(2.3,4.6),c2(3.6,2.8),c3; c1.print(); c2.print(); c3=c1+c2; c3.print(); c3=c2-c1; c3.print(); c3=c1*c2; c3.print(); c3=c1/c2; c3.print(); return1;}
4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)究竟把運(yùn)算符重載函數(shù)作為類的成員函數(shù)好,還是友元函數(shù)好?由于友元的使用會(huì)破壞類的封裝,因此從原則上說,要盡量將運(yùn)算符函數(shù)作為成員函數(shù)。但考慮到各方面的因素和程序員的習(xí)慣,以下可供參考:(1)C++規(guī)定,賦值運(yùn)算符=、下標(biāo)運(yùn)算符[]、函數(shù)調(diào)用運(yùn)算符()、成員運(yùn)算符->必須作為成員函數(shù)。(2)流插入<<和流提取運(yùn)算符>>、類型轉(zhuǎn)換運(yùn)算符不能定義為類的成員函數(shù),只能作為友元函數(shù)。(3)一般將單目運(yùn)算符和復(fù)合運(yùn)算符(+=,-=,、=,*=,&=,!=,……=,%=,>>=,<<=)重載為成員函數(shù)。(4)一般將雙目運(yùn)算符重載為友元函數(shù)。4.5重載單目運(yùn)算符單目運(yùn)算符的重載方法和雙目運(yùn)算符類似,但函數(shù)只有一個(gè)參數(shù),如果作為成員函數(shù),還可省略此參數(shù)。下面以自增運(yùn)算符"++"為例,介紹單目運(yùn)算符的重載。例:有一個(gè)Time類,包含數(shù)據(jù)成員minute(分)和sec(秒),模擬秒表,每次走一秒,滿60秒進(jìn)一分鐘,此時(shí)秒又從0算起。要求輸出分和秒的值。#include<iostream>usingnamespacestd;classTime{public:4.5重載單目運(yùn)算符Time(){minute=0;sec=0;}Time(intm,ints):minute(m),sec(s){}Timeoperator++();//聲明運(yùn)算符重載成員函數(shù)voiddisplay(){cout<<minute<<":"<<sec<<endl;}private:intminute;intsec;};4.5重載單目運(yùn)算符TimeTime::operator++(){if(++sec>=60){sec-=60;//滿60秒進(jìn)1分鐘++minute;}return*this;//返回當(dāng)前對(duì)象值}intmain(){Timetime1(34,0);for(inti=0;i<61;i++){++time1;time1.display();}return0;}4.5重載單目運(yùn)算符++和--的重載假若要對(duì)類中的變量進(jìn)行加1和減1操作,操作時(shí)要指明類名及變量名,若此變量名是私有成員,這種操作對(duì)類以外的對(duì)象禁止。因此,要想通過對(duì)類對(duì)象的加1或減1操作而引起其變量的相應(yīng)操作,就必須對(duì)++和--進(jìn)行重載。例,有一個(gè)計(jì)數(shù)器類,要對(duì)它定義兩個(gè)重載運(yùn)算符++,--,可以寫成下面的形式:#include<iostream.h>classcounter{ unsignedintvalue; public: counter(){value=0;} voidoperator++(); voidoperator--(); intget(){returnvalue;}};4.5重載單目運(yùn)算符voidcounter::operator++(){if(value<65535)value++;}voidcounter::operator--(){if(value>0)value--;}main(){ counterc1; for(inti=0;i<10;i++) c1++; cout<<c1.get()<<"\n"; c1--; c1--; cout<<c1.get()<<"\n"; return1;}4.5重載單目運(yùn)算符運(yùn)算符[]和()的重載運(yùn)算符[]是下標(biāo)運(yùn)算符,運(yùn)算符()是函數(shù)調(diào)用運(yùn)算符,這兩個(gè)運(yùn)算符在重載定義時(shí),不能用友元函數(shù)重載,只能采用成員函數(shù)重載。下面的例子是用來處理矩陣的,假如有一個(gè)實(shí)數(shù)矩陣,需要對(duì)它進(jìn)行加法、減法和乘法運(yùn)算,并且重載運(yùn)算符(),用來返回矩陣元素的值。4.5重載單目運(yùn)算符
#include<iostream.h>classmatrix{ shortrows,cols; double*elems; public: matrix(shortrows,shortcols); ~matrix();doubleoperator()(shortrow,shortcol);//重載運(yùn)算符“()”,用來返回元素值 voidsetelem(shortrow,shortcol,doubleval);//為矩陣元素賦值 friendmatrixoperator+(matrixp,matrixq);//實(shí)現(xiàn)矩陣相加friendmatrixoperator-(matrixp,matrixq);//實(shí)現(xiàn)矩陣相減voidprint();//輸出矩陣中各元素};4.5重載單目運(yùn)算符matrix::matrix(shortrows,shortcols){ matrix::rows=rows; matrix::cols=cols; elems=newdouble[rows*cols];//為矩陣動(dòng)態(tài)分配內(nèi)存}inlinematrix::~matrix(){deleteelems;//釋放矩陣所占內(nèi)存}4.5重載單目運(yùn)算符doublematrix::operator()(shortrow,shortcol){ return(row>=1&&row<=rows&&col>=1&&col<=cols)?elems[(row-1)*cols+(col-1)]:0.0;}//elems中所存放的矩陣元素是按行順序存放,若給出矩陣下標(biāo)還需進(jìn)行換算后,再去elems中尋找,所以重載“()”使給出行、列值就能得到元素值,因?yàn)閑lems為數(shù)組,所以定義時(shí)不能重載“[]”,只能重載“()”,否則會(huì)產(chǎn)生二義性。voidmatrix::setelem(shortrow,shortcol,doubleval){if(row>=1&&row<=rows&&col>=1&&col<=cols)elems[(row-1)*cols+(col-1)]=val;}4.5重載單目運(yùn)算符matrixoperator+(matrixp,matrixq){ matrixm(p.rows,p.cols); if(p.rows!=q.rows||p.cols!=q.cols) returnm; for(intr=1;r<=p.rows;r++) for(intc=1;c<=p.cols;c++) m.setelem(r,c,p(r,c)+q(r,c)); returnm;}4.5重載單目運(yùn)算符matrixoperator-(matrixp,matrixq){ matrixm(p.rows,p.cols); if(p.rows!=q.rows||p.cols!=q.cols) returnm; for(intr=1;r<=p.rows;r++) for(intc=1;c<=p.cols;c++) m.setelem(r,c,p(r,c)-q(r,c)); returnm;}4.5重載單目運(yùn)算符voidmatrix::print(){ for(intr=1;r<=this->rows;++r) { for(intc=1;c<=this->cols;c++) cout<<(*this)(r,c)<<""; cout<<"\n"; }}4.5重載單目運(yùn)算符main(){ matrixa(2,3),b(2,3),d(2,3); a.setelem(1,1,1.0); a.setelem(1,2,3.0); a.setelem(1,3,3.0); a.setelem(2,1,4.0); a.setelem(2,2,5.0); a.setelem(2,3,6.0);b.setelem(1,1,1.0);b.setelem(1,2,2.0);b.setelem(1,3,3.0);b.setelem(2,1,4.0);b.setelem(2,2,5.0);b.setelem(2,3,6.0);4.5重載單目運(yùn)算符a.print; b.print; d=a+b; d.print(); d=a-b; d.print();}4.6重載流插入運(yùn)算符和流提取運(yùn)算符cout<<和cin>>能對(duì)標(biāo)準(zhǔn)類型數(shù)據(jù)進(jìn)行輸入輸出,用戶自己定義的類型不行,需要重載。對(duì)"<<"和">>"重載的函數(shù)形式如下:istream&operator>>(istream&,自定義類&);ostream&operator<<(ostream&,自定義類&);重載運(yùn)算符">>"的函數(shù)的第一個(gè)參數(shù)和函數(shù)的類型都必須是istream&類型(即istream類對(duì)象的引用),第2個(gè)參數(shù)是要進(jìn)行輸入操作的類。重載"<<"的函數(shù)的第一個(gè)參數(shù)和函數(shù)的類型都必須是ostream&類型,函數(shù)第2個(gè)參數(shù)是要進(jìn)行輸入輸出操作的類。因此,只能將重載">>"和"<<"的函數(shù)作為友元函數(shù),而不能將它們定義為成員函數(shù)。4.6.1重載流插入運(yùn)算符“<<”例在例4.2的基礎(chǔ)上,用重載的運(yùn)算符"<<"輸出復(fù)數(shù)。#include<iostream>usingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);friendostream&operator<<(ostream&,Complex&);private:doublereal;doubleimag;};4.6.1重載流插入運(yùn)算符“<<”ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator<<(ostream&output,Complex&c){output<<"("<<c.real<<","<<c.imag<<"i)"<<endl;returnoutpt;}intmain(){Complexc1(2,4),c2(6,10),c3;c3=c1+c2;cout<<c3;return0;}4.6.1重載流插入運(yùn)算符“<<”分析:cout<<c3;運(yùn)算符"<<"的左面cout是頭文件iostream中聲明的ostream類對(duì)象,右面是c3,它是Complex類對(duì)象。由于已將運(yùn)算符<<的重載函數(shù)聲明為Complex類的友元函數(shù),編譯系統(tǒng)把cout<<c3解釋為operator<<(cout,c3)即以cout和c3作為實(shí)參,調(diào)用下面的“operator<<”函數(shù):ostream&operator<<(ostream&output,Complex&c){output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;returnoutput;}4.6.1重載流插入運(yùn)算符“<<”調(diào)用函數(shù)的過程相當(dāng)于執(zhí)行:cout<<"("<<c3.real<<"+"<<c3.imag<<"i)"<<endl;returncout;returnoutput的作用是能連續(xù)向輸出流插入信息。returnoutput就是returncout,將輸出流cout的現(xiàn)狀返回,即保留輸出流的現(xiàn)狀。即執(zhí)行cout<<c3返回值是cout的當(dāng)前值。如果有以下輸出cout<<c3<<c2;先處理cout<<c3,即(cout<<c3)<<c2;而執(zhí)行(cout<<c3)得到的結(jié)果是具有新內(nèi)容的cout,因此,(cout<<c3)<<c2相當(dāng)于cout(新值)<<c2。4.6.1重載流插入運(yùn)算符“<<”運(yùn)算符"<<"左側(cè)是ostream類對(duì)象cout,右側(cè)是Complex對(duì)象c2,再次調(diào)用運(yùn)算符"<<"重載函數(shù),接著向輸出流插入c2的數(shù)據(jù)?,F(xiàn)在可以理解了為什么C++規(guī)定運(yùn)算符"<<"重載函數(shù)的第一個(gè)參數(shù)和函數(shù)的類型都必須是ostream類型的引用,就是為了返回cout的當(dāng)前值以便連續(xù)輸出。注意區(qū)分"<<"是重載的還是標(biāo)準(zhǔn)的。如cout<<c3<<5<<endl;4.6.2重載流提取運(yùn)算符“>>”重載流提取運(yùn)算符的目的是希望將">>"用于輸入自定義類型的對(duì)象的信息。在例4.7的基礎(chǔ)上,增加重載流提取運(yùn)算符">>",用"cin>>"輸入復(fù)數(shù),用"cout<<"輸出復(fù)數(shù)。#include<iostream>usingnamespacestd;classComplex{public:friendostream&operator<<(ostream&,Complex&);friendistream&operator>>(istream&,Complex&);private:doublereal;doubleimag;};4.6.2重載流提取運(yùn)算符“>>”ostream&operator<<(ostream&output,Complex&c){output<<"("<<c.real<<","<<c.imag<<"i)"<<endl;returnoutpt;}istream&operator>>(istream&input,Complex&c){cout<<"inputrealpartandimaginarypartofcomplexnumber:";input>>c.real>>c.image;returninput;}intmain(){Complexc1,c2;cin>>c1>>c2;cout<<"c1="<<c1<<endl;cout<<"c2="<<c2<<endl;return0;}4.6.2重載流提取運(yùn)算符“>>”分析:運(yùn)算符">>"重載函數(shù)中的形參input是istream類的對(duì)象的引用,在執(zhí)行cin>>c1時(shí),調(diào)用"operator>>"函數(shù),將cin地址傳給input,input是cin的引用,同樣c是c1的引用。因此,"input>>c.real>>c.image;"相當(dāng)于"cin>>c1.real>>c1.image;"。函數(shù)返回cin的新值。用cin和">>"可以連續(xù)從輸入流提取數(shù)據(jù)給程序中的Complex類對(duì)象,或者說,用cin和">>"可以連續(xù)向程序輸入Complex類對(duì)象的值。cin>>c1>>c2;,每遇到一次">>"就調(diào)用一次重載運(yùn)算符">>"的函數(shù)。4.7有關(guān)運(yùn)算符重載的歸納(1)有了運(yùn)算符重載,在聲明了類之后,人們就可把用于標(biāo)準(zhǔn)類型的運(yùn)算符用于自己聲明的類。(2)使用運(yùn)算符重載的具體做法是:I.先確定要重載的是哪一個(gè)運(yùn)算符,想把它用于哪一個(gè)類,重載運(yùn)算符只能把一個(gè)運(yùn)算符用于一個(gè)類。II.設(shè)計(jì)運(yùn)算符重載函數(shù)和有關(guān)的類。III.一般是有人編好一批運(yùn)算符重載函數(shù),集中放在一個(gè)頭文件,放在指定的目錄中,提供給有關(guān)的人使用。IV.使用者需要了解該頭文件有哪些運(yùn)算符重載,適用于什么類,函數(shù)原型。V.沒有現(xiàn)成的重載運(yùn)算符可用,自己設(shè)計(jì)。(3)注意在運(yùn)算符重載中使用引用的重要性。(4)C++大多數(shù)運(yùn)算符都可以重載。4.8不同類型數(shù)據(jù)間的轉(zhuǎn)換類型轉(zhuǎn)換就是將一種類型轉(zhuǎn)換為另一種類型的值。在C++中,類被看作是用戶自定義的抽象數(shù)據(jù)類型,可像一般的類型那樣進(jìn)行類型轉(zhuǎn)換。類型轉(zhuǎn)換有兩種形式,一種是標(biāo)準(zhǔn)類型轉(zhuǎn)換,它是隱式類型轉(zhuǎn)換。另一種是顯式類型轉(zhuǎn)換,它包括強(qiáng)制法和函數(shù)法兩種。4.8.1標(biāo)準(zhǔn)類型數(shù)據(jù)間的轉(zhuǎn)換一般數(shù)據(jù)類型間的轉(zhuǎn)換
1.標(biāo)準(zhǔn)類型轉(zhuǎn)換因?yàn)樗请[式的,在書寫時(shí)沒有什么痕跡,要記住它的轉(zhuǎn)換規(guī)則: (1)當(dāng)char或short類型對(duì)象與int類型對(duì)象進(jìn)行運(yùn)算時(shí),將char
或short轉(zhuǎn)換為int類型。 (2)當(dāng)兩個(gè)操作數(shù)對(duì)象類型不一致時(shí),在算術(shù)運(yùn)算前,級(jí)別底的自動(dòng)轉(zhuǎn)換為級(jí)別高的類型。 (3)在賦值表達(dá)式E1=E2的情況下,賦值運(yùn)算符右端的結(jié)果值需轉(zhuǎn)換為E1類型后進(jìn)行賦值。4.8.1標(biāo)準(zhǔn)類型數(shù)據(jù)間的轉(zhuǎn)換2.顯式類型轉(zhuǎn)換(1)強(qiáng)制轉(zhuǎn)換法
(類型名)表達(dá)式例如:
inti,j;cout<<(float)(i+j);(2)函數(shù)法類型名(表達(dá)式)
例如:
inti,j;cout<<float(i+j);此時(shí)i+j作為float的參數(shù)
4.8.1標(biāo)準(zhǔn)類型數(shù)據(jù)間的轉(zhuǎn)換以前我們接觸的是標(biāo)準(zhǔn)類型之間的轉(zhuǎn)換,現(xiàn)在用戶自己定義了類,一個(gè)自定義類的對(duì)象能否轉(zhuǎn)換成標(biāo)準(zhǔn)類型?一個(gè)類的對(duì)象能否轉(zhuǎn)換成另外一個(gè)類的對(duì)象?對(duì)于標(biāo)準(zhǔn)類型的轉(zhuǎn)換,編譯系統(tǒng)知道怎樣進(jìn)行。而對(duì)于用戶自己聲明的類型,編譯系統(tǒng)不知道怎樣進(jìn)行轉(zhuǎn)換,需要定義專門的函數(shù)來處理。4.8.2轉(zhuǎn)換構(gòu)造函數(shù)轉(zhuǎn)換構(gòu)造函數(shù)的作用是將一個(gè)其他類型的數(shù)據(jù)轉(zhuǎn)換成一個(gè)類的對(duì)象。先回顧一下以前學(xué)習(xí)過的構(gòu)造函數(shù):I.默認(rèn)構(gòu)造函數(shù):Complex();II.用于初始化的構(gòu)造函數(shù):Complex(doubler,doublei);III.用于復(fù)制對(duì)象的復(fù)制構(gòu)造函數(shù)。Complex(Complex&c);轉(zhuǎn)換構(gòu)造函數(shù)只有一個(gè)參數(shù),如:Complex(doubler){real=r;imag=0;}其作用是將double型的參數(shù)r轉(zhuǎn)換成Complex類的對(duì)象,將r作為復(fù)數(shù)的實(shí)部,虛部為轉(zhuǎn)換構(gòu)造函數(shù)在類體中,以上幾種構(gòu)造函數(shù)可以同時(shí)出現(xiàn)在同一個(gè)類中,它們是構(gòu)造函數(shù)的重載,編譯系統(tǒng)會(huì)根據(jù)建立對(duì)象時(shí)給出的實(shí)參的個(gè)數(shù)與類型選擇形參與之匹配的構(gòu)造函數(shù)。假如在Complex類中定義了上面的轉(zhuǎn)換構(gòu)造函數(shù),在Complex類的作用域中有以下定義:Complexc1(3.5);//建立對(duì)象c1,調(diào)用轉(zhuǎn)換構(gòu)造函數(shù)如果已對(duì)運(yùn)算符"+"進(jìn)行了重載,使之能進(jìn)行兩個(gè)Complex類對(duì)象的相加,若在程序中有以下表達(dá)式:c=c1+2.5;編譯出錯(cuò),因?yàn)椴荒苡眠\(yùn)算符"+"將一個(gè)Complex類對(duì)象和一個(gè)浮點(diǎn)數(shù)相加??梢韵葘?.5轉(zhuǎn)換為Complex類無名對(duì)象,然后相加c=c1+Complex(2.5);//合法4.8.2轉(zhuǎn)換構(gòu)造函數(shù)對(duì)比Complex(2.5)和int(2.5)。int(2.5)是強(qiáng)制類型轉(zhuǎn)換,將2.5轉(zhuǎn)換為整數(shù),Complex(2.5)也是強(qiáng)制類型轉(zhuǎn)換,將2.5轉(zhuǎn)換為Complex對(duì)象。轉(zhuǎn)換構(gòu)造函數(shù)只能有一個(gè)參數(shù)。如果有多個(gè)參數(shù),就不是轉(zhuǎn)換構(gòu)造函數(shù)。歸納起來,使用轉(zhuǎn)換構(gòu)造函數(shù)將一個(gè)指定的數(shù)據(jù)轉(zhuǎn)換為類對(duì)象的方法如下:(1)先聲明一個(gè)類(2)在這個(gè)類中定義一個(gè)只有一個(gè)參數(shù)的構(gòu)造函數(shù),參數(shù)的類型是需要轉(zhuǎn)換的類型,在函數(shù)體中指定轉(zhuǎn)換的方法。(3)在該類的作用域內(nèi)可以用以下形式進(jìn)行類型轉(zhuǎn)換:類名(指定類型的數(shù)據(jù))就可以將指定類型的數(shù)據(jù)轉(zhuǎn)換為此類的對(duì)象。4.8.2轉(zhuǎn)換構(gòu)造函數(shù)不僅可以將一個(gè)標(biāo)準(zhǔn)類型數(shù)據(jù)轉(zhuǎn)換成類對(duì)象,也可以將另一個(gè)類的對(duì)象轉(zhuǎn)換成轉(zhuǎn)換構(gòu)造函數(shù)所在的類對(duì)象。例如可以將一個(gè)學(xué)生類對(duì)象轉(zhuǎn)換為教師類對(duì)象,要求把某學(xué)生的編號(hào)、姓名、性別復(fù)制到一個(gè)教師類對(duì)象中,可以在Teacher類中寫成下面的轉(zhuǎn)換構(gòu)造函數(shù):Teacher(Student&s){num=s.num;strcpy(name,);sex=s.sex;}注意:對(duì)象s中的num,name,sex必須是公用成員,否則不能被類外引用。4.8.3類型轉(zhuǎn)換函數(shù)類型轉(zhuǎn)換函數(shù)的作用是將一個(gè)類的對(duì)象轉(zhuǎn)換成另一類型的數(shù)據(jù)。如果已聲明了一個(gè)Complex類,可以在Complex類中這樣定義類型轉(zhuǎn)換函數(shù):operatordouble(){returnreal;}函數(shù)返回double型變量的real的值。它的作用是將一個(gè)Complex類對(duì)象轉(zhuǎn)換為一個(gè)double型數(shù)據(jù),其值是Complex類中的數(shù)據(jù)成員real的值。注意:函數(shù)名是operatordouble。這點(diǎn)和運(yùn)算符重載時(shí)的規(guī)律一致的。4.8.3類型轉(zhuǎn)換函數(shù)類型轉(zhuǎn)換函數(shù)的一般形式為operator類型名(){實(shí)現(xiàn)轉(zhuǎn)換的語句}在函數(shù)名前面不能指定函數(shù)類型,函數(shù)沒有參數(shù)。其返回值的類型是由函數(shù)名中指定的類型名來確定的(如operatordouble,返回值的類型是double)。類型轉(zhuǎn)換函數(shù)只能作為成員函數(shù),因?yàn)檗D(zhuǎn)換的主體是本類的對(duì)象。不能作為友元函數(shù)或普通函數(shù)。4.8.3類型轉(zhuǎn)換函數(shù)從函數(shù)形式可以看到,它與運(yùn)算符重載函數(shù)相似,都是用operator開頭,只是被重載的是類型名。double類型經(jīng)過重載后,除了原有的含義外,還獲得新的含義(將一個(gè)Complex類對(duì)象轉(zhuǎn)換為double類型數(shù)據(jù),并指定了轉(zhuǎn)換方法)。程序中的Complex對(duì)象既是Complex類對(duì)象,又可作為double類型數(shù)據(jù),根據(jù)上下文來決定。轉(zhuǎn)換構(gòu)造函數(shù)和類型轉(zhuǎn)換運(yùn)算符有一個(gè)共同的功能:當(dāng)需要的時(shí)候,編譯系統(tǒng)會(huì)自動(dòng)調(diào)用這些函數(shù),建立一個(gè)無名的臨時(shí)對(duì)象。例如,若已經(jīng)定義d1,d2為double型變量,c1,c2為Complex類對(duì)象,如類中已定義了類型轉(zhuǎn)換函數(shù),若在程序中有以下表達(dá)式:d1=d2+c14.8.3類型轉(zhuǎn)換函數(shù)編譯系統(tǒng)發(fā)現(xiàn)"+"的左側(cè)d2是double型,而c1是Complex類對(duì)象,如果沒有對(duì)運(yùn)算符"+"進(jìn)行重載,就會(huì)檢查有無類型轉(zhuǎn)換函數(shù),發(fā)現(xiàn)有對(duì)double的重載函數(shù),就調(diào)用該函數(shù),把Complex類對(duì)象c1轉(zhuǎn)換為double型數(shù)據(jù)。如果類中已定義了轉(zhuǎn)換構(gòu)造函數(shù)并且又重載了運(yùn)算符"+"(作為Complex類的友元函數(shù)),但未對(duì)double定義類型轉(zhuǎn)換函數(shù)(或者說未對(duì)double重載),若有以下表達(dá)式c2=c1+d2編譯系統(tǒng)發(fā)現(xiàn)運(yùn)算符"+"左側(cè)c1是Complex類對(duì)象,右側(cè)d2是double型。尋找有無對(duì)"+"的重載,發(fā)現(xiàn)有operator+函數(shù),但它是Complex類的友元函數(shù),要求兩個(gè)Complex類的形參,而d2是double,類中沒有對(duì)double進(jìn)行重載,因此不能把c1轉(zhuǎn)換為double。4.8.3類型轉(zhuǎn)換函數(shù)編譯系統(tǒng)就去找有無轉(zhuǎn)換構(gòu)造函數(shù),發(fā)現(xiàn)有,就調(diào)用轉(zhuǎn)換構(gòu)造函數(shù)Complex(d2),建立一個(gè)臨時(shí)的Complex類對(duì)象,再調(diào)用operator+函數(shù),將兩個(gè)復(fù)數(shù)相加,相當(dāng)于c2=c1+Complex(d2);例:將一個(gè)double數(shù)據(jù)與Complex類數(shù)據(jù)相加。#include<iostream>usingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}operatordouble(){returnreal;}private:doublereal,imag;};4.8.3類型轉(zhuǎn)換函數(shù)intmain(){Complexc1(3,4),c2(5,-10),c3;doubled;d=2.5+c1;//要求將一個(gè)double數(shù)據(jù)與Complex類數(shù)據(jù)相加cout<<d<<endl;return0;}程序分析:(1)如果在Complex類中沒有定義轉(zhuǎn)換函數(shù)operatordouble,程序編譯將出錯(cuò)。因?yàn)椴荒軐?shí)現(xiàn)double型數(shù)據(jù)與Complex類對(duì)象的相加。4.8.3類型轉(zhuǎn)換函數(shù)(2)如果在main函數(shù)中加一個(gè)語句:c3=c2;由于賦值號(hào)兩邊都是同一類的數(shù)據(jù),可以合法賦值,沒有必要轉(zhuǎn)換(3)如果在Complex類聲明了重載運(yùn)算符"+"函數(shù)作為友元函數(shù):Complexoperator+(Complexc1,Complexc2)//定義運(yùn)算符"+"重載函數(shù){returnComplex(c1.real+c2.real,c1.imag+c2.imag);}若在main函數(shù)中有語句:c3=c1+c2;則將c1和c2按Complex類對(duì)象處理,相加后賦值給c類型轉(zhuǎn)換函數(shù)如果改為d=c1+c2;將c1與c2兩個(gè)類對(duì)象相加,得到一個(gè)Complex類對(duì)象,再轉(zhuǎn)換為double數(shù)據(jù),然后賦給d。用類型轉(zhuǎn)換的好處是:假如程序中需要對(duì)一個(gè)Complex類對(duì)象和一個(gè)double型變量進(jìn)行"+","-","*","/"以及關(guān)系和邏輯運(yùn)算,如果不用類型轉(zhuǎn)換函數(shù),就要對(duì)多種運(yùn)算符進(jìn)行重載,以便能進(jìn)行各種運(yùn)算,比較麻煩。如果用類型轉(zhuǎn)換對(duì)double進(jìn)行重載,就不必對(duì)各種運(yùn)算符進(jìn)行重載,因?yàn)镃omplex類對(duì)象可以被自動(dòng)地轉(zhuǎn)換為double型數(shù)據(jù)。4.8.3類型轉(zhuǎn)換函數(shù)例:包含轉(zhuǎn)換構(gòu)造函數(shù)、運(yùn)算符重載函數(shù)。#include<iostream>usingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}//默認(rèn)構(gòu)造函數(shù),無形參Complex(doubler){real=r,imag=0;}//轉(zhuǎn)換構(gòu)造函數(shù),一個(gè)形參Complex(doubler,doublei){real=r;imag=i;}friendComplexoperator+(Complexc1,Complexc2);//重載運(yùn)算符"+"的友元函數(shù)voiddisplay();private:doublereal,imag;};4.8.3類
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- .7市場(chǎng)部培訓(xùn)紫琪爾項(xiàng)目
- 2025年全球及中國(guó)無人機(jī)測(cè)量軟件行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)珍珠奶茶配料行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)電信行業(yè)CRM軟件行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)便攜式四合一氣體檢測(cè)儀行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)塑料輔助設(shè)備行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球機(jī)器人滾珠絲杠行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)一次性發(fā)熱暖袋行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)金屬箔電流傳感貼片電阻行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球貓咪吹風(fēng)機(jī)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024-2025學(xué)年廣東省深圳市南山區(qū)監(jiān)測(cè)數(shù)學(xué)三年級(jí)第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 廣東2024年廣東金融學(xué)院招聘專職輔導(dǎo)員9人筆試歷年典型考點(diǎn)(頻考版試卷)附帶答案詳解
- DB31∕731-2020 船舶修正總噸單位產(chǎn)品能源消耗限額
- 2024年衛(wèi)生專業(yè)技術(shù)資格考試衛(wèi)生檢驗(yàn)技術(shù)(初級(jí)(師)211)相關(guān)專業(yè)知識(shí)試題及答案指導(dǎo)
- 《手衛(wèi)生知識(shí)培訓(xùn)》培訓(xùn)課件
- 江蘇省南京鼓樓區(qū)2024年中考聯(lián)考英語試題含答案
- 兒科護(hù)理學(xué)試題及答案解析-神經(jīng)系統(tǒng)疾病患兒的護(hù)理(二)
- 15篇文章包含英語四級(jí)所有詞匯
- 人教版高中英語必修一單詞表(默寫版)
- 格式塔心理學(xué)與文藝心理學(xué)
- (汽車制造論文)機(jī)器人在汽車制造中應(yīng)用
評(píng)論
0/150
提交評(píng)論