C++語法之?dāng)?shù)據(jù)類型_第1頁
C++語法之?dāng)?shù)據(jù)類型_第2頁
C++語法之?dāng)?shù)據(jù)類型_第3頁
C++語法之?dāng)?shù)據(jù)類型_第4頁
C++語法之?dāng)?shù)據(jù)類型_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第2章 C+語法之?dāng)?shù)據(jù)類型計(jì)算機(jī)的作用無非就是存儲(chǔ)和計(jì)算,而存儲(chǔ)和計(jì)算都離不開數(shù)據(jù)格式,不同的數(shù)據(jù)格式意味著存儲(chǔ)和計(jì)算的方式不盡相同。本章是C+知識的開始篇章,將著重介紹C+的數(shù)據(jù)類型,讓讀者了解C+具有哪些數(shù)據(jù)類型。數(shù)據(jù)類型是構(gòu)成程序設(shè)計(jì)的基礎(chǔ),希望讀者能夠扎實(shí)掌握本章內(nèi)容,本章主要修行的要點(diǎn)如下。C+簡介:讓讀者能夠了解C+的過去和現(xiàn)今的情況。簡單變量:讀者能夠?qū)W會(huì)C+的簡單變量,如整型變量、浮點(diǎn)型變量等。算術(shù)運(yùn)算符:讀者能夠使用算術(shù)運(yùn)算符進(jìn)行簡單變量的數(shù)學(xué)運(yùn)算。枚舉、指針和數(shù)組:讀者將學(xué)會(huì)枚舉、指針和數(shù)組數(shù)據(jù)類型的定義和使用。字符串類型:讀者將學(xué)會(huì)string類和C風(fēng)格字符串。結(jié)構(gòu)體類型

2、和類類型:讀者將學(xué)會(huì)C+語言理論中最重要的兩種復(fù)合類型結(jié)構(gòu)體類型和類類型。2.1 C+發(fā)展歷史和相關(guān)背景 在Visual C+學(xué)習(xí)中,C+程序設(shè)計(jì)語言絕對是頑徒孫悟空,非常難馴服。但讀者也不用太擔(dān)心,唐僧沒有法力都能馴服孫悟空,我們也一樣可以做到,關(guān)鍵在于要讓C+帶上緊箍咒,這個(gè)緊箍咒就是牢牢抓住面向?qū)ο蟮谋举|(zhì)。 美國AT&T貝爾實(shí)驗(yàn)室的計(jì)算機(jī)專家Bjarne Stroustrup博士于20世紀(jì)80年代初期發(fā)明并實(shí)現(xiàn)了C+程序設(shè)計(jì)語言,最初的C+被稱作“C with Classes”,即帶類的C,其實(shí)原來的C也可以實(shí)現(xiàn)面向?qū)ο蟮木幊?,請讀者注意,面向?qū)ο髲谋举|(zhì)上來說不是某種編程語言的專

3、利,而僅僅是一種編程思想。2.2 常量和變量 在C+的數(shù)據(jù)中,按照數(shù)據(jù)是否能被賦值可以分為兩大類,即常量和變量。事實(shí)上,顧名思義,讀者可以更容易理解常量和變量,常量就是不能隨著程序的運(yùn)行改變值的數(shù)據(jù)符號,變量是可以隨著程序的運(yùn)行改變值的數(shù)據(jù)符號。常量在很多程序設(shè)計(jì)語言中都是必有的概念,為什么要有常量的概念出現(xiàn)呢?假設(shè)有這么一種情況,在程序中設(shè)定一個(gè)最大時(shí)間值1000,在整個(gè)程序項(xiàng)目中,這個(gè)最大值1000出現(xiàn)了500次,那么如果要將“1000”修改成為“1200”,手動(dòng)修改的話,就要修改500次,這是一件非常令人煩惱的事情。也許有聰明的讀者會(huì)認(rèn)為,可以用“查找全部替換”一次性將全部的“1000”

