全國計算機二級C考試復習知識點匯總_第1頁
全國計算機二級C考試復習知識點匯總_第2頁
全國計算機二級C考試復習知識點匯總_第3頁
全國計算機二級C考試復習知識點匯總_第4頁
全國計算機二級C考試復習知識點匯總_第5頁
已閱讀5頁,還剩19頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2017年全國計算機二級C+銬試復習知識點匯總一、C+既述(一)發展歷史1980年,BjarneStroustrup博士開始著手創建一種模擬語言,能夠具有面向對象的程序設計特色。在當時,面向對象編程還是一個比較新的理念,Stroustrup博士并不是從頭開始設計新語言,而是在C語言的基礎上進行創建。這就1985年,C+鐘始在外面慢慢流行。經過多年的發展,C+S經有了多個版本。為次,ANSI和ISO的聯合委員會于1989年著手為C+|iJ定標準。1994年2月,該委員會出版了第一份非正式草案,1998年正式推出了C+勺國際標準。(二)C和C+C+C的超集,也可以說C是C+勺子集,因為C先出現。按

2、常理說,C+編譯器能夠編譯任何C程序,但是C和C+斑是有一些小差別。例如C+:曾加了C不具有的關鍵字。這些關鍵字能作為函數和變量的標識符在c程序中使用,盡管c+危含了所有的C,但顯然沒有任何C+S譯器能編譯這樣的C程序。C程序員可以省略函數原型,而C+壞可以,一個不帶參數的C函數原型必須把void寫出來。而C+時以使用空參數列表。C+”new和delete是對內存分配的運算符,取代了C中的malloc和free。標準C+好的字符串類取代了C標準C函數庫頭文件中的字符數組處理函數。C+”用來做控制態輸入輸出的iostream類庫替代了標準C中的stdio函數庫。C+”的try/catch/thr

3、ow異常處理機制取代了標準C中的setjmp()和longjmp()函數。二、關鍵字和變量C+#目對與C增加了一些關鍵字,如下:typenamebooldynamic_castmutablenamespacestatic_castusingcatchexplicitnewvirtualoperatorfalseprivatetemplatevolatileconstprotectedthiswchar_tconst_castpublicthrowfriendtruereinterpret_casttrybitorxor_eand_eqcomplor_eqnot_eqbitand在C+”還增加了

4、bool型變量和wchar_t型變量:布爾型變量是有兩種邏輯狀態的變量,它包含兩個值:真和假。如果在表達式中使用了布爾型變量,那么將根據變量值的真假而賦予整型值1或0。要把一個整型變量轉換成布爾型變量,如果整型值為0,則其布爾型值為假;反之如果整型值為非0,則其布爾型值為真。布兒型變量在運行時通常用做標志,比如進行邏輯測試以改變程序流程。#includeiostream.hintmain()boolflag;flag=true;if(flag)coutreturn0;C+”還包括wchar_t數據類型,wchar_t也是字符類型,但是是那些寬度超過8位的數據類型。許多外文字符集所含的數目超過2

5、56個,char字符類型無法完全囊括。wchar_t數據類型一般為16位。標準C+勺iostream類庫中包括了可以支持寬字符的類和對象。用wout替代cout即可。#includeiostream.hintmain()wchar_twc;wc=b;woutwc=y;woutwc=e;woutreturn0;說明一下:某些編譯器無法編譯該程序(不支持該數據類型)。三、強制類型轉換有時候,根據表達式的需要,某個數據需要被當成另外的數據類型來處理,這時,就需要強制編譯器把變量或常數由聲明時的類型轉換成需要的類型。為此,就要使用強制類型轉換說明,格式如下:int*iptr=(int*)&table;

6、表達式的前綴(int*)就是傳統C風格的強制類型轉換說明(typecast),又可稱為強制轉換說明(cast)。強制轉換說明告訴編譯器把表達式轉換成指定的類型。有些情況下強制轉換是禁用的,例如不能把一個結構類型轉換成其他任何類型。數字類型和數字類型、指針和指針之間可以相互轉換。當然,數字類型和指針類型也可以相互轉換,但通常認為這樣做是不安全而且也是沒必要的。強制類型轉換可以避免編譯器的警告。longintel=123;shorti=(int)el;floatm=34.56;inti=(int)m;上面兩個都是C風格的強制類型轉換,C+斑增加了一種轉換方式,比較一下上面和下面這個書寫方式的不同:

