C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第7章 自定義數(shù)據(jù)類型_第1頁(yè)
C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第7章 自定義數(shù)據(jù)類型_第2頁(yè)
C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第7章 自定義數(shù)據(jù)類型_第3頁(yè)
C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第7章 自定義數(shù)據(jù)類型_第4頁(yè)
C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第7章 自定義數(shù)據(jù)類型_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章自定義數(shù)據(jù)類型7.1結(jié)構(gòu)體類型7.2共用體7.3枚舉類型7.4用typedef聲明類型基本的數(shù)據(jù)類型:int、float、double、char、 bool、指針類型、引用類型用戶自定義數(shù)據(jù)類型:

數(shù)組 結(jié)構(gòu)體(structure)類型 共用體(union)類型 枚舉(enumeration)類型

類(class)類型有時(shí)需要將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)的整體,以供用戶方便地使用。這些組合在一個(gè)整體中的數(shù)據(jù)是互相聯(lián)系的。例如,一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、家庭地址等項(xiàng),都是這個(gè)學(xué)生的屬性。見(jiàn)圖7.1。 圖7.17.1結(jié)構(gòu)體類型

7.1.1結(jié)構(gòu)體概述利用結(jié)構(gòu)體將若干個(gè)類型不同的數(shù)據(jù)項(xiàng)組合在一起。它相當(dāng)于SQLServer中的記錄(record)。例如,定義一個(gè)學(xué)生的結(jié)構(gòu)體:structStudent

//聲明一個(gè)結(jié)構(gòu)體類型Student{

intnum;

//包括一個(gè)整型變量num

charname[20];

//包括一個(gè)字符數(shù)組name

charsex;

//包括一個(gè)字符變量sex

intage;

//包括一個(gè)整型變量age

floatscore;

//包括一個(gè)單精度型變量

charaddr[30];

//包括一個(gè)字符數(shù)組addr};

//最后有一個(gè)分號(hào)struct是聲明結(jié)構(gòu)體類型時(shí)所必須使用的關(guān)鍵字。Student是一個(gè)結(jié)構(gòu)體類型名,與int、char、float、double等一樣,可用來(lái)定義變量,只不過(guò)結(jié)構(gòu)體類型需要事先由用戶自己聲明。聲明一個(gè)結(jié)構(gòu)體類型的一般形式為:struct結(jié)構(gòu)體類型名{ 成員表列;};成員表列的聲明:類型名成員名;聲明結(jié)構(gòu)體類型的位置一般在文件的開(kāi)頭,在所有函數(shù)(包括main函數(shù))之前,以便本文件中所有的函數(shù)都能利用它來(lái)定義變量。當(dāng)然也可以在函數(shù)中聲明結(jié)構(gòu)體類型。前面只是指定了一種結(jié)構(gòu)體類型,它相當(dāng)于一個(gè)模型,但其中并無(wú)具體數(shù)據(jù),系統(tǒng)也不為之分配實(shí)際的內(nèi)存單元。為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類型的變量,并在其中存放具體的數(shù)據(jù)。1.定義結(jié)構(gòu)體類型變量的方法可以采取以下3種方法定義結(jié)構(gòu)體類型的變量。(1)先聲明結(jié)構(gòu)體類型再定義變量名如上面已定義了一個(gè)結(jié)構(gòu)體類型Student,可以用它來(lái)定義結(jié)構(gòu)體變量。如Studentstudent1,student2;7.1.2結(jié)構(gòu)體類型變量以上定義了student1和student2為結(jié)構(gòu)體類型Student的變量,即它們具有Student類型的結(jié)構(gòu)。如圖7.2所示。圖7.2(2)在聲明類型的同時(shí)定義變量structStudent{ intnum; charname[20]; charsex;

intage; floatscore; charaddr[30];}student1,student2;

定義的一般形式為:struct結(jié)構(gòu)體名{ 成員表列}變量名表列;(3)直接定義結(jié)構(gòu)體類型變量struct//結(jié)構(gòu)體類型名省略{ 成員表列}變量名表列;提倡使用先定義類型后定義變量的第(1)種方法。struct{

intnum; charname[20]; charsex;