4、替換成“1200”啊,Oh,NO!這樣做的結(jié)果會(huì)非常非常糟糕,因?yàn)橛行?000”的值并不是表示“最大時(shí)間值”,這樣一刀切的辦法會(huì)導(dǎo)致無可挽回的惡果,甚至由于讀者不小心,將“2510002”(字符串,而非數(shù)字)中間的“1000”替換掉,變成“2512002”,再次溫馨提示,千萬不要這么做,必須使用常量定義以降低修改的工作量方為上策,如用MAXTIME來表示“1000”這個(gè)最大時(shí)間值常量。 存儲(chǔ)在計(jì)算機(jī)中的信息,都應(yīng)該是可以隨時(shí)讀取或改寫的,這就要求程序設(shè)計(jì)語言對計(jì)算機(jī)中的信息具有以下3個(gè)基本屬性: 信息數(shù)據(jù)存放的地方:存儲(chǔ)地址在哪。 要存儲(chǔ)的值:存儲(chǔ)的是什么。 信息的類型:存儲(chǔ)的格式是什么。

5、例如,定義一個(gè)表示我擁有的蘋果數(shù)量信息,可以通過以下代碼進(jìn)行定義: int MyApples ;/ 定義一個(gè)整型變量,表示我擁有的蘋果數(shù)目 MyApples = 7;/ 給該整型變量賦值為7,表示我現(xiàn)在擁有7個(gè)蘋果2.3 簡單變量的定義和使用 簡單變量是指變量中最基本的單元。廣義上的變量還包括數(shù)組變量、指針變量、結(jié)構(gòu)體變量和類對象,這些變量相對來說比較復(fù)雜,如結(jié)構(gòu)體變量是由多個(gè)簡單變量或結(jié)構(gòu)體組成,而類對象則更復(fù)雜,不僅包括多個(gè)其他任何類型變量,還可以包括函數(shù)。本節(jié)從簡單變量入手,慢慢地帶讀者了解全部的C+數(shù)據(jù)類型?!颈拘」?jié)示例參考:源代碼C02sizeofDataType】顧名思義,整型就是

6、整數(shù)類型,以代數(shù)的概念來說,就是:正整數(shù)、零和負(fù)整數(shù)。而計(jì)算機(jī)不能像代數(shù)中的整數(shù)一樣可以表示所有的整數(shù),因此C+中的整型類型只是所有整數(shù)集合的一個(gè)子集,也就是只能表示一部分整數(shù)。C+提供了幾種寬度不同的整型供開發(fā)者選擇,按照寬度排序有char、short、int和long,每種類型都有“有符號”和“無符號”兩種版本,也就是類似于整數(shù)有正整數(shù)和負(fù)整數(shù)之分,因此,C+整型就有8種可供用戶選擇。在Win32環(huán)境下(Windows操作系統(tǒng)32位處理器),不同類型的整型如表2.1所示。 浮點(diǎn)類型顧名思義就是小數(shù)點(diǎn)能夠自由浮動(dòng)的數(shù)據(jù)類型,它主要有3種,即float、double和long double。浮

7、點(diǎn)類型對于字長的要求如表2.2所示。 浮點(diǎn)型的變量讀者可以簡單地理解為具有小數(shù)點(diǎn)的變量類型,而整型變量則對應(yīng)于初中代數(shù)中的整數(shù),整數(shù)當(dāng)然就包括正整數(shù)、0和負(fù)整數(shù)。在此需要提醒讀者的是,需要了解各種數(shù)據(jù)類型,但不要花太多時(shí)間去鉆研這些小問題,畢竟我們需要的是掌握程序設(shè)計(jì)的方法,而不是做理論研究。就如唐三藏取西經(jīng),沿途收拾妖怪只是為了自己開路,而不是要將全世界的妖怪都消滅光才算數(shù)。 【本小節(jié)示例參考:源代碼C02boolCompute】 布爾類型這個(gè)名字比較奇怪,它來源于英國數(shù)學(xué)家布爾,該類型的變量取值不像整型一樣,可以取0、1、2、3等多個(gè)值,也不像浮點(diǎn)型一樣可以取不連續(xù)的值,它的取值就只有兩個(gè)

