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

下載本文檔

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

文檔簡(jiǎn)介

第4章 運(yùn)算符重載本章主要內(nèi)容:4.1成員運(yùn)算符重載

4.2友元運(yùn)算符重載

4.3常用運(yùn)算符重載

4.4不同類型轉(zhuǎn)換

4.5典型范例——字符串類設(shè)計(jì)和實(shí)現(xiàn)

計(jì)算機(jī)學(xué)院李衛(wèi)明4.1 成員運(yùn)算符重載int型變量或double型變量可以進(jìn)行+-*/等運(yùn)算,如何讓我們?cè)O(shè)計(jì)的對(duì)象也能參加運(yùn)算呢?下面以復(fù)數(shù)類為例進(jìn)行說明。目前為止,可以很容易設(shè)計(jì)出下面的復(fù)數(shù)類,下面復(fù)數(shù)類可以通過普通成員函數(shù)Add實(shí)現(xiàn)兩個(gè)復(fù)數(shù)的相加,通過友元函數(shù)Sub實(shí)現(xiàn)兩個(gè)復(fù)數(shù)的相減,友元函數(shù)Dump用于實(shí)現(xiàn)復(fù)數(shù)的輸出。同時(shí),作為無需動(dòng)態(tài)分配的簡(jiǎn)單對(duì)象,復(fù)數(shù)對(duì)象可以直接賦值和復(fù)制。計(jì)算機(jī)學(xué)院李衛(wèi)明Ex4.11#include<iostream>2usingnamespacestd;34classComplex5{6public:7Complex(doubler=0,doublei=0):_dReal(r),_dImag(i){}8ComplexAdd(constComplex&rhs)const;//成員函數(shù),復(fù)數(shù)加法

9//友元函數(shù),復(fù)數(shù)減法

10friendComplexSub(constComplex&z1,constComplex&z2);11//友元函數(shù),輸出復(fù)數(shù)

12friendostream&Dump(ostream&os,constComplex&rhs);13private:14double_dReal; //實(shí)部

15double_dImag; //虛部

16};17計(jì)算機(jī)學(xué)院李衛(wèi)明

18//成員函數(shù),復(fù)數(shù)加法

19ComplexComplex::Add(constComplex&rhs)const20{21Complexz(_dReal+rhs._dReal,_dImag+rhs._dImag);22returnz; //返回結(jié)果

23}2425//友元函數(shù),復(fù)數(shù)減法

26ComplexSub(constComplex&z1,constComplex&z2)27{//返回結(jié)果:匿名復(fù)數(shù)對(duì)象

28returnComplex(z1._dReal-z2._dReal,z1._dImag-z2._dImag);29}30

計(jì)算機(jī)學(xué)院李衛(wèi)明31//友元函數(shù),輸出復(fù)數(shù)

32ostream&Dump(ostream&os,constComplex&rhs)33{34if(rhs._dImag<0)//虛部為負(fù)

35os<<rhs._dReal<<rhs._dImag<<"i"<<endl;36else//虛部非負(fù)

37os<<rhs._dReal<<"+"<<rhs._dImag<<"i"<<endl;38returnos;39}40

