版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、,自定義數(shù)據(jù)類型,思考:請大家定義一個學生變量,能夠描述你的姓名、學號、宿舍地址、聯(lián)系電話、出生 年月。,在前面章節(jié)里所使用的數(shù)據(jù)(整型、字符、浮點型)是C+預先定義的基本數(shù)據(jù)類型,但是在有些時候,僅用這些基本數(shù)據(jù)很難描述清楚客觀世界。 在程序開發(fā)過程中,經(jīng)常遇到要處理的對象用C+預先定義的基本數(shù)據(jù)類型不能全面描述的情況。 C+允許我們自己定義數(shù)據(jù)類型,通過自定義數(shù)據(jù)類型來更好的描述客觀世界 。,結構,C+允許程序員使用結構這種自定義的數(shù)據(jù)類型來解決這個矛盾。 通過結構,可以將C+的基本數(shù)據(jù)類型組合起來形成一個有機的整體來描述具體的對象。不論要描述的對象有多么復雜,只需要把它的屬性抽象出來,然
2、后用C+的基本數(shù)據(jù)類型來描述,就可以把這個對象很好地描述清楚。,結構的定義,結構定義的一般形式是: struct 結構名 數(shù)據(jù)類型成員名1; 數(shù)據(jù)類型成員名2; 數(shù)據(jù)類型成員名n; ;,前面提到的可以用于描述學生信息的結構定義如下: struct Student intnID; charszName20; charszAddr100; char szBirthday10; charszPhone15; floatfScore; ;/注意,“;”表示結構定義結束。,在定義結構的成員時,成員的數(shù)據(jù)類型可以是任何一個C+的基本數(shù)據(jù)類型,或者是自定義的數(shù)據(jù)類型。 也就是說結構的成員可以是另外一個結構或
3、者其他復雜的自定義的數(shù)據(jù)類型。通過這樣的組合關系,C+可以用結構描述非常復雜的數(shù)據(jù)對象。 在定義結構的成員時,成員的命名規(guī)則和普通變量的命名規(guī)則是一樣的。,值得注意的是,C+把struct關鍵字描述的內(nèi)容當作了一種數(shù)據(jù)類型,當用struct關鍵字定義一個結構時,C+不會為這個結構分配內(nèi)存。 只有當用這種數(shù)據(jù)類型定義了變量時,C+才會為這個變量分配內(nèi)存。,結構的成員也可以是另外一個結構變量。如在前面關于學生基本信息的定義,可以用一個結構來定義學生的出生日期,如: struct Date/定義表示日期的結構 int nYear; int nMon; int nDay; ;,struct Stude
4、nt1 intnID;/整型成員 char szName20; /字符型成員 /用結構Date定義的結構變量來表示出生日期 Date dtBirthday; char szAddr100;/字符型成員 char szPhone15;/字符型成員 float fScore;/浮點型成員 ;,使用結構,定義了結構之后,就可以用該結構定義相應的結構變量,C+會為這個結構變量分配內(nèi)存。例如,前面已經(jīng)定義了Student結構,現(xiàn)在可以用如下的方式定義結構變量: Stucent s; 現(xiàn)在,C+已經(jīng)為結構變量s分配了空間,但由于沒有初始化s,s的各成員的值是隨機的。初始化結構變量s可以有兩種方法:,結構變
5、量初始化,一種方法是在定義結構變量的同時進行初始化,如: Student s=1,李明,1989-10-15,解放路號,83647526,93.5; 另一種方法是在定義了結構變量之后,通過訪問結構成員的方法給結構成員賦初值。C+提供了點操作符“.”來訪問結構成員,可以通過“結構變量名.成員名”的方式來讀取結構成員的值或者為結構成員賦值。,/*例17-1 定義和使用結構*/ struct Student intnID; charszName20; charszAddr100; charszPhone15; floatfScore; ; void main() Student s; s.nID =
6、 1; strcpy(s.szName,李明); strcpy(s.szAddr,解放路號); strcpy(s.szPhone,83647526); s.fScore = 93.5; cout學生的學號是:s.nIDendl; cout學生的姓名是:s.szNameendl; cout學生的住址是:s.szAddrendl; cout學生的聯(lián)系電話是:s.szPhoneendl; cout學生的入學成績是:s.fScoreendl; ,對于Student1這樣的復雜結構,也可以采用上面的兩種方法初始化結構變量。如: Student1 s1=1,李明,1984,10,15, “解放路號,836
7、47526,93.5; 或者: Student1 s1;s1.nID = 1; strcpy(s1.szName,李明); s1.dtBirthday.nYear = 1984; s1.dtBirthday.nMon = 10; s1.dtBirthday.nDay = 15; strcpy(s.szAddr,解放路號); strcpy(s.szPhone,83647526); s.fScore = 93.5;,同一個結構定義的結構變量之間是可以相互賦值的。如: student s=1,李明,1984-10-15,解放路號,83647526,93.5; student s2 = s; 結構變量
8、s2的各個成員和結構變量s的各個成員的值一樣。輸出s2成員的值: cout“學生的學號是:”s2.nIDendl; cout“姓名是:s2.szNameendl; cout“出生日期是:”s2.szBirthdayendl; cout“住址是:s2.szAddrendl; cout“聯(lián)系電話是:s2.szPhoneendl; cout“入學成績是:s2.fScoreendl;,結構與指針,當用結構定義結構變量后,C+會為該結構變量分配內(nèi)存。既然結構變量有地址,自然可以將這個結構變量的地址賦給結構指針,然后通過指針來訪問結構成員。 在C+中,用結構指針訪問結構成員,需要用到箭頭操作符“-”。即采
9、用指針變量-成員名 的方式訪問結構成員。下面的例子展示了使用結構指針訪問結構成員。,/*例17-2 使用指針訪問結構成員*/ struct Student intnID; charszName20; char szBirthday15; charszAddr100; charszPhone15; floatfScore; ; void main() Student s; Student *ps; ps = ,strcpy(ps-szAddr,解放路號); strcpy(ps-szPhone,83647526); ps-fScore = 93.5; coutnIDszNameszBirthday
10、szAddrszPhonefScoreendl; ,注意:使用指針ps訪問結構成員時,必須使用需要使用箭頭操作符 “-”。 如果要動態(tài)創(chuàng)建一個結構變量,也需要使用結構指針,如: Student *ps = new Student; 在這條語句里,使用了new關鍵字在堆里動態(tài)創(chuàng)建了一個結構變量,并通過指針指向這個結構變量,然后可以使用指針變量-成員名的方式訪問這個在堆空間里的結構變量的成員,如:,ps-nID = 1; strcpy(ps-szName,李明); 對于動態(tài)分配的空間,在使用完后,需要用delete手動釋放所分配的空間: delete ps;,結構與數(shù)組,前面已經(jīng)定義了studen
11、t結構,可以描述一個學生的信息。現(xiàn)在描述一個班的學生檔案用于學習管理系統(tǒng)開發(fā)。 這時,可以用結構數(shù)組來描述這個群體。 和C+的基本數(shù)據(jù)類型一樣,結構作為一種數(shù)據(jù)類型也可以用來定義數(shù)組。結構數(shù)組的每一個元素都是一個結構類型的數(shù)據(jù)。,結構數(shù)組定義,定義結構數(shù)組的一般形式是: 結構名 數(shù)組名數(shù)組長度 如:Student s5; /定義一個包含5個元素的數(shù)組,每個數(shù)組元素都是Student型的結構變量。 定義好結構數(shù)組后,可以用“.”操作符訪問數(shù)組每個元素的成員的方法給結構數(shù)組賦初值,如: s0.nID = 1; 也可在定義結構數(shù)組的同時,給結構數(shù)組的每一個元素賦初值,如:,Student s5 =
12、1,李明,1984-10-15, 解放路號,83647526,93.5, 2,張強,1984-07-12,凱旋路號, 83568971,82.0, 3,王雨,1984-09-25,德勝路號, 83836541,96.5, 4,趙新,1984-02-27,和平路號, 83742349,87.5, 5,孫剛,1984-12-16,東大街號, 83536382,89.0;,用結構數(shù)組來描述一類數(shù)據(jù)后,可以用循環(huán)等方法方便的對這些數(shù)據(jù)進行處理。 /*例17-3 結構數(shù)組使用舉例*/ struct Student intnID; charszName20; char szBirthday15; char
13、szAddr100; charszPhone15; floatfScore; ;,void main() floatfAverage ; float fSum = 0.0; /下面再定義結構數(shù)組的同時給每個數(shù)組元數(shù)賦初值 Student s5 = 1,李明,1984-10-15,解放路號,83647526,93.5, 2,張強,1984-07-12,凱旋路號,83568971,82.0, 3,王雨,1984-09-25,德勝路號,83836541,96.5, 4,趙新,1984-02-27,和平路號,83742349,87.5, 5,孫剛,1984-12-16,東大街號,83536382,89
14、.0 ;,for(int i=0;i5;i+) cout“學生的學號是:”si.nIDendl; cout學生的姓名是:si.szNameendl; cout“出生日期是:”si.szBirthdayendl; cout學生的住址是:si.szAddrendl; cout“聯(lián)系電話是:”si.szPhoneendl; cout“學生的入學成績是:”si.fScoreendl; coutendl; fSum += si.fScore; fAverage = fSum / 5; cout所有學生的總成績是:fSumendl; cout所有學生的平均成績是:fAverageendl; ,結構與函數(shù),
15、定義一個函數(shù),然后將要打印的結構變量作為參數(shù)傳遞給函數(shù),由函數(shù)處理打印事務。將前面的班級學生的基本信息打印顯示到屏幕上。 結構可以作為函數(shù)的參數(shù),也可以讓函數(shù)返回一個結構變量。 結構作為函數(shù)的參數(shù)時,也可以按照值傳遞、指針傳遞和引用傳遞的方式進行參數(shù)傳遞。,/*例17-4 結構作為函數(shù)的參數(shù)*/ #include #include using namespace std; struct Student intnID; charszName20; char szBirthday15; charszAddr100; charszPhone15; floatfScore; ; void PrintI
16、nfoByValue(Student s); void PrintInfoByPointer(Student *ps); void PrintInfoByRef(Student ,void main() inti; Student s5 = /給s0賦值 1,“李明”,“1984-10-15”,“解放路10號,83647526,93.5, /給s1賦值 2,張強,1984-07-12,凱旋路11號,83568971,82.0, /給s2賦值 3,王雨,1984-09-25,德勝路12號,83836541,96.5, /給s3賦值 4,趙新,1984-02-27“,和平路15號,83742349
17、,87.5, /給s4賦值 5,孫剛,1984-12-16“,東大街16號,83536382,89.0 ;,cout結構變量傳值調(diào)用endl; for(i=0;i5;i+) PrintInfoByValue (si); cout結構變量指針傳遞調(diào)用endl; for(i=0;i5;i+) PrintInfoByPointer( ,void PrintInfoByValue(Student s) cout學生的學號是:s.nIDendl; cout學生的姓名是:s.szNameendl; cout“學生的出生日期是:”s.szBirthdayendl; cout學生的住址是:s.szAddren
18、dl; cout學生的聯(lián)系電話是:s.szPhoneendl; cout學生的入學成績是:s.fScoreendl; coutendl; ,void PrintInfoByPointer(Student *ps) /指針傳遞參數(shù) coutnIDszNameszBirthdayszAddrszPhonefScoreendl; coutendl; ,void PrintInfoByRef(Student ,思考:修改以上程序,求出成績最高分。,/*例17-5 函數(shù)返回結構,求最大值*/ #include #include using namespace std; struct Student intnID; charszName20; char szBirthday15; charszAddr100; charszPhone15; floatfScore; ;,voidPrintInfoByPointer(Student *ps); Student G
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓班家長聯(lián)系制度
- 英語培訓班辦學規(guī)章制度
- 舞蹈老師培訓制度
- 專注力培訓機構管理制度
- 物流公司專項培訓制度
- 英語培訓學校收費制度
- 53住院醫(yī)師培訓制度
- 旋挖培訓管理制度及流程
- 兒童培訓機構補課制度
- 安全培訓教育實行制度
- 霧化吸入操作教學課件
- 2025年小學圖書館自查報告
- 【語文】廣東省佛山市羅行小學一年級上冊期末復習試卷
- 2025年醫(yī)療器械注冊代理協(xié)議
- 廣西壯族自治區(qū)職教高考英語學科聯(lián)考卷(12月份)和參考答案解析
- 新疆三校生考試題及答案
- 2026年《必背60題》腫瘤內(nèi)科醫(yī)師高頻面試題包含答案
- 2025新疆亞新煤層氣投資開發(fā)(集團)有限責任公司第三批選聘/招聘筆試歷年參考題庫附帶答案詳解
- 圍手術期心肌梗塞的護理
- 超市門口鑰匙管理制度
- 代貼現(xiàn)服務合同范本
評論
0/150
提交評論