8、,即true或false。布爾類型常用于判斷語句中用于判斷該執(zhí)行哪個(gè)代碼段,布爾變量可以定義為: bool bReally = true ;/ 定義一個(gè)布爾型變量,并初始化為true bool bTrue = false ;/ 定義一個(gè)布爾型變量,并初始化為true2.4 算術(shù)運(yùn)算符的基本操作【本節(jié)示例參考:源代碼C02mathCompute】讀者可能對數(shù)學(xué)中的各種運(yùn)算符號記憶猶新,如果不會(huì)基本運(yùn)算,估計(jì)本節(jié)沒有辦法繼續(xù)下去哦,至少加減乘除總是一輩子都不會(huì)忘記的,在計(jì)算機(jī)中也同樣有各種算術(shù)運(yùn)算符,如果在程序中有如下的語句:int apples = 3+9 ;/ 定義變量apples,初始化為3

9、+9的運(yùn)算結(jié)果在這個(gè)語句中,“3”和“9”是操作數(shù),“+”符號是一個(gè)算術(shù)運(yùn)算符,“3+9”是一個(gè)運(yùn)算表達(dá)式,其值為“12”。C+提供的算術(shù)運(yùn)算符有5種:“+”:加運(yùn)算符。“-”:減運(yùn)算符?!?”:乘運(yùn)算符。“/”:除運(yùn)算符。“%”:取模運(yùn)算符。2.5 枚舉、指針和數(shù)組 C+除了提供一些基本的數(shù)據(jù)類型外,還提供了一些其他額外的數(shù)據(jù)類型,如枚舉、指針和數(shù)組類型,以及將在后面章節(jié)講解的結(jié)構(gòu)體和類類型,這些統(tǒng)稱為復(fù)合數(shù)據(jù)類型。復(fù)合數(shù)據(jù)類型是由其他數(shù)據(jù)類型組合,或以基本數(shù)據(jù)類型為基礎(chǔ)衍生出來的類型。前文已經(jīng)介紹了常量類型,C+提供了一個(gè)enum的關(guān)鍵字用來創(chuàng)建枚舉類型,實(shí)質(zhì)上,枚舉類型是常量類型的一種衍

10、生類型,常量類型可以看作只有一個(gè)取值的枚舉。假設(shè)要設(shè)計(jì)一個(gè)游戲程序,定義一個(gè)游戲角色移動(dòng)的方向,可以定義枚舉類型如下:enum direction east , south ,west ,north;/ 定義枚舉類型,并規(guī)定了4個(gè)取值該語句定義了一個(gè)枚舉類型direction,這個(gè)枚舉類型可以表示東、南、西和北4個(gè)方向。對枚舉類型的定義,不僅僅是定義了枚舉的含義,而且定義了枚舉變量的賦值類型:enum direction east , south ,west ,north;/ 定義枚舉類型,該枚舉類型只能取4個(gè)值direction myDirection;/ 定義direction枚舉類型的變

11、量myDirectionmyDirection = east;/ 將myDirection變量賦值為eastcoutmyDirectionendl;/ 輸出myDirection變量的值 【本小節(jié)示例參考:源代碼C02pointer】 如前文所述,為了將數(shù)據(jù)信息記錄在計(jì)算機(jī)中,并可以隨時(shí)修改,程序必須記錄以下3個(gè)基本屬性: 信息存放的地址,即這個(gè)變量住哪?如某個(gè)地址123654。 變量存儲(chǔ)的值,即這個(gè)變量是多少?如58。 變量的類型,即這個(gè)變量是什么類型的?如int整型。 一個(gè)變量的基本信息,如圖2.4所示?!颈拘」?jié)示例參考:源代碼C02array】數(shù)組類型是高級程序設(shè)計(jì)語言中最常用的復(fù)合數(shù)據(jù)

