第一章面向?qū)ο蟪绦蛟O(shè)計(jì)第一節(jié)復(fù)合數(shù)據(jù)類型_第1頁
第一章面向?qū)ο蟪绦蛟O(shè)計(jì)第一節(jié)復(fù)合數(shù)據(jù)類型_第2頁
第一章面向?qū)ο蟪绦蛟O(shè)計(jì)第一節(jié)復(fù)合數(shù)據(jù)類型_第3頁
第一章面向?qū)ο蟪绦蛟O(shè)計(jì)第一節(jié)復(fù)合數(shù)據(jù)類型_第4頁
第一章面向?qū)ο蟪绦蛟O(shè)計(jì)第一節(jié)復(fù)合數(shù)據(jù)類型_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余17頁可下載查看

下載本文檔

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

文檔簡介

復(fù)合數(shù)據(jù)類型

聯(lián)合體、枚舉、類型定義符GAMFE

Gamecollege-v8.00111學(xué)習(xí)重點(diǎn):聯(lián)合體枚舉類型定義符typedef2學(xué)習(xí)目的:掌握聯(lián)合體的內(nèi)存結(jié)構(gòu)及使用方式掌握枚舉的使用方式掌握typedef的使用方式GAMFE

Gamecollege-v8.00222.1.2聯(lián)合體2.1.2.1聯(lián)合體的定義和使用聯(lián)合類型也是一種用戶自定義數(shù)據(jù)類型。聯(lián)合類型是將多個(gè)數(shù)據(jù)項(xiàng)組織為一個(gè)整體,它們?cè)趦?nèi)存中占用同一段存儲(chǔ)單元,聯(lián)合類型的變量所占用的字節(jié)長度為最長的成員的長度。union<聯(lián)合類型名>{ <成員類型1><成員名1>; <成員類型2><成員名2>; … <成員類型n><成員名n>;};0332.1.2聯(lián)合體2.1.2.1聯(lián)合體的定義和使用測(cè)試以下代碼,查看輸出結(jié)果:#include<iostream>usingnamespacestd;unionmyData{ charstr[5]; intivale; doublebigNumber;};intmain(){ cout<<sizeof(myData)<<endl; return0;}442.1.2聯(lián)合體2.1.2.1聯(lián)合體的定義和使用C++語言中允許省略<聯(lián)合類型名>,定義無名聯(lián)合類型(也稱匿名聯(lián)合類型)。聯(lián)合類型的定義應(yīng)視為一個(gè)完整的語句,用一對(duì)大括號(hào)括起來,最后用分號(hào)結(jié)束。unionunioncif{ charch; inti; floatf;};union{ charch; inti; floatf;};0552.1.2聯(lián)合體2.1.2.1聯(lián)合體的定義和使用聲明聯(lián)合變量的方式有以下3種。1)在定義聯(lián)合類型的同時(shí)聲明聯(lián)合變量;2)使用無名聯(lián)合類型聲明聯(lián)合變量;3)用聯(lián)合類型聲明聯(lián)合變量。unionwork{ charch[10]; inti;}x={“teacher”};//聲明1個(gè)聯(lián)合變量x,并初始化在定義聯(lián)合類型的同時(shí)聲明聯(lián)合變量662.1.2聯(lián)合體2.1.2.1聯(lián)合體的定義和使用union{ inti; charch[10];}y={12};//用匿名聯(lián)合類型聲明1個(gè)聯(lián)合變量y使用無名聯(lián)合類型聲明聯(lián)合變量unionwork{ charch[10]; inti;};workz={“worker”};//用聯(lián)合類型work聲明1個(gè)聯(lián)合變量z用聯(lián)合類型聲明聯(lián)合變量772.1.2聯(lián)合體2.1.2.1聯(lián)合體的定義和使用在聲明語句中初始化聯(lián)合時(shí),總是初始化聯(lián)合的第一個(gè)數(shù)據(jù)成員。unionabc{ charch; inti; floatf;}x={‘a(chǎn)’,8,6.3};//錯(cuò)誤,初始化了太多的成員882.1.2聯(lián)合體2.1.2.1聯(lián)合體的定義和使用聯(lián)合變量及其成員的使用與結(jié)構(gòu)體變量及其成員的使用類似。對(duì)相同類型的聯(lián)合變量可以進(jìn)行賦值運(yùn)算,但不能對(duì)其進(jìn)行直接輸入或輸出的運(yùn)算。對(duì)聯(lián)合成員的引用也是采用點(diǎn)運(yùn)算符進(jìn)行的,聯(lián)合成員可以進(jìn)行各種運(yùn)算。使用聯(lián)合基本上有3種方式:1)節(jié)省內(nèi)存空間2)可以使用聯(lián)合在同一塊內(nèi)存塊存儲(chǔ)程序中不同時(shí)期的不同變量。3)可以使用聯(lián)合以兩種或更多種不同的方式來解釋相同的數(shù)據(jù)。992.1.2聯(lián)合體2.1.2.1聯(lián)合體的定義和使用測(cè)試以下代碼,體會(huì)聯(lián)合對(duì)象和指針的使用,注意直接的輸出字符串導(dǎo)致了輸出的異常:#include<iostream>usingnamespacestd;unionmyData{ charstr[20]; intivale;};intmain(){ myDatanewData={"helloworld"},*pData=NULL; newData.ivale=20; pData=&newData; cout<<pData->ivale<<endl; cout<<pData->str<<endl; return0;}10102.1.3枚舉2.1.3.1枚舉的定義和使用如果一個(gè)變量只有幾種可能的值,可以定義為枚舉(enumeration)類型。所謂“枚舉”是指將變量的值列舉出來,變量的值只能在列舉出來的值的范圍內(nèi)。聲明枚舉類型用enum開頭。 enum枚舉名{枚舉值表};enumweekday{sun,mon,tue,wed,thu,fri,sat};在枚舉值表中應(yīng)羅列出所有可用值,這些值也稱為枚舉元素。枚舉元素本身由系統(tǒng)定義了一個(gè)表示序號(hào)的數(shù)值。在缺省情況下,第一個(gè)枚舉成員被賦值為0,后面的每個(gè)枚舉成員的值依次增加1。11112.1.3枚舉2.1.3.1枚舉的定義和使用也可以顯式地把一個(gè)值賦給一個(gè)枚舉成員,它后邊的成員如果沒有賦值,那么值依次增加1,這個(gè)值不必是惟一的。enumweekday{mon=1,tue,wed,thu,fri,sat,sun};枚舉變量也可用不同的方式說明,即先定義后說明,同時(shí)定義說明或直接說明。enumweekday{......};enumweekdaya,b,c;12122.1.3枚舉2.1.3.1枚舉的定義和使用測(cè)試以下代碼,注意枚舉中未賦值的成員的值。#include<iostream>usingnamespacestd;enumWeek{mon=1,tue,wed,thu,fri,sat,sun};intmain(){ WeekmyDate=sat; cout<<myDate<<endl; return0;}13132.1.3枚舉2.1.3.1枚舉的定義和使用枚舉值是常量,不是變量,不能在程序中用賦值語句再對(duì)它賦值。enumweekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;a=sun;b=mon;c=tue;printf("%d,%d,%d",a,b,c);0,1,214142.1.4類型定義符typedefC++允許用戶為數(shù)據(jù)類型取“別名”。類型定義符typedef即可用來完成此功能。typedef原類型名新類型名typedefcharNAME[20];NAMEa1,a2,s1,s2;用typedef定義數(shù)組、指針、結(jié)構(gòu)等類型將帶來很大的方便,不僅使程序書寫簡單而且使意義更為明確,增強(qiáng)了代碼的可讀性。15152.1.4類型定義符typedeftypedef常見有以下3種用途:定義一種類型的別名,而不只是簡單的宏替換。用typedef來定義與平臺(tái)無關(guān)的類型。為復(fù)雜的聲明定義一個(gè)新的簡單的別名。16162.1.4類型定義符typedef定義一種類型的別名,而不只是簡單的宏替換??梢杂米魍瑫r(shí)聲明指針型的多個(gè)對(duì)象。比如:char*pa,pb;//這多數(shù)不符合意圖,它只聲明了一個(gè)指向字符變量的指針,//和一個(gè)字符變量;以下則可行:typedefchar*PCHAR;//一般用大寫PCHARpa,pb;//可行,同時(shí)聲明了兩個(gè)指向字符變量的指針雖然:char*pa,*pb;也可行,但相對(duì)來說沒有用typedef的形式直觀,尤其在需要大量指針的地方,typedef的方式更簡單。17172.1.4類型定義符typedef用typedef來定義與平臺(tái)無關(guān)的類型。比如定義一個(gè)叫REAL的浮點(diǎn)類型,在目標(biāo)平臺(tái)一上,讓它表示最高精度為:typedeflongdoubleREAL;在不支持longdouble的平臺(tái)二上,改為:typedefdoubleREAL;在連double都不支持的平臺(tái)三上,改為:typedeffloatREAL;也就是說,當(dāng)跨平臺(tái)時(shí),只要改下typedef本身就行,不用對(duì)其他源碼做任何修改。標(biāo)準(zhǔn)庫就廣泛使用了這個(gè)技巧,比如size_t。c18182.1.4類型定義符typedef為復(fù)雜的聲明定義一個(gè)新的簡單的別名。方法是:在原來的聲明里逐步用別名替換一部分復(fù)雜聲明,如此循環(huán),把帶變量名的部分留到最后替換,得到的就是原聲明的最簡化版。例如以下函數(shù)指針數(shù)組int(*a[5])(int,char*);變量名為a,直接用一個(gè)新別名pFun替換a就可以了:

typedefint(*pFun)(int,char*);

原聲明的最簡化版:

pFuna[5];19192.1.4類型定義符typedef測(cè)試以下代碼,體驗(yàn)typedef帶來的簡化的便利性:#include<iostream>usingnamespacestd;typedefvoid(*pFun)(int,char*);voidprintChar(intlen,char*str){ for(inti=0;i<len;i++) cout<<str<<endl;}intmain(){ pFuna[5]; a[0]=printChar; a[0](2,"helloWorld"); return0;}

小結(jié)本節(jié)介紹了聯(lián)合、枚舉類型,都是用戶自定義類型。聯(lián)合類型允許多種數(shù)據(jù)類型共同占用內(nèi)存空間,使得一塊內(nèi)存空間根據(jù)需要按不同格式使用,或者用不同方式訪問同一數(shù)據(jù);枚舉類型也是一種自定義數(shù)據(jù)類

溫馨提示

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

評(píng)論

0/150

提交評(píng)論