計(jì)算機(jī)學(xué)院李衛(wèi)明41intmain()42{43Complexz1(2,3),z2(6,-5),z3;//定義復(fù)數(shù)對(duì)象

4445Dump(cout,z1);//輸出

46Dump(cout,z2);47z3=z1.Add(z2);//相"加"48Dump(cout,z3);49z3=Sub(z1,z2);//相"減"50Dump(cout,z3);51}計(jì)算機(jī)學(xué)院李衛(wèi)明樣例中成員函數(shù)Add實(shí)現(xiàn)了2個(gè)復(fù)數(shù)相加,返回的結(jié)果就是2個(gè)復(fù)數(shù)之和z;友元函數(shù)Sub實(shí)現(xiàn)了2個(gè)復(fù)數(shù)相減,返回的結(jié)果是個(gè)匿名復(fù)數(shù)對(duì)象,表示2個(gè)復(fù)數(shù)之差;

友元函數(shù)Dump實(shí)現(xiàn)了復(fù)數(shù)的輸出,輸出過程中,復(fù)數(shù)rhs保持不變,采用常引用方式傳遞,輸出流對(duì)象os輸出后有了新內(nèi)容,采用引用方式傳遞,不可以傳常引用,同時(shí),流對(duì)象不可復(fù)制,因此,也不可采用傳值方式。

輸出函數(shù)最后返回流對(duì)象的引用,可以繼續(xù)作為下次輸出函數(shù)調(diào)用的實(shí)參,因此,語句45、46Dump(cout,z1);//輸出

Dump(cout,z2);也可以用下述一條語句替代: Dump(Dump(cout,z1),z2);計(jì)算機(jī)學(xué)院李衛(wèi)明如果我們把樣例里的Add統(tǒng)一更換為operator+,我們可以發(fā)現(xiàn),程序一樣可以編譯、鏈接、運(yùn)行,結(jié)果正確。再進(jìn)一步,將語句47改為:z3=z1+z2;//等價(jià)于Z1.operator-(z2);簡(jiǎn)化了表達(dá)方式,程序同樣可以編譯、鏈接、運(yùn)行,結(jié)果正確,由此,我們知道運(yùn)算符本質(zhì)上是函數(shù)的不同表達(dá)形式。我們的復(fù)數(shù)類完成了+成員運(yùn)算符重載,用于復(fù)數(shù)相加操作,以此類推可以實(shí)現(xiàn)其它成員運(yùn)算符重載。計(jì)算機(jī)學(xué)院李衛(wèi)明4.2

友元運(yùn)算符重載運(yùn)算符除了作為成員運(yùn)算符重載外,還可以作為友元運(yùn)算符重載。把例題Ex4.1中友元函數(shù)Sub替換為operator-后重新編譯、鏈接、執(zhí)行,程序可以得到正確結(jié)果,再進(jìn)一步,將語句49改為:z3=z1-z2;//等價(jià)于operator-(z1,z2);簡(jiǎn)化后的程序同樣可以編譯、鏈接、運(yùn)行,運(yùn)行結(jié)果不變,由此,我們知道本例中運(yùn)算符-本質(zhì)上是友元函數(shù)的不同表達(dá)形式。我們的復(fù)數(shù)類完成了-作為友元運(yùn)算符重載。計(jì)算機(jī)學(xué)院李衛(wèi)明能否重載輸入輸出運(yùn)算符,使我們?cè)O(shè)計(jì)完成類的對(duì)象可以像內(nèi)置數(shù)據(jù)類型變量一樣輸入輸出呢?運(yùn)算符作為類成員重載時(shí),調(diào)用時(shí)需通過對(duì)象.運(yùn)算符調(diào)用,第一操作數(shù)必須是當(dāng)前類對(duì)象,由于插入運(yùn)算符<<的第一操作數(shù)不是我們自己設(shè)計(jì)類的對(duì)象,而是一個(gè)輸出流ostream類的對(duì)象,因此,運(yùn)算符<<不可作為成員運(yùn)算符重載。進(jìn)一步把例題Ex4.1中友元函數(shù)Dump替換為operator<<后重新編譯、鏈接、執(zhí)行,程序一樣可以得到正確結(jié)果,再將語句45、46簡(jiǎn)化后改為:cout<<z1;//等價(jià)于operator<<(cout,z1);cout<<z2;再進(jìn)一步,可將上述2個(gè)語句改為:cout<<z1<<z2;//等價(jià)于operator<<(operator<<(cout,z1),z2);程序同樣可以編譯、鏈接、運(yùn)行,結(jié)果正確。計(jì)算機(jī)學(xué)院李衛(wèi)明重載輸入運(yùn)算符>>和輸出運(yùn)算符<<cin和cout分別是標(biāo)準(zhǔn)輸入流和標(biāo)準(zhǔn)輸出流。只要包含頭文件“iostream”或“iostream.h”,輸入運(yùn)算符>>和輸出運(yùn)算符<<就能對(duì)標(biāo)準(zhǔn)類型數(shù)據(jù)進(jìn)行輸入和輸出。對(duì)于用戶自定義的對(duì)象,是不能直接用<<和>>來進(jìn)行輸出和輸入的。如果要用它們輸出和輸入自定義的對(duì)象,必須對(duì)它們進(jìn)行重載。輸入運(yùn)算符“>>”和輸出運(yùn)算符“<<”的重載函數(shù)的聲明一般形如下:friendistream&operator>>(istream&,類名&); //重載友元函數(shù)friendostream&operator<<(ostream&,const類名&);//重載友元函數(shù)istream&operator>>(istream&,類名&); //重載為普通函數(shù)ostream&operator<<(ostream&,const類名&); //重載為普通函數(shù)運(yùn)算符>>和<<的第一個(gè)參數(shù)為類型為istream或ostream的引用,重載函數(shù)不能過通用戶自定義對(duì)象來進(jìn)行調(diào)用,所以只能將“>>”和“<<”的重載函數(shù)聲明為類的友元函數(shù)或普通的函數(shù)。計(jì)算機(jī)學(xué)院李衛(wèi)明如果我們?cè)诔绦蛑惺褂胦fstream流對(duì)象ofs作為實(shí)參,ofstream流是ostream流的派生類,ofstream流對(duì)象ofs也是一個(gè)特殊的ostream實(shí)例,參見第5章賦值兼容原則,ofs可以作為插入運(yùn)算符重載里形參os的實(shí)參。修改后,我們可以看到,輸出結(jié)果保存在指定的輸出文件里,寫文件前后,文件的打開和關(guān)閉由流對(duì)象ofs建立和撤銷時(shí)執(zhí)行的構(gòu)造函數(shù)和析構(gòu)函數(shù)完成。由此,我們學(xué)會(huì)了插入運(yùn)算符<<重載方法,可以完成自己設(shè)計(jì)類對(duì)象的輸出。提取運(yùn)算符>>重載道理類似,輸入流類變?yōu)閕stream,如果需要,類中也可以重載提取運(yùn)算符>>。

改寫后重載運(yùn)算符的復(fù)數(shù)類完整樣例見EX4.2計(jì)算機(jī)學(xué)院李衛(wèi)明4.3

常用運(yùn)算符重載

C++的運(yùn)算符按參加運(yùn)算的操作數(shù)個(gè)數(shù)可分為單目運(yùn)算符、雙目運(yùn)算符、三目運(yùn)算符以及不確定目數(shù)運(yùn)算符。單目運(yùn)算符只有一個(gè)操作數(shù),例如!p(取反運(yùn)算符)、-b(負(fù)號(hào)運(yùn)算符);雙目運(yùn)算符有兩個(gè)操作數(shù)參與運(yùn)算,例如2+3(加法運(yùn)算符)、a=b(賦值運(yùn)算符)、x>=y(大于或等于)、V[i](下標(biāo)運(yùn)算符);三目運(yùn)算符有三個(gè)操作數(shù)參與運(yùn)算,三目運(yùn)算符只包括?:運(yùn)算符,例如z?x:y;不確定目數(shù)運(yùn)算符操作數(shù)個(gè)數(shù)不確定,可根據(jù)需要重載為不同的操作數(shù)個(gè)數(shù),只包括函數(shù)調(diào)用運(yùn)算符(),如sumObj(x,y,z),STL算法里大量使用重載了函數(shù)調(diào)用運(yùn)算符()的對(duì)象,這樣的對(duì)象也被稱為函數(shù)對(duì)象或仿函數(shù),具體詳見第8章。計(jì)算機(jī)學(xué)院李衛(wèi)明除.、::、.*、?:、sizeof少數(shù)幾個(gè)運(yùn)算符外,C++絕大部分運(yùn)算符都可以重載,包括常用數(shù)學(xué)運(yùn)算符、比較運(yùn)算符、解引用運(yùn)算符*、成員訪問運(yùn)算符->、下標(biāo)運(yùn)算符[]、函數(shù)調(diào)用運(yùn)算符()及new、delete運(yùn)算符。

C++運(yùn)算符重載時(shí),不可改變運(yùn)算符優(yōu)先級(jí)和結(jié)合性,不可改變操作數(shù)個(gè)數(shù),不可引入新運(yùn)算符,也不可改變內(nèi)置類型上的運(yùn)算符定義,重載運(yùn)算符時(shí),至少有一個(gè)操作數(shù)具有新類型。引入運(yùn)算符重載的目的是為有利于程序的可讀性,不可違背初衷濫用運(yùn)算符重載。STL中大量使用了運(yùn)算符重載。new、delete運(yùn)算符重載用于應(yīng)用程序自己管理內(nèi)存分配和釋放,程序員一般很少使用,在此不再展開。計(jì)算機(jī)學(xué)院李衛(wèi)明在類內(nèi)聲明成員運(yùn)算符重載和友元運(yùn)算符重載形式如下:返回值類型operator運(yùn)算符(形參表);//成員運(yùn)算符重載friend返回值類型operator運(yùn)算符(形參表);//友元運(yùn)算符重載作為友元運(yùn)算符重載時(shí),如果只需訪問類的公有成員,也可改為普通運(yùn)算符重載,在類外聲明,一般形式如下:返回值類型operator運(yùn)算符(形參表);//普通運(yùn)算符重載C++規(guī)定下標(biāo)運(yùn)算符[]只能重載為類的成員函數(shù),一般運(yùn)算符既可采用成員運(yùn)算符重載方式,也可采用友元或普通運(yùn)算符重載方式,大家可以自由選擇。作為友元運(yùn)算符或普通運(yùn)算符重載時(shí),形參個(gè)數(shù)等于操作數(shù)個(gè)數(shù);作為成員運(yùn)算符重載時(shí),當(dāng)前對(duì)象作為第一操作數(shù),其它操作數(shù)通過參數(shù)傳遞,形參個(gè)數(shù)比操作數(shù)個(gè)數(shù)少1。第一操作數(shù)不是當(dāng)前類對(duì)象時(shí),運(yùn)算符只能作為友元運(yùn)算符或普通運(yùn)算符重載。計(jì)算機(jī)學(xué)院李衛(wèi)明作為特例,為了區(qū)分先++、后++、先--、后--,C++規(guī)定,后++和后--重載時(shí)增加一個(gè)整形形參,用于區(qū)分上述情況,增加的整形形參不參加運(yùn)算。樣例EX4.3中,時(shí)鐘類用于模擬12小時(shí)循環(huán)計(jì)時(shí)的時(shí)鐘,重載了多個(gè)運(yùn)算符和插入提取運(yùn)算符。多個(gè)運(yùn)算符重載實(shí)現(xiàn)時(shí)使用了其它運(yùn)算符,相當(dāng)于函數(shù)的相互調(diào)用,注意,不可形成死遞歸,否則會(huì)造成運(yùn)行棧溢出。樣例中語句17聲明了時(shí)鐘對(duì)象轉(zhuǎn)換為整形的轉(zhuǎn)換運(yùn)算符重載,語句83~86是具體轉(zhuǎn)換運(yùn)算符的實(shí)現(xiàn)。程序中多處static_cast<int>(時(shí)鐘對(duì)象)語句調(diào)用了這個(gè)轉(zhuǎn)換運(yùn)算符,獲得時(shí)鐘對(duì)象轉(zhuǎn)換后秒數(shù);同時(shí)構(gòu)造函數(shù)前加入了關(guān)鍵字explicit,下一節(jié)描詳討論類型轉(zhuǎn)換。計(jì)算機(jī)學(xué)院李衛(wèi)明4.4 不同類型對(duì)象間的轉(zhuǎn)換C/C++程序設(shè)計(jì)中經(jīng)常需要進(jìn)行類型轉(zhuǎn)換,有些類型轉(zhuǎn)換是隱式進(jìn)行的,即由編譯器自主決定將某種類型數(shù)據(jù)轉(zhuǎn)換成另一種類型數(shù)據(jù)再進(jìn)一步處理;有些類型轉(zhuǎn)換是顯式的。

C/C++提供了如下C形式的顯式類型轉(zhuǎn)換:(類型)表達(dá)式或類型(表達(dá)式)如double型變量x可根據(jù)下述表達(dá)式四舍五入轉(zhuǎn)換成整形:(int)((x>0)?(x+0.5):(x-0.5))對(duì)象和其它內(nèi)置數(shù)據(jù)類型對(duì)象間的轉(zhuǎn)換或?qū)ο蠛推渌愵愋蛯?duì)象間的轉(zhuǎn)換一樣分隱式和顯式兩種方式。