12、類型,在多項(xiàng)式或矩陣應(yīng)用等科學(xué)計(jì)算中經(jīng)常被使用。數(shù)組類型是一個(gè)由簡單數(shù)據(jù)類型或復(fù)合數(shù)據(jù)類型組成的復(fù)合數(shù)據(jù)類型,因此組成數(shù)組的基本元素可以是簡單的數(shù)據(jù)類型,也可以就是數(shù)組本身。例如,數(shù)組可以存放30個(gè)整型的值,用來表示一個(gè)班30個(gè)學(xué)生的語文考試成績,數(shù)組的聲明應(yīng)該指出:數(shù)組中每個(gè)元素的類型:如必須指明該數(shù)據(jù)中的元素類型為整型int。數(shù)組名:必須給該數(shù)組(復(fù)合數(shù)據(jù)類型變量)命名,如命名為Chinese。數(shù)組的元素?cái)?shù)目:如需要存放30個(gè)學(xué)生的語文成績,則元素?cái)?shù)目設(shè)定為30。例如可以聲明一個(gè)數(shù)組,用來存放一個(gè)班30個(gè)學(xué)生的語文考試成績,則定義代碼如下:int Chinese30 ;/ 定義一個(gè)整型的具

13、有30個(gè)元素的數(shù)組2.6 string類和C風(fēng)格字符串 顧名思義,字符串就是由字符組成的串,也就是由多個(gè)字符組成的變量,在C語言和C+語言中都分別有自己的字符串表示方式。本節(jié)就講解這兩種語言的字符串定義和使用的方式。字符串是什么呢?就是字符組成的序列,字符并沒有限定什么字符,基本上ASCII碼的字符都可以當(dāng)作字符串中的序列元素,如“abc”、“c3”或“123”都可以。在前文中講解了數(shù)組的使用,那么字符串也可以使用數(shù)組來表示:char name10 ;/ 定義一個(gè)具有10個(gè)元素的字符型的數(shù)組該行代碼定義了一個(gè)具有10個(gè)字符類型的元素的數(shù)組,也可以說是由10個(gè)字符組成的字符串,并用這個(gè)字符串來表

14、示一個(gè)名字,使用字符數(shù)組來表示字符串稱為“C風(fēng)格字符串”。但是使用字符數(shù)組來表示字符串有很多不方便的地方:修改困難。如前文所述,name是一個(gè)地址常量,因此不能直接對其賦值,因此name的初始化和賦值都要通過逐個(gè)字符賦值操作。長度限制。name數(shù)組的長度是10,也就意味著name字符串最大只能表示10個(gè)字符的名字,而且最后一個(gè)元素還要用“0”字符數(shù)組結(jié)束標(biāo)記,因此真正用于存儲(chǔ)名字的有效字符只剩下9位。粒度太小,不直觀。對于軟件開發(fā),往往需要直接對字符串進(jìn)行賦值或者修改,而數(shù)組型表示的字符串則要對數(shù)組的每個(gè)元素進(jìn)行修改,粒度太小,增加了軟件開發(fā)的工作量。 【本小節(jié)示例參考:源代碼C02strin

15、gUse】 C+是基于C的基礎(chǔ)上發(fā)展而來的,因此C+也支持C風(fēng)格字符串的使用,此外,C+還引入了string類的概念,該類是C+標(biāo)準(zhǔn)類,位于std名稱空間內(nèi)(只要是標(biāo)準(zhǔn)類或標(biāo)準(zhǔn)對象,都位于std名稱空間內(nèi)),string類提供了豐富的接口,如使用C風(fēng)格的字符串,即使用字符數(shù)組的方式表示字符串,則無法直接查看該字符串的長度,只有查看源碼中定義字符數(shù)組的容量,或者采用前文講述的sizeof的方式“巧妙地”計(jì)算出數(shù)組的長度,再或者是逐個(gè)檢測字符數(shù)組元素,并逐個(gè)數(shù)數(shù),直到找到最后一個(gè)元素“0”為止。2.7 數(shù)據(jù)類型是應(yīng)用軟件的細(xì)胞數(shù)據(jù)類型在程序設(shè)計(jì)中是非常重要的,不管是面向過程的程序設(shè)計(jì)語言還是面向?qū)?/p>