intage; floatscore; charaddr[30];}student1,student2;說(shuō)明:(1)類型與變量是不同的概念,不要混淆。只能對(duì)結(jié)構(gòu)體變量中的成員賦值,而不能對(duì)結(jié)構(gòu)體類型賦值。在編譯時(shí),是不會(huì)為類型分配空間的,只為變量分配空間。(2)對(duì)結(jié)構(gòu)體中的成員,可以單獨(dú)使用,它的作用與地位相當(dāng)于普通變量。(3)成員也可以是一個(gè)結(jié)構(gòu)體變量。structDate//聲明一個(gè)結(jié)構(gòu)體類型Date{

intmonth;

intday;

intyear;};structStudent//聲明一個(gè)結(jié)構(gòu)體類型Student{

intnum; charname[20]; charsex;

intage; Datebirthday;

charaddr[30];}student1,student2;圖7.3(5)結(jié)構(gòu)體中的成員名可以與程序中的變量名相同,但二者沒(méi)有關(guān)系。例如,程序中可以另定義一個(gè)整型變量num,它與student中的num是兩回事,互不影響。Student的結(jié)構(gòu)見(jiàn)圖7.3所示。2.結(jié)構(gòu)體變量的初始化Studentstudent1={10001,"ZhangXin",'M',19,90.5,"Shanghai"};3.結(jié)構(gòu)體變量的引用(1)將一個(gè)結(jié)構(gòu)體變量的值賦給另一個(gè)具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。如:student1=student2;(2)引用結(jié)構(gòu)體變量中的一個(gè)成員的方式:

結(jié)構(gòu)體變量名.成員名 如:student1.num=1001;(3)如果成員本身也是一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)地找到最低一級(jí)的成員。如果想引用student1變量中的birthday成員中的month成員,則必須逐級(jí)引用:

student1.birthday.month(4)不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出。如:cout<<student1;只能對(duì)結(jié)構(gòu)體變量中的各個(gè)成員分別進(jìn)行輸入和輸出。(5)對(duì)結(jié)構(gòu)體變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算(根據(jù)其類型決定可以進(jìn)行的運(yùn)算種類)。 student2.score=student1.score; sum=student1.score+student2.score; student1.age++;//“.”運(yùn)算符的優(yōu)先級(jí)最高 ++student1.age;(6)可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址。如

cout<<&student1;

//輸出student1的首地址

cout<<&student1.age;

//輸出student1.age的地址結(jié)構(gòu)體變量的地址主要用作函數(shù)參數(shù),將結(jié)構(gòu)體變量的地址傳遞給形參。一個(gè)結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù)(如一個(gè)學(xué)生的學(xué)號(hào)、姓名、成績(jī)等數(shù)據(jù))。如果有10個(gè)學(xué)生的數(shù)據(jù)需要參加運(yùn)算,顯然應(yīng)該用數(shù)組,這就是結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組與以前介紹過(guò)的數(shù)值型數(shù)組的不同之處在于:每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù),它們都分別包括各個(gè)成員項(xiàng)。7.1.4結(jié)構(gòu)體數(shù)組1.定義結(jié)構(gòu)體數(shù)組和定義結(jié)構(gòu)體變量的方法相仿,定義結(jié)構(gòu)體數(shù)組時(shí)只需聲明其為數(shù)組即可。如structStudent//聲明結(jié)構(gòu)體類型Student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};Studentstu[3];//定義Student類型的數(shù)組stustructStudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3];struct

{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3];或也可以直接定義一個(gè)結(jié)構(gòu)體數(shù)組,如見(jiàn)圖7.4。數(shù)組各元素在內(nèi)存中連續(xù)存放,見(jiàn)圖7.5示意。圖7.4圖7.52.結(jié)構(gòu)體數(shù)組的初始化對(duì)結(jié)構(gòu)體數(shù)組可以初始化。如structStudent{intnum; charname[20]; charsex;

intage;

floatscore; charaddr[30];}sty[3]={{10101,"LiLin",'M',18,87.5,"BeijingRoad"},{10102,"ZhangFun",'M',19,99,"ShanghaiRoad"},{10104,"WangMin",'F',20,78.5,"ZhongshanRoad"}};定義數(shù)組stu時(shí),可以不指定元素個(gè)數(shù),寫成如下形式:

stu[]={{…},{…},{…}};數(shù)組的初始化也可以用以下形式:Studentstu[]={{…},{…},{…}};

//已事先聲明了結(jié)構(gòu)體類型Student通過(guò)指向結(jié)構(gòu)體變量的指針引用結(jié)構(gòu)體變量中的成員 形式:指針變量->成員名7.1.5指向結(jié)構(gòu)體變量的指針也就是說(shuō),以下3種形式等價(jià):①結(jié)構(gòu)體變量.成員名。如stu.num。②(*p).成員名。如(*p).num。③p->成員名。如p->num?!?>”稱為指向運(yùn)算符。2.用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體變量的指針構(gòu)成鏈表鏈表是一種常見(jiàn)的重要的數(shù)據(jù)結(jié)構(gòu)。下圖表示最簡(jiǎn)單的一種鏈表(單向鏈表)的結(jié)構(gòu)。鏈表有一個(gè)“頭指針”變量,圖中以head表示,它存放一個(gè)地址。該地址指向一個(gè)元素。鏈表中的每一個(gè)元素稱為“結(jié)點(diǎn)”,每個(gè)結(jié)點(diǎn)都應(yīng)包括兩個(gè)部分:一是用戶需要用的實(shí)際數(shù)據(jù),二是下一個(gè)結(jié)點(diǎn)的地址。鏈表中的各個(gè)結(jié)點(diǎn)不是通過(guò)new

和delete動(dòng)態(tài)建立和釋放。而是事先申請(qǐng)好的單元,但刪除某節(jié)點(diǎn)時(shí),不能釋放空間。靜態(tài)鏈表的建立鏈表中的各個(gè)結(jié)點(diǎn)通過(guò)new

和delete動(dòng)態(tài)建立和釋放。動(dòng)態(tài)鏈表的建立本章到此結(jié)束謝謝! 第3篇基于對(duì)象的程序設(shè)計(jì) 第8章類和對(duì)象 4學(xué)時(shí) 第9章關(guān)于類和對(duì)象的進(jìn)一步討論 6學(xué)時(shí) 第10章運(yùn)算符重載 (自學(xué)) 第4篇面向?qū)ο蟮某绦蛟O(shè)計(jì) 第11章繼承與派生 8學(xué)時(shí) 第12章多態(tài)性與虛函數(shù) 8學(xué)時(shí) 第13章輸入輸出流 (自學(xué)) 第14章C++工具 4學(xué)時(shí)如何學(xué)好C++程序設(shè)計(jì)?考核辦法綜合成績(jī):平時(shí)成績(jī)、期中考試成績(jī)、 期末考試成績(jī)不及格率:至少20%第1章C++的初步知識(shí)第2章數(shù)據(jù)類型與表達(dá)式第1篇

基本知識(shí)第1章C++的初步知識(shí)*1.1從C到C++*1.2最簡(jiǎn)單的C++程序1.3C++程序的構(gòu)成和書寫形式1.4C++程序的編寫和實(shí)現(xiàn)1.5關(guān)于C++上機(jī)實(shí)踐C語(yǔ)言產(chǎn)生于20世紀(jì)70年代,不是為初學(xué)者設(shè)計(jì)的,而是為計(jì)算機(jī)專業(yè)人員設(shè)計(jì)的。大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用C語(yǔ)言編寫的。 優(yōu)點(diǎn):功能豐富、表達(dá)能力強(qiáng)、使用靈活方便、應(yīng)用面廣、目標(biāo)程序效率高、可移植性好特點(diǎn):面向過(guò)程的結(jié)構(gòu)化和模塊化的語(yǔ)言

*1.1從C到C++C++是于20世紀(jì)80年代初在C語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)成功的。開(kāi)發(fā)較大規(guī)模的程序,提高軟件開(kāi)發(fā)的效率。

特點(diǎn):C++保留了C語(yǔ)言原有的所有優(yōu)點(diǎn),增加了面向?qū)ο蟮臋C(jī)制。C++是由C發(fā)展而來(lái)的,與C兼容。并在原來(lái)面向過(guò)程的機(jī)制基礎(chǔ)上,對(duì)C語(yǔ)言的功能做了不少擴(kuò)充。C++既可用于面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),不要把面向?qū)ο蠛兔嫦蜻^(guò)程對(duì)立起來(lái)。C++上機(jī)實(shí)踐

