




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據(jù)結構運算符重載第1頁,共75頁,2023年,2月20日,星期六10.1什么是運算符重載C++中預定義的運算符的操作對象只能是基本數(shù)據(jù)類型。但實際上,對于許多用戶自定義的類型,也需要類似的運算。這時就必須重新定義這些運算符,賦于已有運算符新的功能,使之能夠用于特定類型執(zhí)行特定操作。第2頁,共75頁,2023年,2月20日,星期六實際上,很多C++操作符已經(jīng)被重載。例如,將*操作符用于地址,將得到在這個地址中的值;但將它用于兩個數(shù)字時,得到的將是它們的乘積。C++根據(jù)操作數(shù)的數(shù)目和類型來決定采用哪種操作。第3頁,共75頁,2023年,2月20日,星期六使同一個運算符作用于不同類型的數(shù)據(jù)時導致不同的行為的這種機制稱為運算符重載。C++通過重載運算符使之用于自定義類型,擴展了運算符的功能,這也是C++最具吸引力的優(yōu)點之一。第4頁,共75頁,2023年,2月20日,星期六運算符重載機制運算符重載是通過重載一種特殊函數(shù)—運算符函數(shù)來實現(xiàn)的。對C++運算符可作如下理解:編譯器在對運算符進行編譯處理時,將一個運算符編譯成如下形式:一元運算符:@obj→operator@(obj)二元運算符:obj1@obj2→operator@(obj1,obj2)由于C++中有前增(減)、后增(減),為了區(qū)分它們,C++將后增(減)編譯成:后增:obj++→operator++(obj,0)后減:obj--→operator--(obj,0)第5頁,共75頁,2023年,2月20日,星期六依照上述規(guī)則,8+9、10.5+3.5分別編譯成運算符函數(shù)調(diào)用形式為:operator+(8,9);operator+(10.5,3.5);C++為+運算符提供了多種運算符函數(shù),其原型有:operator+(int,int);operator+(double,double);等第6頁,共75頁,2023年,2月20日,星期六10.2運算符重載的方法運算符重載的方法是定義一個重載運算符的函數(shù),在需要執(zhí)行被重載的運算符時,系統(tǒng)就自動調(diào)用該函數(shù),以實現(xiàn)相應的運算。也就是說,運算符重載是通過定義函數(shù)實現(xiàn)的。運算符重載實質(zhì)上是函數(shù)的重載。第7頁,共75頁,2023年,2月20日,星期六重載運算符的函數(shù)一般格式如下:函數(shù)類型operator運算符名稱(形參表列){對運算符的重載處理}第8頁,共75頁,2023年,2月20日,星期六#include<iostream>usingnamespacestd;classComplex{doublereal;doubleimag;public:Complex(){real=0;imag=0;}Complex(doubler,doublei):real(r),imag(i){}
friendComplexoperator+(Complex&c1,Complex&c2);voiddisplay();};第9頁,共75頁,2023年,2月20日,星期六Complexoperator+(Complex&c1,Complex&c2){Complexc;c.real=c1.real+c2.real;c.imag=c1.imag+c2.imag;returnc;}voidComplex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}第10頁,共75頁,2023年,2月20日,星期六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;}第11頁,共75頁,2023年,2月20日,星期六10.3重載運算符的規(guī)則⑴C++不允許用戶自己定義新的運算符,只能對已有的C++運算符進行重載。⑵C++允許重載的運算符C++中絕大部分的運算符允許重載。具體規(guī)定見書中表10.1。不能重載的運算符只有5個:.(成員訪問運算符).*(成員指針訪問運算符)∷(域運算符)sizeof(長度運算符)?:(條件運算符)前兩個運算符不能重載是為了保證訪問成員的功能不能被改變,域運算符和sizeof運算符的運算對象是類型而不是變量或一般表達式,不具重載的特征。第12頁,共75頁,2023年,2月20日,星期六⑶重載不能改變運算符運算對象(即操作數(shù))的個數(shù)。⑷重載不能改變運算符的優(yōu)先級別。⑸重載不能改變運算符的結合性。⑹重載運算符的函數(shù)不能有默認的參數(shù),否則就改變了運算符參數(shù)的個數(shù),與前面第(3)點矛盾。第13頁,共75頁,2023年,2月20日,星期六⑺重載的運算符必須和用戶定義的自定義類型的對象一起使用,其參數(shù)至少應有一個是類對象(或類對象的引用)。也就是說,參數(shù)不能全部是C++的標準類型,以防止用戶修改用于標準類型數(shù)據(jù)的運算符的性質(zhì)。第14頁,共75頁,2023年,2月20日,星期六⑻用于類對象的運算符一般必須重載,但有兩個例外,運算符“=”和“&”不必用戶重載。①賦值運算符(=)可以用于每一個類對象,可以利用它在同類對象之間相互賦值。②地址運算符&也不必重載,它能返回類對象在內(nèi)存中的起始地址。⑼應當使重載運算符的功能類似于該運算符作用于標準類型數(shù)據(jù)時所實現(xiàn)的功能。第15頁,共75頁,2023年,2月20日,星期六⑽運算符重載并不能自動實現(xiàn),必須編寫運算符重載函數(shù)才能實現(xiàn)。有時這此函數(shù)最好作為成員函數(shù)出現(xiàn);有時它們最好是友元函數(shù);偶爾它們可以作為全局、非友元函數(shù)出現(xiàn)。第16頁,共75頁,2023年,2月20日,星期六10.4運算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)在上節(jié)中采用友元的形式重載了復數(shù)+的運算符,其聲明如下:friendComplexoperator+(Complex&c1,Complex&c2);現(xiàn)將之改為成員函數(shù)的形式。第17頁,共75頁,2023年,2月20日,星期六classComplex{private:doublereal;doubleimag;public:Complex(){real=0;imag=0;}Complex(doubler,doublei):real(r),imag(i){}
Complexoperator+(Complex&c2);voiddisplay();};第18頁,共75頁,2023年,2月20日,星期六ComplexComplex::operator+(Complex&c2){Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}第19頁,共75頁,2023年,2月20日,星期六“+”是雙目運算符,為什么程序中的重載函數(shù)中只有一個參數(shù)呢?實際上,運算符重載函數(shù)有兩個參數(shù),由于重載函數(shù)是Complex類中的成員函數(shù),有一個參數(shù)是隱含的,這個隱含的參數(shù)就是this指針。在重載運算符為成員函數(shù)時,其第一個參數(shù)隱含地為左操作數(shù)對象。Complexc1(3,4),c2(5,-10),c3;c3=c1+c2;實際上執(zhí)行的是c1.operator+(this,c2)第20頁,共75頁,2023年,2月20日,星期六下面這些Complex成員函數(shù)聲明正確嗎?Complexoperator+(Complexc1,Complexc2);Complexoperator-(inta);如要能進行如下運算,重載的操作符可以定義為成員函數(shù)嗎?2+a;//a為復數(shù)對象第21頁,共75頁,2023年,2月20日,星期六如果左操作數(shù)必須是一個不同類的對象或者是一個基本類型對象,那么該運算符函數(shù)必須作為全局函數(shù)來實現(xiàn)。如果要重載()、[]、->、=運算符,運算符重載函數(shù)必須為類的成員函數(shù)。為什么?第22頁,共75頁,2023年,2月20日,星期六10.5重載雙目運算符雙目運算符(或稱二元運算符)是C++中最常用的運算符。雙目運算符有兩個操作數(shù),通常在運算符的左右兩側,如3+5,a=b,i<10等。在重載雙目運算符時,不言而喻在函數(shù)中應該有兩個參數(shù)。下面再舉一個例子說明重載雙目運算符的應用。第23頁,共75頁,2023年,2月20日,星期六例定義一個字符串類String,用來存放不定長的字符串,重載運算符“==”,“<”和“>”,用于兩個字符串的等于、小于和大于的比較運算。下面分幾步來介紹編程過程。第24頁,共75頁,2023年,2月20日,星期六⑴先建立一個String類#include<iostream>usingnamespacestd;classString{public:String(){p=NULL;//默認構造函數(shù)}String(char*str);//構造函數(shù)voiddisplay();private:char*p;//字符型指針,用于指向字符串};第25頁,共75頁,2023年,2月20日,星期六String::String(char*str)//定義構造函數(shù){p=str;//使p指向?qū)崊⒆址畗voidString::display()//輸出p所指向的字符串{cout<<p;}第26頁,共75頁,2023年,2月20日,星期六intmain(){Stringstring1("Hello"),string2("Book");string1.display();cout<<endl;string2.display();return0;}第27頁,共75頁,2023年,2月20日,星期六(2)增加對運算符重載的部分。先重載一個運算符“>”。#include<iostream>#include<cstring>usingnamespacestd;classString{public:String(){p=NULL;//默認構造函數(shù)}String(char*str);//構造函數(shù)voiddisplay();
friendbooloperator>(String&string1,String&string2);private:char*p;//字符型指針,用于指向字符串};第28頁,共75頁,2023年,2月20日,星期六String::String(char*str)//定義構造函數(shù){p=str;//使p指向?qū)崊⒆址畗voidString::display()//輸出p所指向的字符串{cout<<p;}booloperator>(String&string1,String&string2){if(strcmp(string1.p,string2.p)>0)returntrue;elsereturnfalse;}第29頁,共75頁,2023年,2月20日,星期六intmain(){Stringstring1("Hello"),string2("Book");cout<<(string1>string2)<<endl;}程序運行結果為1。其他兩個運算符的重載如法炮制即可。第30頁,共75頁,2023年,2月20日,星期六⑶擴展到對3個運算符重載。見教材P325通過這個例子,不僅可以學習到有關雙目運算符重載的知識,而且還可以學習怎樣去編寫C++程序。這種方法的指導思想是:先搭框架,逐步擴充,由簡到繁,最后完善。邊編程,邊調(diào)試,邊擴充。千萬不要企圖在一開始時就解決所有的細節(jié)。類是可擴充的,可以一步一步地擴充它的功能。最好直接在計算機上寫程序,每一步都要上機調(diào)試,調(diào)試通過了前面一步再做下一步,步步為營。第31頁,共75頁,2023年,2月20日,星期六10.6重載單目運算符單目運算符只有一個操作數(shù),如!a,-b,&c,*p,還有最常用的++i和--i等。重載單目運算符的方法與重載雙目運算符的方法是類似的。但由于單目運算符只有一個操作數(shù),因此運算符重載函數(shù)只有一個參數(shù)。單目運算符一般重載為成員函數(shù)。第32頁,共75頁,2023年,2月20日,星期六例有一個Time類,包含數(shù)據(jù)成員minute(分)和sec(秒),模擬秒表,每次走一秒,滿60秒進一分鐘,此時秒又從0開始算。要求輸出分和秒的值。第33頁,共75頁,2023年,2月20日,星期六#include<iostream>usingnamespacestd;classTime{public:Time(){minute=0;//默認構造函數(shù)sec=0;}Time(intm,ints):minute(m),sec(s){}//構造函數(shù)重載
Timeoperator++();//聲明運算符重載函數(shù)voiddisplay(){cout<<minute<<":"<<sec<<endl;//定義輸出時間函數(shù)}private:intminute;intsec;};第34頁,共75頁,2023年,2月20日,星期六TimeTime::operator++()//定義運算符重載函數(shù){if(++sec>=60){sec-=60;//滿60秒進1分鐘++minute;}return*this;//返回當前對象值}第35頁,共75頁,2023年,2月20日,星期六intmain(){Timetime1(34,0);for(inti=0;i<61;i++){++time1;time1.display();}return0;}第36頁,共75頁,2023年,2月20日,星期六“++”和“--”運算符有兩種使用方式,前置自增運算符和后置自增運算符,它們的作用是不一樣的,在重載時怎樣區(qū)別這二者呢?針對“++”和“--”這一特點,C++約定:在自增(自減)運算符重載函數(shù)中,增加一個int型形參,就是后置自增(自減)運算符函數(shù)。第37頁,共75頁,2023年,2月20日,星期六例在上例程序的基礎上增加對后置自增運算符的重載。修改后的程序如下:第38頁,共75頁,2023年,2月20日,星期六classTime{public:Time(){minute=0;//默認構造函數(shù)sec=0;}Time(intm,ints):minute(m),sec(s){}//構造函數(shù)重載Timeoperator++();//聲明前置自增運算符"++"重載函數(shù)
Timeoperator++(int);//聲明后置自增運算符"++"重載函數(shù)voiddisplay(){cout<<minute<<":"<<sec<<endl;//定義輸出時間函數(shù)}private:intminute;intsec;};第39頁,共75頁,2023年,2月20日,星期六TimeTime::operator++(){if(++sec>=60){sec-=60;++minute;}return*this;}第40頁,共75頁,2023年,2月20日,星期六TimeTime::operator++(int){Timetemp(*this);sec++;if(sec>=60){sec-=60;++minute;}returntemp;//返回的是自加前的對象}可以看到:重載后置自增運算符時,多了一個int型的參數(shù),增加這個參數(shù)只是為了與前置自增運算符重載函數(shù)有所區(qū)別,此外沒有任何作用。編譯系統(tǒng)在遇到重載后置自增運算符時,會自動調(diào)用此函數(shù)。第41頁,共75頁,2023年,2月20日,星期六intmain(){Timetime1(34,59),time2;cout<<"time1:";time1.display();++time1;cout<<"++time1:";time1.display();time2=time1++;cout<<"time1++:";time1.display();cout<<"time2:";time2.display();}第42頁,共75頁,2023年,2月20日,星期六10.7重載流插入運算符和流提取運算符C++的流插入運算符“<<”和流提取運算符“>>”是C++在類庫中提供的,所有C++編譯系統(tǒng)都在類庫中提供輸入流類istream和輸出流類ostream。cin和cout分別是istream類和ostream類的對象。在類庫提供的頭文件中已經(jīng)對“<<”和“>>”進行了重載,使之作為流插入運算符和流提取運算符,能用來輸出和輸入C++標準類型的數(shù)據(jù)。因此,凡是用“cout<<”和“cin>>”對標準類型數(shù)據(jù)進行輸入輸出的,都要用#include<iostream>把頭文件包含到本程序文件中。第43頁,共75頁,2023年,2月20日,星期六用戶自己定義類型的數(shù)據(jù),是不能直接用“<<”和“>>”來輸出和輸入的。如果想用它們輸出和輸入自己聲明的類型的數(shù)據(jù),必須對它們重載。對“<<”和“>>”重載的函數(shù)形式如下:istream&operator>>(istream&,自定義類&);ostream&operator<<(ostream&,自定義類&);重載運算符“>>”的函數(shù)的第一個參數(shù)和函數(shù)的類型都必須是istream&類型,第二個參數(shù)是要進行輸入操作的類。重載“<<”的函數(shù)的第一個參數(shù)和函數(shù)的類型都必須是ostream&類型,第二個參數(shù)是要進行輸出操作的類。因此,只能將重載“>>”和“<<”的函數(shù)作為友元函數(shù)或普通的函數(shù),而不能將它們定義為成員函數(shù)。第44頁,共75頁,2023年,2月20日,星期六10.7.1重載流插入運算符“<<”例用重載的“<<”輸出復數(shù)。第45頁,共75頁,2023年,2月20日,星期六classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);
friendostream&operator<<(ostream&,Complex&);private:doublereal;doubleimag;};第46頁,共75頁,2023年,2月20日,星期六ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator<<(ostream&output,Complex&c){output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;returnoutput;}請思考:returnoutput的作用是什么?第47頁,共75頁,2023年,2月20日,星期六intmain(){Complexc1(2,4),c2(6,10),c3;c3=c1+c2;cout<<c3;return0;}第48頁,共75頁,2023年,2月20日,星期六10.7.2重載流提取運算符“>>”C++預定義的運算符“>>”的作用是從一個輸入流中提取數(shù)據(jù),如“cin>>i;”表示從輸入流中提取一個整數(shù)賦給變量i(假設已定義i為int型)。重載流提取運算符的目的是希望將“>>”用于輸入自定義類型的對象的信息。第49頁,共75頁,2023年,2月20日,星期六classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);friendostream&operator<<(ostream&,Complex&);
friendistream&operator>>(istream&,Complex&);private:doublereal;doubleimag;};第50頁,共75頁,2023年,2月20日,星期六ComplexComplex::operator+(Complex&c2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator<<(ostream&output,Complex&c){output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;returnoutput;}第51頁,共75頁,2023年,2月20日,星期六istream&operator>>(istream&input,Complex&c){cout<<"inputrealpart:";input>>c.real;cout<<"inputimaginarypart:";input>>c.imag;returninput;}第52頁,共75頁,2023年,2月20日,星期六intmain(){Complexc1,c2;cin>>c1>>c2;cout<<"c1="<<c1<<endl;cout<<"c2="<<c2<<endl;return0;}第53頁,共75頁,2023年,2月20日,星期六10.8不同類型數(shù)據(jù)間的轉(zhuǎn)換
10.8.1標準類型數(shù)據(jù)間的轉(zhuǎn)換在C++中,某些不同類型數(shù)據(jù)之間可以自動轉(zhuǎn)換,例如inti=6;i=7.5+i;編譯系統(tǒng)對7.5是作為double型數(shù)處理的,在求解表達式時,先將6轉(zhuǎn)換成double型,然后與7.5相加,得到和為13.5,在向整型變量i賦值時,將13.5轉(zhuǎn)換為整數(shù)13,然后賦給i。這種轉(zhuǎn)換是由C++編譯系統(tǒng)自動完成的,用戶不需干預。這種轉(zhuǎn)換稱為隱式類型轉(zhuǎn)換。第54頁,共75頁,2023年,2月20日,星期六C++還提供顯式類型轉(zhuǎn)換,程序人員在程序中指定將一種指定的數(shù)據(jù)轉(zhuǎn)換成另一指定的類型,其形式為類型名(數(shù)據(jù))
如int(89.5)其作用是將89.5轉(zhuǎn)換為整型數(shù)89。對于用戶自己聲明的類型,編譯系統(tǒng)并不知道怎樣進行轉(zhuǎn)換。解決這個問題的關鍵是讓編譯系統(tǒng)知道怎樣去進行這些轉(zhuǎn)換,需要定義專門的函數(shù)來處理。第55頁,共75頁,2023年,2月20日,星期六10.8.2轉(zhuǎn)換構造函數(shù)轉(zhuǎn)換構造函數(shù)的作用是將一個其他類型的數(shù)據(jù)轉(zhuǎn)換成一個類的對象。先回顧一下以前學習過的幾種構造函數(shù):默認構造函數(shù)。以Complex類為例,函數(shù)原型的形式為Complex();//沒有參數(shù)用于初始化的構造函數(shù)。函數(shù)原型的形式為Complex(doubler,doublei);//形參表列中一般有兩個以上參數(shù)用于復制對象的復制構造函數(shù)。函數(shù)原型的形式為Complex(Complex&c);//形參是本類對象的引用第56頁,共75頁,2023年,2月20日,星期六現(xiàn)在又要介紹一種新的構造函數(shù)——轉(zhuǎn)換構造函數(shù)。轉(zhuǎn)換構造函數(shù)只有一個形參,如Complex(doubler){real=r;imag=0;}其作用是將double型的參數(shù)r轉(zhuǎn)換成Complex類的對象,將r作為復數(shù)的實部,虛部為0。用戶可以根據(jù)需要定義轉(zhuǎn)換構造函數(shù),在函數(shù)體中告訴編譯系統(tǒng)怎樣去進行轉(zhuǎn)換。第57頁,共75頁,2023年,2月20日,星期六在類體中,可以有轉(zhuǎn)換構造函數(shù),也可以沒有轉(zhuǎn)換構造函數(shù),視需要而定。以上幾種構造函數(shù)可以同時出現(xiàn)在同一個類中,它們是構造函數(shù)的重載。編譯系統(tǒng)會根據(jù)建立對象時給出的實參的個數(shù)與類型選擇形參與之匹配的構造函數(shù)。第58頁,共75頁,2023年,2月20日,星期六使用轉(zhuǎn)換構造函數(shù)將一個指定的數(shù)據(jù)轉(zhuǎn)換為類對象的方法如下:(1)先聲明一個類。(2)在這個類中定義一個只有一個參數(shù)的構造函數(shù),參數(shù)的類型是需要轉(zhuǎn)換的類型,在函數(shù)體中指定轉(zhuǎn)換的方法。(3)在該類的作用域內(nèi)可以用以下形式進行類型轉(zhuǎn)換:類名(指定類型的數(shù)據(jù))就可以將指定類型的數(shù)據(jù)轉(zhuǎn)換為此類的對象。第59頁,共75頁,2023年,2月20日,星期六classComplex{public:Complex():real(0),imag(0){}Complex(doubler,doublei):real(r),imag(i){}
Complex(doubler):real(r),imag(0){}Complexoperator+(Complexc2);friendostream&operator<<(ostream&,Complex&);private:doublereal;doubleimag;};第60頁,共75頁,2023年,2月20日,星期六ComplexComplex::operator+(Complexc2){returnComplex(real+c2.real,imag+c2.imag);}ostream&operator<<(ostream&output,Complex&c){output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;returnoutput;}第61頁,共75頁,2023年,2月20日,星期六intmain(){Complexc1(3,6),c2;
c2=c1+(Complex)8.2;//c2=c1+Comples(8.2);//c2=c1+8;//c2=8+c1;×cout<<c2<<endl;return0;}第62頁,共75頁,2023年,2月20日,星期六classComplex{public:Complex():real(0),imag(0){}Complex(doubler,doublei):real(r),imag(i){}Complex(doubler):real(r),imag(0){};
friendComplexoperator+(Complexc1,Complexc2);friendostream&operator<<(ostream&,Complex&);private:doublereal;doubleimag;};第63頁,共75頁,2023年,2月20日,星期六Complexoperator+(Complexc1,Complexc2){returnComplex(c1.real+c2.real,c1.imag+c2.imag);}ostream&operator<<(ostream&output,Complex&c){output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;returnoutput;}第64頁,共75頁,2023年,2月20日,星期六intmain(){Complexc1(3,6),c2;c2=8+c1;//okcout<<c2<<endl;return0;}對稱運算符一般重載為友元函數(shù)。第65頁,共75頁,2023年,2月20日,星期六10.8.3類型轉(zhuǎn)換函數(shù)用轉(zhuǎn)換構造函數(shù)可以將一個指定類型的數(shù)據(jù)轉(zhuǎn)換為類的對象。但是不能反過來將一個類的對象轉(zhuǎn)換為一個其他類型的數(shù)據(jù)(例如將一個Complex類對象轉(zhuǎn)換成double類型數(shù)據(jù))。第66頁,共75頁,2023年,2月20日,星期六C++提供類型轉(zhuǎn)換函數(shù)(typeconversionfunction)來解決這個問題。類型轉(zhuǎn)換函數(shù)的作用是將一個類的對象轉(zhuǎn)換成另一類型的數(shù)據(jù)。類型轉(zhuǎn)換函數(shù)的一般形式為operator類型名(){實現(xiàn)轉(zhuǎn)換的語句}在函數(shù)名前面不能指定函數(shù)類型,函數(shù)沒有參數(shù)。其返回值的類型是由函數(shù)名中指定的類型名來確定的。類型轉(zhuǎn)換函數(shù)只能作為成員函數(shù),因為轉(zhuǎn)換的主體是本類的對象。第67頁,共75頁,2023年,2月20日,星期六如果已聲明了一個Complex類,可以在Complex類中這樣定義類型轉(zhuǎn)換函數(shù):operatordouble(){returnreal;}double類型經(jīng)過重載后,除了原有的含義外,還獲得新的含義(將一個Complex類對象轉(zhuǎn)換為double類型數(shù)據(jù),并指定了轉(zhuǎn)換方法)。這樣,編譯系統(tǒng)不僅能識別原有的double型數(shù)據(jù),而且還會把Complex類對象作為double型數(shù)據(jù)處理。第68頁,共75頁,2023年,2月20日,星期六那么程序中的Complex類對具有雙重身份,既是Complex類對象,又可作為double類型數(shù)據(jù)。Complex類對象只有在需要時才進行轉(zhuǎn)換,要根據(jù)表達式的上下文來決定。轉(zhuǎn)換構造函數(shù)和類型轉(zhuǎn)換運算符有一個共同的功能:當需要的時候,編譯系統(tǒng)會自動調(diào)用這些函數(shù),建立一個無名的臨時對象(或臨時變量)。第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年甘肅交通職業(yè)技術學院單招職業(yè)技能測試題庫完美版
- 2025年度學生安全教育與心理健康維護合同
- 2025年度勞動合同解除補償協(xié)議及員工福利待遇保障書
- 2025年度保險公司與國有企業(yè)單位全面合作協(xié)議
- 2025年度房屋租賃合同訂金及配套設施使用協(xié)議
- 2025年度摩托車進出口代理業(yè)務合同
- 2025年度公司股東內(nèi)部關于股權結構優(yōu)化與分配的協(xié)議書
- 2025年度委托招聘合同-行業(yè)領軍人才合作項目
- 2025年度員工向公司借款合同變更通知合同
- 2025年度工程車輛司機勞務派遣合同
- 機械制圖教學課件(全套)
- 熱能與動力工程測試技術- 液位測量
- 化學纖維精品課件
- 中式面點師初級(五級)教學計劃、大綱
- QC成果構造柱澆筑新技術的研發(fā)創(chuàng)新(附圖)
- 2020 ACLS-PC-SA課前自我測試試題及答案
- BIM技術應用管理辦法
- 信息論與編碼第4章信息率失真函數(shù)
- extreme-sports 極限運動 英文 ppt
- 空間幾何向量法之點到平面的距離
- 反激式變壓器計算表格
評論
0/150
提交評論