16、象的程序設(shè)計(jì)語言。在面向過程的程序設(shè)計(jì)語言中,不僅僅是簡單變量,主要還依賴于類的定義。類的對象實(shí)質(zhì)上也是一種數(shù)據(jù)類型的變量,稱為類類型。數(shù)據(jù)類型可以說是應(yīng)用程序的細(xì)胞,計(jì)算機(jī)的實(shí)質(zhì)是計(jì)算和存儲(chǔ),這兩個(gè)操作都離不開數(shù)據(jù)對象。前文已經(jīng)給各位讀者介紹了基本數(shù)據(jù)類型,簡單的變量可以看作是應(yīng)用程序的簡單細(xì)胞,而接下來的內(nèi)容是結(jié)構(gòu)體類型和類類型,這兩種類型是簡單細(xì)胞組成的“復(fù)雜細(xì)胞”,當(dāng)然,“復(fù)雜細(xì)胞”也可以由“較小的復(fù)雜細(xì)胞”組成,也就是說,結(jié)構(gòu)體和類類型也可以由較小的結(jié)構(gòu)體變量或類對象組成。2.8 結(jié)構(gòu)體類型【本小節(jié)示例參考:源代碼C02structUse】如果讀者學(xué)過數(shù)據(jù)結(jié)構(gòu),那么對結(jié)構(gòu)體肯定是非常

17、熟悉的,當(dāng)然,如果痛恨數(shù)據(jù)結(jié)構(gòu),估計(jì)對結(jié)構(gòu)體也夠頭疼的了。的確,結(jié)構(gòu)體很麻煩,特別是帶有指針的結(jié)構(gòu)體,進(jìn)而組成樹狀或圖狀的數(shù)據(jù)結(jié)構(gòu)。不過請讀者放心,本書不研究這些,只需要掌握最基礎(chǔ)的且是最實(shí)用的部分即可。假設(shè)要存儲(chǔ)一個(gè)學(xué)生的信息,需要記錄的學(xué)生信息由學(xué)生秘書整理好一張學(xué)生信息表,如表2.5所示。2.9 “類”類型 “類”類型的定義和結(jié)構(gòu)體類型的定義是極為類似的,可以這么說,C+中的結(jié)構(gòu)體類型已經(jīng)和C語言的結(jié)構(gòu)體類型截然不同,C+中的結(jié)構(gòu)體類型是地地道道的類類型。類的定義的詳細(xì)內(nèi)容將在面向?qū)ο笙嚓P(guān)章節(jié)介紹?!邦悺鳖愋团c“double”類型、“int”類型或“struct”類型的地位是一樣的,都是

18、一種“數(shù)據(jù)類型”?!颈拘」?jié)示例參考:源代碼C02classUse】假設(shè)前文所提到的學(xué)生信息要用到類來實(shí)現(xiàn),即把一個(gè)具體的學(xué)生(人)看成一個(gè)對象,而把學(xué)生(這類人)看成一個(gè)類,那么可以定義為如代碼示例2.9所示,這里的代碼除了將struct變更為class外,還多了一些訪問控制符,如private和public,以及多了兩個(gè)類的成員函數(shù)?!颈拘」?jié)示例參考:源代碼C02classUse_Right】上一節(jié)的類類型定義并沒有通過編譯,原因就在于沒有實(shí)現(xiàn)相關(guān)訪問私有數(shù)據(jù)成員的功能,因此,不得不將代碼加以修正,以避免main()函數(shù)直接訪問student類對象的私有成員。修正后的代碼如代碼示例2.11所示,該代碼相比以前的實(shí)例新增的功能是,可以讓類的私有數(shù)據(jù)成員通過構(gòu)造函數(shù)來初始化。2.10 小結(jié)本章介紹了各種數(shù)據(jù)類型,是C+程序設(shè)計(jì)的入門章節(jié),數(shù)據(jù)類

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論