計(jì)算機(jī)學(xué)院李衛(wèi)明其它類型轉(zhuǎn)換成當(dāng)前類對(duì)象是通過只有一個(gè)參數(shù)或其余參數(shù)都有默認(rèn)值的單參數(shù)構(gòu)造函數(shù)進(jìn)行的,這樣的構(gòu)造函數(shù)也可起到轉(zhuǎn)換作用,也可稱為轉(zhuǎn)換構(gòu)造函數(shù)。

如樣例Ex4.3中時(shí)鐘類如整數(shù)10可以被轉(zhuǎn)換成狀態(tài)為10點(diǎn)0分0秒的時(shí)鐘對(duì)象。如何防止不需要的、甚至是錯(cuò)誤的隱式轉(zhuǎn)換呢?上節(jié)的時(shí)鐘類樣例同樣給出了答案,就是在構(gòu)造函數(shù)前加explicit關(guān)鍵字,這樣編譯器就不再進(jìn)行隱式構(gòu)造轉(zhuǎn)換,

如上節(jié)例題Ex4.3語句112后加入如下需要隱式轉(zhuǎn)換的語句就會(huì)報(bào)錯(cuò):clock3=10;//報(bào)錯(cuò),無匹配的類型轉(zhuǎn)換

計(jì)算機(jī)學(xué)院李衛(wèi)明解決了其它類型轉(zhuǎn)換為當(dāng)前對(duì)象問題,還需要解決當(dāng)前對(duì)象轉(zhuǎn)換為其它內(nèi)置數(shù)據(jù)類型或其它類類型問題。