C++編譯系統(tǒng)有很多,如VisualC++、C++Builder等;無(wú)論在什么環(huán)境下編譯和運(yùn)行一個(gè)C++程序,應(yīng)當(dāng)掌握標(biāo)準(zhǔn)C++。應(yīng)當(dāng)能在不同的C++環(huán)境下運(yùn)行自己的程序,并且了解不同的C++編譯系統(tǒng)的特點(diǎn)和使用方法,在需要時(shí)能將自己的程序方便地移植到不同的平臺(tái)上。例:輸出一行字符:“ThisisaC++program.”。#include<iostream>//包含頭文件iostreamusingnamespacestd;//使用命名空間stdintmain(){

cout<<″ThisisaC++program.″; return0;}*1.2最簡(jiǎn)單的C++程序例1.2求a和b兩個(gè)數(shù)之和。#include<iostream>//預(yù)處理命令usingnamespacestd;//使用命名空間stdintmain()//主函數(shù)首部{//函數(shù)體開(kāi)始

inta,b,sum;//定義變量

cin>>a>>b;//輸入語(yǔ)句

sum=a+b;//賦值語(yǔ)句

cout<<″a+b=″<<sum<<endl;//輸出語(yǔ)句

return0;}

//函數(shù)結(jié)束“//使用命名空間std”是一個(gè)注釋,C++規(guī)定在一行中如果出現(xiàn)“//”,則從它開(kāi)始到本行末尾之間的全部?jī)?nèi)容都作為注釋。(思考)應(yīng)用函數(shù)調(diào)用的方法編寫程序?例1.3給出三個(gè)數(shù)a、b和c,求三個(gè)數(shù)中的最大數(shù)。例1.4包含類的C++程序。#include<iostream>usingnamespacestd;classStudent//聲明一個(gè)類,類名為Student{private://以下為類中的私有部分

intnum;//私有變量num

intscore;//私有變量scorepublic://以下為類中的公用部分

voidsetdata()//定義公用函數(shù)setdata

{cin>>num;//輸入num的值

cin>>score;//輸入score的值 }

voiddisplay()//定義公用函數(shù)display{cout<<″num=″<<num<<endl;//輸出num的值

cout<<″score=″<<score<<endl;//輸出score的值

}};//類的聲明結(jié)束Studentstud1,stud2;intmain()//主函數(shù)首部{ stud1.setdata(); //調(diào)用對(duì)象stud1的setdata函數(shù)

stud2.setdata(); //調(diào)用對(duì)象stud2的setdata函數(shù)

stud1.display();//調(diào)用對(duì)象stud1的display函數(shù)

stud2.display();//調(diào)用對(duì)象stud2的display函數(shù)

return0;}在一個(gè)類中包含兩種成員:數(shù)據(jù)和函數(shù)。在C++中把一組數(shù)據(jù)和有權(quán)調(diào)用這些數(shù)據(jù)的函數(shù)封裝在一起,組成一種稱為“類(class)”的數(shù)據(jù)結(jié)構(gòu)。類可以體現(xiàn)數(shù)據(jù)的封裝性和信息隱蔽。在大多數(shù)情況下,會(huì)把所有數(shù)據(jù)指定為私有,以實(shí)現(xiàn)信息隱蔽。而把函數(shù)指定為公有。VisualC++編寫C++程序的三種方式1、創(chuàng)建單個(gè)文件

2、創(chuàng)建工程(Win32ConsoleApplication)往工程里添加文件3、創(chuàng)建工作區(qū)往工作區(qū)中添加工程往工程里添加文件C++程序的結(jié)構(gòu)和書寫格式歸納如下:(1)一個(gè)C++程序可以由一個(gè)程序文件或多個(gè)程序文件構(gòu)成。在程序編譯時(shí),編譯系統(tǒng)分別對(duì)各個(gè)文件進(jìn)行編譯,因此,一個(gè)文件是一個(gè)編譯單元。1.3C++程序的構(gòu)成和書寫形式(2)在一個(gè)程序單位中,可以包括以下幾個(gè)部分:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論