7、longintel=123;shorti=int(el);floatm=34.56;inti=int(m);使用強制類型轉換的最大好處就是:禁止編譯器對你故意去做的事發出警告。但是,利用強制類型轉換說明使得編譯器的類型檢查機制失效,這不是明智的選擇。通常,是不提倡進行強制類型轉換的。除非不可避免,如要調用malloc()函數時要用的void型指針轉換成指定類型指針。四、標準輸入輸出流在C語言中,輸入輸出是使用語句scanf()和printf()來實現的,而C+”是使用類來實現的。#includeiostream.hmain()C+中main()函數默認為int型,而C語言中默認為void型。i

8、nta;couta;/*輸入一個數值*/coutreturn0;cin,cout,endl對象,他們本身并不是C+胡言的組成部分。雖然他們已經是ANSI標準C+”被定義,但是他們不是語言的內在組成部分。在C+”不提供內在的輸入輸出運算符,這與其他語言是不同的。輸入和輸出是通過C+談來實現的,cin和cout是這些類的實例,他們是在C+胡言的外部實現。在C+胡言中,有了一種新白注釋方法,就是,在該行后的所有說明都被編譯器認為是注釋,這種注釋不能換行。C+仍然保留了傳統C語言的注釋風格/*/。C+也可采用格式化輸出的方法:#includeiostream.hintmain()inta;couta;

9、cout類的設計、構造函數和析構函數一、類的設計1 .類的聲明class類名private:/私有.public:公有;2 .類的成員一般在C+談中,所有定義的變量和函數都是類的成員。如果是變量,我們就叫它數據成員如果是函數,我們就叫它成員函數。3 .類成員的可見性private和public訪問控制符決定了成員的可見性。由一個訪問控制符設定的可訪問狀態將一直持續到下一個訪問控制符出現,或者類聲明的結束。私有成員僅能被同一個類中的成員函數訪問,公有成員既可以被同一類中的成員函數訪問,也可以被其他已經實例化的類中函數訪問。當然,這也有例外的情況,這是以后要討論的友元函數。類中默認的數據類型是pr

10、ivate,結構中的默認類型是public。一般情況下,變量都作為私有成員出現,函數都作為公有成員出現。類中還有一種訪問控制符protected,叫保護成員,以后再說明。4 .初始化在聲明一個類的對象時,可以用圓括號()包含一個初始化表??聪旅嬉粋€例子:#includeiostream.hclassBoxprivate:個私有數據成員intheight,width,depth;/3public:Box(int,int,int);Box();intvolume();成員函數;Box二Box(intht,intwd,intdp)height=ht;width=wd;depth=dp;Box:Box

11、()/nothingintBox:volume()returnheight*width*depth;intmain()Boxthisbox(3,4,5);/聲明一個類對象并初始化coutreturn0;當一個類中沒有private成員和protected成員時,也沒有虛函數,并且不是從其他類中派生出來的,可以用來初始化。(以后再講解)5 .內聯函數內聯函數和普通函數的區別是:內聯函數是在編譯過程中展開的。通常內聯函數必須簡短。定義類的內聯函數有兩種方法:一種和C語言一樣,在定義函數時使用關鍵字inline。如:inlineintBox:volume()returnheight*width*de

12、pth;還有一種方法就是直接在類聲明的內部定義函數體,而不是僅僅給出一個函數原型。我們把上面的函數簡化一下:#includeiostream.hclassBoxprivate:intheight,width,depth;public:Box(intht,intwd,intdp)height=ht;width=wd;depth=dp;Box();intvolume()returnheight*width*depth;;intmain()Boxthisbox(3,4,5);/聲明一個類對象并初始化coutreturn0;這樣,兩個函數都默認為內聯函數了。二、構造函數什么是構造函數?通俗的講,在類中

13、,函數名和類名相同的函數稱為構造函數。上面的Box()函數就是構造函數。C+吮許同名函數,也就允許在一個類中有多個構造函數。如果一個都沒有,編譯器將為該類產生一個默認的構造函數,這個構造函數可能會完成一些工作,也可能什么都不做。絕對不能指定構造函數的類型,即使是void型都不可以。實際上構造函數默認為void型。當一個類的對象進入作用域時,系統會為其數據成員分配足夠的內存,但是系統不一定將其初始化。和內部數據類型對象一樣,外部對象的數據成員總是初始化為00局部對象不會被初始化。構造函數就是被用來進行初始化工作的。當自動類型的類對象離開其作用域時,所站用的內存將釋放回系統??瓷厦娴睦?,構造函數

14、Box()函數接受三個整型擦黑素,并把他們賦值給立方體對象的數據成員。如果構造函數沒有參數,那么聲明對象時也不需要括號。1 .使用默認參數的構造函數當在聲明類對象時,如果沒有指定參數,則使用默認參數來初始化對象#includeiostream.hclassBoxprivate:intheight,width,depth;public:Box(intht=2,intwd=3,intdp=4)height=ht;width=wd;depth=dp;Box();intvolume()returnheight*width*depth;intmain()Boxthisbox(3,4,5);/初始化Box

15、defaulbox;/使用默認參數coutcout2 .默認構造函數沒有參數或者參數都是默認值的構造函數稱為默認構造函數。如果你不提供構造函數,編譯器會自動產生一個公共的默認構造函數,這個構造函數什么都不做。如果至少提供一個構造函數,則編譯器就不會產生默認構造函數。3 .重載構造函數一個類中可以有多個構造函數。這些構造函數必須具有不同的參數表。在一個類中需要接受不同初始化值時,就需要編寫多個構造函數,但有時候只需要一個不帶初始值的空的Box對象。#includeiostream.hclassBoxprivate:intheight,width,depth;public:Box()/nothin

16、gBox(intht=2,intwd=3,intdp=4)height=ht;width=wd;depth=dp;Box();intvolume()returnheight*width*depth;;intmain()Boxthisbox(3,4,5);/初始化Boxotherbox;otherbox=thisbox;coutreturn0;這兩個構造函數一個沒有初始化值,一個有。當沒有初始化值時,程序使用默認值,即2,3,4。但是這樣的程序是不好的。它允許使用初始化過的和沒有初始化過的Box對象,但它沒有考慮當thisbox給otherbox賦值失敗后,volume()該返回什么。較好的方法

17、是,沒有參數表的構造函數也把默認值賦值給對象。classBoxintheight,width,depth;public:Box()height=0;width=0;depth=0;Box(intht,intwd,intdp)height=ht;width=wd;depth=dp;intvolume()returnheight*width*depth;;這還不是最好的方法,更好的方法是使用默認參數,根本不需要不帶參數的構造函數。classBoxintheight,width,depth;public:Box(intht=0,intwd=0,intdp=0)height=ht;width=wd;d

18、epth=dp;intvolume()returnheight*width*depth;三、析構函數當一個類的對象離開作用域時,析構函數將被調用(系統自動調用)。析構函數的名字和類名一樣,不過要在前面加上。對一個類來說,只能允許一個析構函數,析構函數不能有參數,并且也沒有返回值。析構函數的作用是完成一個清理工作,如釋放從堆中分配的內存。我們也可以只給出析構函數的形式,而不給出起具體函數體,其效果是一樣的,如上面的例子。但在有些情況下,析構函數又是必需的。如在類中從堆中分配了內存,則必須在析構函數中釋放。C+勺內部數據類型遵循隱式類型轉換規則。假設某個表達市中使用了一個短整型變量,而編譯器根據上

19、下文認為這兒需要是的長整型,則編譯器就會根據類型轉換規則自動把它轉換成長整型,這種隱式轉換出現在賦值、參數傳遞、返回值、初始化和表達式中。我們也可以為類提供相應的轉換規則。對一個類建立隱式轉換規則需要構造一個轉換函數,該函數作為類的成員,可以把該類的對象和其他數據類型的對象進行相互轉換。聲明了轉換函數,就告訴了編譯器,當根據句法判定需要類型轉換時,就調用函數。有兩種轉換函數。一種是轉換構造函數;另一種是成員轉換函數。需要采用哪種轉換函數取決于轉換的方向。一、轉換構造函數當一個構造函數僅有一個參數,且該參數是不同于該類的一個數據類型,這樣的構造函數就叫轉換構造函數。轉換構造函數把別的數據類型的對

20、象轉換為該類的一個對象。和其他構造函數一樣,如果聲明類的對象的初始化表同轉換構造函數的參數表相匹配,該函數就會被調用。當在需要使用該類的地方使用了別的數據類型,便宜器就會調用轉換構造函數進行轉換。#includeiostream.h#includetime.h#includestdio.hclassDateintmo,da,yr;public:Date(time_t);voiddisplay。;voidDate二display。charyear5;if(yr10)sprintf(year,0%d,yr);elsesprintf(year,%d,yr);couttm_mday;mo=tim-tm

21、_mon+1;yr=tim-tm_year;if(yr=100)yr-=100;intmain()time_tnow=time(0);Datedt(now);dt.display();本程序先調用time()函數來獲取當前時間,并把它賦給time_t對象;然后程序通過調用Date類的轉換構造函數來創建一個Date對象,該對象由time_t對象轉換而來。time_t對象先傳遞給localtime()函數,然后返回一個指向tm結構(time.h文件中聲明)的指針,然后構造函數把結構中的日月年的數值拷貝給Date對象的數據成員,這就完成了從time_t對象到Date對象的轉換。二、成員轉換函數成員轉

22、換函數把該類的對象轉換為其他數據類型的對象。在成員轉換函數的聲明中要用到關鍵字operator。這樣聲明一個成員轉換函數:operatoraaa();在這個傷J子中,aaa就是要轉換成的數據類型的說明符。這里的類型說明符可以是任何合法的C+談型,包括其他的類。如下來定義成員轉換函數;Classname:operatoraaa()類名標識符是聲明了該函數的類的類型說明符。上面定義的Date類并不能把該類的對象轉換回time_t型變量,但可以把它轉換成一個長整型值,計算從2000年1月1日到現在的天數。#includeiostream.hclassDateintmo,da,yr;public:Da

23、te(intm,intd,inty)mo=m;da=d;yr=y;operatorint();/聲明;Date:operatorint()/定義staticintdys=31,28,31,30,31,30,31,31,30,31,30,31;intdays=yr-2000;days*=365;days+=(yr-2000)/4;for(inti=0;idays+=dysi;days+=da;returndays;intmain()Datenow(12,24,2003);intsince=now;coutreturn0;三、類的轉換上面兩個例子都是C+談對象和內部數據對象之間的相互轉換。也可以定

24、義轉換函數來實現兩個類對象之間的相互轉換。#includeiostream.hclassCustomDatepublic:intda,yr;CustomDate(intd=0,inty=0)da=d;yr=y;voiddisplay。cout;classDateintmo,da,yr;public:Date(intm=0,intd=0,inty=0)mo=m;da=d;yr=y;Date(constCustomDate&);/轉換構造函數operatorCustomDate();/成員轉換函數voiddisplay。cout;staticintdys=31,28,31,30,31,30,31,

25、31,30,31,30,31;Date二Date(constCustomDate&jd)yr=jd.yr;da=jd.da;for(mo=0;modysmo)da-=dysmo;elsebreak;mo+;CustomDatecd(0,yr);for(inti=0;icd.da+=da;returncd;intmain()Datedt(12,24,3);CustomDatecd;cd=dt;/調用成員轉換函數cd.display();dt=cd;/調用轉換構造函數dt.display();return0;這個例子中有兩個類CustomDate和Date,CustomDate型日期包含年份和大數

26、。這個例子沒有考慮閏年情況。但是在實際構造一個類時,應該考慮到所有問題的可能性。在Date里中具有兩種轉換函數,這樣,當需要從Date型變為CustomDate型十,可以調用成員轉換函數;反之可以調用轉換構造函數。不能既在Date類中定義成員轉換函數,又在CustomDate類里定義轉換構造函數。那樣編譯器在進行轉換時就不知道該調用哪一個函數,從而出錯.四、轉換函數的調用C+S調用轉換函數有三種形式:第一種是隱式轉換,例如編譯器需要一個Date對象,而程序提供的是CustomDate對象,編譯器會自動調用合適的轉換函Date二operator CustomDate()數。另外兩種都是需要在程序

27、代碼中明確給出的顯式轉換。C+雖制類型轉換是一種,還有一種是顯式調用轉換構造函數和成員轉換函數。下面的程序給出了三中轉換形式:#includeiostream.hclassCustomDatepublic:intda,yr;CustomDate(intd=0,inty=0)da=d;yr=y;voiddisplay。cout;classDateintmo,da,yr;public:Date(intm,intd,inty)mo=m;da=d;yr=y;operatorCustomDate();;Date二operatorCustomDate()staticintdys=31,28,31,30,3

28、1,30,31,31,30,31,30,31;CustomDatecd(0,yr);for(inti=0;icd.da+=da;returncd;intmain()Datedt(11,17,89);CustomDatecd;cd=dt;cd.display();cd=(CustomDate)dt;cd.display();cd=CustomDate(dt);cd.display();return0;五、轉換發生的情形上面的幾個例子都是通過不能類型對象之間的相互賦值來調用轉換函數,還有幾種調用的可能:參數傳遞初始化返回值表達式語句這些情況下,都有可能調用轉換函數。下面的程序不難理解,就不分析了。

29、#includeiostream.hclassCustomDatepublic:intda,yr;CustomDate()CustomDate(intd,inty)da=d;yr=y;voiddisplay。cout;classDateintmo,da,yr;public:Date(intm,intd,inty)mo=m;da=d;yr=y;operatorCustomDate();;Date二operatorCustomDate()staticintdys=31,28,31,30,31,30,31,31,30,31,30,31;CustomDatecd(0,yr);for(inti=0;icd.da+=da;returncd;classTesterCustomDatecd;public:explicitTester(CustomDatec)cd=c;voiddisplay。cd.disp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論