上節(jié)Ex4.3同樣給出了答案:轉(zhuǎn)換運(yùn)算符重載。Ex4.3中語句17定義了當(dāng)前時(shí)鐘對(duì)象轉(zhuǎn)換為int型的轉(zhuǎn)換運(yùn)算符重載,語句83~86是這個(gè)轉(zhuǎn)換運(yùn)算符重載的具體實(shí)現(xiàn),轉(zhuǎn)換結(jié)果將時(shí)鐘累計(jì)為秒數(shù)。

轉(zhuǎn)換運(yùn)算符重載的一般形式如下:explicitoperator目標(biāo)類型()const;Ex4.3中,static_cast<int>(rhs)表達(dá)式就是顯式地將時(shí)鐘對(duì)象rhs轉(zhuǎn)換為整形數(shù)據(jù)累計(jì)秒,static_cast<int>(*this)語句就是顯式地將this所指時(shí)鐘對(duì)象,即當(dāng)前時(shí)鐘對(duì)象轉(zhuǎn)換為整形數(shù)據(jù)累計(jì)秒。同樣的,轉(zhuǎn)換運(yùn)算符重載中關(guān)鍵字explicit用于限定只可以顯式轉(zhuǎn)換。

計(jì)算機(jī)學(xué)院李衛(wèi)明static_cast是C++主張的顯式類型轉(zhuǎn)換的主要方式。C++主張的顯式類型轉(zhuǎn)換共有如下4種,用于替代C形式的顯式類型轉(zhuǎn)換,即:static_castconst_castreinterpret_castdynamic_cast使用語法:目標(biāo)類型result=cast_type<目標(biāo)類型>(對(duì)象或表達(dá)式);前3種顯式轉(zhuǎn)換是在編譯階段決定如何轉(zhuǎn)換的,最后一種顯式轉(zhuǎn)換dynamic_cast是在運(yùn)行階段決定的,具有咨詢性質(zhì),可檢查轉(zhuǎn)換是否成功,主要用于具有虛函數(shù)的基類指針到派生類指針的轉(zhuǎn)換,轉(zhuǎn)換失敗時(shí)返回空指針,成功時(shí)返回派生類對(duì)象指針;也可用于具有虛函數(shù)的基類對(duì)象引用到派生類對(duì)象引用的轉(zhuǎn)換,轉(zhuǎn)換失敗時(shí)拋出異常,成功時(shí)返回派生類對(duì)象引用,一般程序設(shè)計(jì)中不主張使用這種轉(zhuǎn)換,特殊場(chǎng)合才使用,具體參見第5章。

計(jì)算機(jī)學(xué)院李衛(wèi)明static_cast是較為普遍的顯式類型轉(zhuǎn)換。如上面樣例中static_cast<CClock>(10)顯式地將10通過轉(zhuǎn)換構(gòu)造函數(shù)轉(zhuǎn)換為CClock對(duì)象,static_cast<int>(rhs)語句顯式的調(diào)用轉(zhuǎn)換運(yùn)算符重載將時(shí)鐘對(duì)象rhs轉(zhuǎn)換為整形秒數(shù),用static_cast<int>((x>0)?(x+0.5):(x-0.5))替換C樣式的顯式類型轉(zhuǎn)換實(shí)現(xiàn)double型變量x的四舍五入轉(zhuǎn)換為整形。

static_cast還可用于相關(guān)類型的指針之間進(jìn)行轉(zhuǎn)換,實(shí)現(xiàn)了編譯階段檢查。int*ip=&x;char*pc;pc=(char*)ip;//C形式顯式類型轉(zhuǎn)換上述C形式顯式類型轉(zhuǎn)換可以順利通過編譯運(yùn)行,但實(shí)際pc指向的并非C形式字符串,如下方式使用,可能導(dǎo)致異常運(yùn)行結(jié)果:stringstr(pc);如采用如下形式,編譯就可檢查出錯(cuò)誤,避免嚴(yán)重問題:pc=static_cast<char*>(ip);//編譯器報(bào)錯(cuò),不可轉(zhuǎn)換。計(jì)算機(jī)學(xué)院李衛(wèi)明const_cast是一種較為罕見的顯式類型轉(zhuǎn)換,讓程序員能夠臨時(shí)改變對(duì)象的const特性,只有在特定場(chǎng)合才具有意義,如:constCClock&LaterClock(constCClock&c1,constCClock&c2){returnc1>=c2?c1:c2;}CClock&LaterClock(CClock&c1,CClock&c2){constCClock&c3=LaterClock(const_cast<constCClock&>(c1),const_cast<constCClock&>(c2));returnconst_cast<CClock&>(c3);}計(jì)算機(jī)學(xué)院李衛(wèi)明上述第一個(gè)函數(shù)返回2個(gè)常時(shí)鐘對(duì)象中的比較晚的常時(shí)鐘對(duì)象引用,可以作為右值在表達(dá)式中使用,不可在賦值表達(dá)式中作為左值使用。后一個(gè)重載的函數(shù)通過const_cast將2個(gè)時(shí)鐘轉(zhuǎn)換成常時(shí)鐘對(duì)象,從而調(diào)用前一個(gè)函數(shù),調(diào)用后返回一個(gè)時(shí)鐘常引用,最后再轉(zhuǎn)換為普通引用后返回,可以作為左值使用。如執(zhí)行下列調(diào)用后較晚的時(shí)鐘對(duì)象賦值為10:00:00。LaterClock(c1,c2)=static_cast<CClock>(10);計(jì)算機(jī)學(xué)院李衛(wèi)明reinterpret_cast是非常特殊的類型轉(zhuǎn)換操作,可以將一種類型轉(zhuǎn)換為另一種類型,不管它們是否相關(guān),需要程序員確保轉(zhuǎn)換是正確的,編譯器不再進(jìn)行檢查,強(qiáng)烈建議慎用。int*ip=&x;char*pc;pc=reinterpret_cast<char*>(ip);//編譯可以通過,需要程序員確保轉(zhuǎn)換準(zhǔn)確性上述語句可以編譯運(yùn)行,同樣,實(shí)際pc指向的并非C形式字符串,使用時(shí)可能導(dǎo)致異常運(yùn)行結(jié)果。顯式類型轉(zhuǎn)換是程序中比較容易出錯(cuò)或影響可移植性的因素,只有static_cast較為常見,上述其它顯式轉(zhuǎn)換使用時(shí)應(yīng)該特別謹(jǐn)慎。計(jì)算機(jī)學(xué)院李衛(wèi)明4.5 典型范例——字符串類設(shè)計(jì)和實(shí)現(xiàn)樣例Ex4.4采用字符串類作為典型案例,模擬STLstring接口設(shè)計(jì)實(shí)現(xiàn)了字符串類,并提供了根據(jù)用戶操作指令進(jìn)行模擬字符串類測(cè)試的main函數(shù)。樣例中的字符串類,具有構(gòu)造、字符串連接+、取子串、下標(biāo)運(yùn)算符[]重載、拷貝構(gòu)造、移動(dòng)構(gòu)造、拷貝賦值、移動(dòng)賦值、輸出功能,字符串值長(zhǎng)度不限。使用動(dòng)態(tài)分配存儲(chǔ)字符串內(nèi)容,程序不存在內(nèi)存泄漏;該字符串類可適合各種長(zhǎng)度字符串,包括空串。使用了C字符串處理庫(kù)函數(shù),不使用STLvector類模板。計(jì)算機(jī)學(xué)院李衛(wèi)明測(cè)試該字符串類時(shí)建立了4個(gè)字符串,每個(gè)輸入樣例前兩行含長(zhǎng)度不超過200的兩個(gè)字符串,輸入后賦值給前2個(gè)字符串對(duì)象,后面包含若干指令,每個(gè)指令由指令碼和所需參數(shù)組成,指令有下述四種:指令Pi代表輸出第i個(gè)字符串;指令A(yù)ij代表將第i個(gè)字符串賦值給第j個(gè)字符串;指令Cijk

溫馨提示

  • 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. 人人文庫(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)論