版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C++語言程序設計(湯亞玲胡增濤)第1章
緒論.ppt第2章
C++程序設計基礎.ppt第3章
函數.ppt第4章
類與對象.ppt第5章
數據的共享與保護.ppt第6章
數組、指針與字符串.ppt第7章
繼承與派生.ppt第8章
多態(tài)性.ppt第9章
流類庫與輸入輸出.ppt第10章
異常處理PPT.ppt全套可編輯PPT幻燈片課件(共10章)第1章緒論1.1C++簡介 1.2面向對象與面向過程1.3C++對面向對象的支持1.4C++的新特性1.5小結1.1C++簡介 1.C語言是1972年由美國貝爾實驗室的D.M.Ritchie所開發(fā),采用結構化編程方法,遵從自頂向下的原則。C語言明顯優(yōu)于其它高級語言,但在編寫大型程序時,C語言仍面臨著挑戰(zhàn)。2.20世紀80年代初,在美國貝爾實驗室誕生了C++(plusplus)語言,它由BjarneStroustrup博士主導,在C語言基礎上設計開發(fā)的一門新的語言。3.C++一經推出獲得了很大的成功,從很多方面大大提高了程序設計的效率,轉變著程序設計者的編程理念。4.在計算機科學中,C++仍被稱為C語言的上層結構。它最后得名于C語言中的“++”操作符(其對變量的值進行遞增)。這個名字象征著源自于C語言變化的自然演進。5.C++相對于C語言一個很重要的改進,就是支持面向對象編程模式,由此而產生了一系列新的特性。1.2面向對象與面向過程簡而言之,面向過程的核心思想是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個個依次調用。而面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在解決整個問題的步驟中與行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟:(1)開始游戲(2)黑子先走(3)繪制畫面(4)判斷輸贏(5)輪到白子(6)繪制畫面(7)判斷輸贏(8)返回步驟2(9)輸出最后結果把上面每個步驟用分別的函數來實現,問題就解決了。而面向對象的設計則是從另外的思路來解決問題。整個五子棋系統(tǒng)分為:(1)黑白雙方,這兩方的行為相同。(2)棋盤系統(tǒng),負責繪制畫面。(3)規(guī)則系統(tǒng),負責判定諸如犯規(guī)、輸贏等。第一類對象(玩家對象,黑白雙方)負責接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化負責在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定。顯然,面向對象是以概念來劃分問題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設計中,分散在了總步驟中,很可能出現不同的繪制版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統(tǒng)一。1.3C++對面向對象的支持C++既支持面向過程,又支持面向對象,面向過程的設計思想在處理一些簡單性問題的求解上是可取的,譬如一些單純的、小規(guī)模的數值計算問題,C語言或者C++都可以勝任。但對于較為復雜的大型軟件的設計和開發(fā),面向對象體現出來不可比擬的優(yōu)勢。具體來說,C++通過支持一下一些面向對象的核心機制實現了分析、設計、和求解的高效率。1抽象性抽象性是指將具有一致的數據結構和行為的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但一般與具體的應用有關。2繼承性繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關系。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行繼承,把這個已經存在的類所定義的特性繼承為自己的特性,并加入若干新的內容。3多態(tài)性多態(tài)性是指相同函數名的函數、過程可作用于多種類型的對象上并獲得不同的結果。或者說不同的對象,收到同一消息可以產生不同的結果,這種現象稱為多態(tài)性。多態(tài)性允許每個對象以適合自身的方式去響應共同的消息。1.4 C++的新特性C++語言的主要特點表現在兩個方面,一是盡量兼容C,二是支持面向對象的方法。它延續(xù)了C的簡潔、高效的接近匯編語言等特點,對C的類型系統(tǒng)進行了改革的擴充,因此C++比C更安全,C++的編譯系統(tǒng)能檢查出更多的類型錯誤。另外,由于C語言的廣泛使用,因而極大的促進了C++的普及和推廣。C++對C的“增強”,主要表現在一下一些方面:(1)類型檢查更為嚴格在C++中,類型檢查不僅延續(xù)了C中默認的低精度數據類型向高精度數據類型自動轉換,支持多種形式的強制類型轉換,以及多種不同類型指針的一致性檢查;并且在通過賦值兼容規(guī)則,多態(tài)等多種形式支持家族類庫中多個不同類型的兼容性,如果違背了這些規(guī)則,編譯系統(tǒng)會做出警告或者錯誤的處理結果。(2)常類型常類型是C++中對于共享數據的一種保護機制,是指使用類型修飾符const說明的類型。常類型的變量或對象的值是不能被更新的;因此,定義或說明常類型時必須進行初始化。常類型的作用類似于C語言中常量定義,在C中是用宏定義形式:
#define常量數值
C++中,對于共享數據的保護的范圍擴充到多個范疇,包括對基本數據類型的保護,以及常對象、常引用、常類成員等,其定義的基本形式是:
const類型符標識符名;(3)增加了泛型編程的機制(Template)泛型編程最初誕生于C++中,由AlexanderStepanov和DavidMusser創(chuàng)立。目的是為了實現C++的STL(標準模板庫)。其語言支持機制就是模板(Templates)。模板的本質其實很簡單:參數化類型。意思是,把一個原本特定于某個類型的算法或類當中的類型信息抽掉,抽出來做成模板參數T。泛型編程的代表作品STL是一種高效、泛型、可交互操作的軟件組件。STL以迭代器(Iterators)和容器(Containers)為基礎,是一種泛型算法(GenericAlgorithms)庫,容器的存在使這些算法有東西可以操作。STL包含各種泛型算法(algorithms)、泛型迭代器(iterators)、泛型容器(containers)以及函數對象(functionobjects)。STL并非只是一些有用組件的集合,它是描述軟件組件抽象需求條件的一個正規(guī)而有條理的架構。(4)增加了異常處理異常處理,是編程語言或計算機硬件里的一種機制,用于處理軟件或信息系統(tǒng)中出現的異常狀況(即超出程序正常執(zhí)行流程的某些特殊條件)。通過異常處理,我們可以對用戶在程序中的非法輸入或者程序執(zhí)行時的意外情形進行控制和提示,以防程序崩潰。(5)增加了運算符重載
C++的另一個重大特性就是重載(overload),通過重載可以把功能相似的幾個函數合為一個,使得程序更加簡潔、高效。在C++中不止函數可以重載,運算符也可以重載,運算符重載其最根本的出發(fā)點是擴展已有運算符的運算功能,能處理自定義數據類型。而且由于一般數據類型間的運算符沒有重載的必要,所以運算符重載主要是面向對象之間的。(6)增加了標準模板庫(STL)
STL(StandardTemplateLibrary),即標準模板庫,是一個具有工業(yè)強度的,高效的C++程序庫。它被容納于C++標準程序庫(C++StandardLibrary)中,是ANSI/ISOC++標準中最新的,也是極具革命性的一部分。該庫包含了諸多在計算機科學領域里所常用的基本數據結構和基本算法。為廣大C++程序員們提供了一個可擴展的應用框架,高度體現了軟件的可復用性。2.5自定義數據類型定義聯(lián)合體的語法形式如下:union共用體類型名{成員表列};例如:unionmix_t{longl;struct{shorthi;shortlo;}s;charc[4];}mix;第2章C++程序設計基礎2.1認識C++程序2.2基本數據類型和表達式2.3數據的輸入與輸出2.4基本控制結構2.5自定義數據類型2.6小結2.1認識C++程序2.1.1C++程序實例【例2.1】一個簡單的C++程序#include<iostream>usingnamespacestd;//使用標準名空間voidmain(void){cout<<″HelloWorld!″<<endl;cout<<″WelcometoCPlusPlus!″<<endl;}運行結果:HelloWorld!WelcometoCPlusPlus!2.1認識C++程序2.1.2字符集字符集又稱“物理字符集”,是構成C++程序的基本元素,一個C++源程序在編譯成目標程序時以一個個的字符序列的形式被編譯器程序讀取并映射為編譯時的“源字符集”。C++源程序中除了字符(串)類型的數據外,其他所有字符都必須由字符集中的字符構成。C++語言的字符集主要由下述幾類字符構成:2.1認識C++程序2.1.2字符集空格符:空格鍵,制表符,換行符,注釋符(注釋內容作為空格處理)英文字符:a...z,A...Z數字字符:0...9特殊字符:_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " '2.1認識C++程序2.1.3詞法記號任何高級語言編寫的源程序都是由一個個單詞構成的文本文件,詞法記號是構成C++源程序的最小詞法單元。詞法分析程序與語法分析程序會查找對應的符號表判斷源程序中的單詞是否合法。C++中的詞法記號主要包括關鍵字、標識符、常量、操作符、分隔符(標點符號)和空白等?2.1認識C++程序1.關鍵字關鍵字是系統(tǒng)已預定義的單詞,它們在程序中表達特定的含義。C++中定義的主要關鍵字如下:asmdoifreturntypedefautodoubleinlineshorttypeidbooldynamic_castintsignedtypenamebreakelselongsizeofunioncaseenummutablestaticunsignedcatchexplicitnamespacestatic_castusingcharexportnewstructvirtualclassexternoperatorswitchvoidconstfalseprivatetemplatevolatileconst_castfloatprotectedthiswchar_tcontinueforpublicthrowwhiledefaultfriendregistertruedeletegotoreinterpret_casttry2.1認識C++程序2.標識符標識符是程序員用來命名程序中一些實體的一種單詞。使用標識符可以定義函數名、類名、對象名、變量名、常量名、類型名、和語句標號名等。2.1認識C++程序C++中定義標識符的主要規(guī)則如下:(1)標識符以大小寫字母或者下劃線(_)開始,區(qū)分大小寫;(2)標識符的其他字符可以由字母,數字或者下劃線構成;(3)盡量使用有意義的單詞,且不可以使用系統(tǒng)中已預定義的關鍵字和設備字作為標識符。2.1認識C++程序3.常量常量是有具體數值的符號,可以用常量名和常量符號來表示。包括整型常量、浮點型常量、字符型常量、字符串常量、枚舉常量等。定義常量的格式如下:const類型說明符常量名=常量值;定義一個常量要注意以下幾點:(1)確定常量名;(2)指出常量類型;(3)必須進行初始化;(4)使用常量類型說明符const。2.1認識C++程序4操作符操作符是實現各種運算的操作符號,包括算術運算符、關系運算符、邏輯運算符、位操作運算符、賦值運算符、其它運算符(三目運算符、逗號運算符、sizeof運算符、強制類型運算符、取地址和取內容運算符、成員選擇符、運算符()和[]等。2.1認識C++程序5分隔符C++中的分隔符被稱為程序中的標點符號,它是用來分隔各詞法記號與程序正文。通常有以下幾種:空格符、逗號、分號、冒號、圓括號、花括號。2.1認識C++程序6空白空白是空格、水平制表符(Tab鍵)、垂直制表符、換行符、注釋等的總稱。記法分析程序會將C++源程序文件分解為詞法記號與空白。2.1認識C++程序2.1.4VC6.0開發(fā)環(huán)境簡介VC6.0是微軟公司開發(fā)的一款商用的C++語言開發(fā)環(huán)境,盡管現在微軟公司的主流開發(fā)環(huán)境已經轉移到更新版本的VisualStudio平臺下,VC6.0仍然非常適合作為C++語言的教學實踐平臺。作為本教材的C++語言的實驗平臺,本節(jié)簡單介紹在VC6.0環(huán)境下開發(fā)C++語言程序的步驟,VC6.0運行的主界面如圖2.1所示:2.1認識C++程序2.1認識C++程序步驟1:新建VC工程通過單擊文件菜單->新建子菜單,打開新建對話框,在第二個Tab頁中選擇新建的工程類型,如圖2.2所示,VC支持多種工程類型,從中選取Win32控制臺程序。在工程名稱文本框中輸入合適的工程名稱,如第二章示例程序的工程名稱為CHAP02,在位置下的文本框中選擇工程文件的存儲位置。默認的存儲位置是VC6的安裝目錄下,建議選擇一個熟悉的位置保存工程文件。2.1認識C++程序2.1認識C++程序點擊確定按鈕之后,出現如圖2.3所示的對話框,提示選擇一種控制臺程序的類型,此時選擇第一項“一個空工程”并單擊確定按鈕,在出現的確認對話框單擊完成即完成了創(chuàng)建一個Win32控制臺程序的一個空工程。2.1認識C++程序2.1認識C++程序步驟2:新建C++源程序文件工程創(chuàng)建好之后就可以往工程中添加C++源程序文件了。通過文件菜單,選擇新建子菜單,在彈出的對話框中選擇文件Tab,在列表中選擇一種文件類型,此處我們選擇C++源程序文件,在文件名文本框中輸出C++源程序文件的名稱如first.cpp,點擊確定按鈕,如圖2.4所示:2.1認識C++程序2.1認識C++程序這時,在VC主界面的工程窗口單擊“FileView”視圖,可以看到在源程序目錄下有一個源程序文件first.cpp,在主編輯窗口添加如下的文件內容:#include<iostream>usingnamespacestd;voidmain(void){cout<<"IlikeOOPPrograming."<<endl;}2.1認識C++程序如圖2.5所示,此時可以進行源程序文件的編譯與鏈接工作了!2.1認識C++程序步驟3:編譯、鏈接與運行C++源程序文件如圖2.6所示,通過組建菜單的“編譯”、“組建”與“執(zhí)行”可以實現對C++源程序文件的編譯、鏈接與運行。2.1認識C++程序單擊編譯菜單,編譯相關信息會顯示在VC主界面的底部窗口,如圖2.7所示。如果編譯過程中的錯誤,應該根據錯誤提示信息找到相關代碼并修改程序。2.1認識C++程序在編譯通過的情況下,單擊組建菜單,實現對目標程序的鏈接并生成可執(zhí)行程序,組建結果如圖2.8所示。2.1認識C++程序在成功生成EXE程序之后,單擊執(zhí)行菜單或者按Ctrl+F5運行該程序,結果如圖2.9所示。2.1認識C++程序打開之前創(chuàng)建的工程目錄文件夾,如圖2.10所示,從圖中可以看到C++源程序文件first.cpp在工程目錄下,編譯之后得到的目標文件以及可執(zhí)行程序保存在Debug目錄下。2.1認識C++程序需要注意的是:每一個C++源程序文件編譯之后都會生成一個目標文件,但一個工程下多個目標文件經過鏈接之后只能生成一個EXE文件;另外工程目錄下有一個工作空間文件CHAP02.dsw,該文件是創(chuàng)建工程時自動生成的,用于描述整個C++項目的相關信息,通過VC6.0新建->打開工作空間菜單,在彈出的對話框中選擇該工程文件,則與工程相關的所有文件都會在VC的工作空間中打開。2.2基本數據類型和表達式在C++語言中,數據處理的基本對象是常量和變量;運算是對各種形式的數據進行處理,數據所占用內存單元由數據類型所決定;C++語言中的數據類型可以分為基本數據類型與用戶自定義數據類型,其中基本數據類型是C++編譯系統(tǒng)內置的數據類型,而用戶自定義數據類型是由系統(tǒng)提供的數據類型不足以描述客觀對象時,由用戶自己定義的類型。數據的操作要通過運算符實現,而數據和運算符共同組成了表達式。2.2基本數據類型和表達式C++類型系統(tǒng)有7種核心的基本數據類型,如表2.1所示。類型含義char字符wchar_t寬字符int整數float浮點數double雙精度浮點數bool布爾值void空值2.2基本數據類型和表達式2.2.2常量常量是指在程序運行過程中其值始終保持不變的量,可以是直接使用文字表示的值,如:123,12.5,’A’等,這種常量也稱之為直接常量,主要類型有數值型、字符(串)型、布爾型等;也可以通過定義一個賦初值的標識符(符號)并使其在程序運行中不能被修改來實現常量,這種常量又稱之為符號常量。2.2基本數據類型和表達式C++中定義常量可以通過#define與const兩種方法來定義一個符號常量。如:#definePI3.14159 //定義符號常量PI的值為3.14159constfloatPI=3.14159;//定義符號常量PI的值為3.141592.2基本數據類型和表達式與直接常量相比較,使用符號常量的有下面一些好處:(1)增強程序的可讀性。用一個有意義的常量代替一串無意義的字符串,顯然很多時候程序員忘了或是不理解這一串字符串代表什么意義。(2)如果很多地方用到像PI(3.14159)這樣的常量,難保輸入錯誤,尤其復雜的很長的字符串時,而用常量則能一改而全部改變、減少出錯的幾率。2.2基本數據類型和表達式2.2.3變量在C++程序運行過程中,其值可以改變的量稱之為變量?變量通過名稱(變量名)來標識區(qū)分,其本質是內存單元的別名。變量的一個重要屬性是數據類型,數據類型確定了該變量所占用內存單元的大小,因此在使用變量之前要先進行變量的定義(聲明),以確定該變量所需要的內存單元的大小;變量的另一個重要屬性是存儲類型,存儲類型決定了變量在內存里的存儲區(qū)域以及生存時間。2.2基本數據類型和表達式變量在使用之前要聲明其類型與名稱,變量名是一種標識符,要能夠體現該變量的作用與含義,變量的名字一般用小寫,用戶自己定義的類一般第一個字母大寫,如果標識符有多個單詞組成,一般加下劃線分隔。在一條語句中可以聲明同類型的多個變量并賦初值,聲明變量的基本語法形式如下:數據類型
變量名1,變量名2,……,變量名n;2.2基本數據類型和表達式變量聲明并不一定引起內存單元的分配,只是告訴編譯器識別程序中出現的標識符,但定義一個變量會導致內存單元的分配,用于存放該變量對應的數據。絕大多數情況下,在C++中聲明一個變量的同時也完成了對變量的定義。但有一種情況僅需要聲明變量而非定義,即當需要在工程中的多個文件中共享一個變量時,在聲明的變量名前加上extern關鍵字,表示該變量是其他程序文件里定義的一個外部變量,聲明表示使用該外部變量而非重新定義。2.2基本數據類型和表達式算術運算符和算術表達式算術運算符包括基本算術運算符和自增自減運算符。由算術運算符、操作數和括號組成的表達式稱為算術表達式?;舅阈g運算符有:+(加),-(減或負號),*(乘),/(除),%(求余)。其中"-"作為負號時為一元運算符,作為減號時為二元運算符。優(yōu)先級跟一般數學計算是一樣的,先乘除,后加減。"%"是求余運算,它的操作數必須是整數,比如a%b是要計算a除以b后的余數,它的優(yōu)先級與"/"相同,這里要注意的是,"/"用于兩個整數相除時,結果含有小數的話小數部分會舍掉,比如2/3的結果是0。2.2基本數據類型和表達式2賦值運算符和賦值表達式
最簡單的賦值運算符就是"=",帶有賦值運算符的表達式被稱為賦值表達式。例如n=n+2就是一個賦值表達式,賦值表達式的作用就是把等號右邊表達式的值賦給等號左邊的對象。賦值表達式的類型是等號左邊對象的類型,它的結果值也是等號左邊對象被賦值后的值,賦值運算符的結合性是自右向左。什么叫自右向左呢?請看這個例子:a=b=c=1這個表達式會先從右邊算起,即先算c=1,c的值變?yōu)?這個表達式的值也是1,然后這個表達式就變成了a=b=1,再計算b=1,同樣b也變?yōu)?,b=1這個表達式的值也變成1,所以a也就變成了1。2.2基本數據類型和表達式除了"="外,賦值運算符還有+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。其中前五個是賦值運算符和算術運算符組合成的,后五個是賦值運算符和位運算符組合成的,這幾個賦值運算符的優(yōu)先級跟"="相同,結合性也是自右向左。例如,a+=5就等價于a=a+5,x*=y+3等價于x=x*(y+3)。2.2基本數據類型和表達式3逗號運算符和逗號表達式逗號也是一個運算符,它的使用形式為:表達式1,表達式2。求這個表達式的值就要先解表達式1,然后解表達式2,最終這個逗號表達式的值是表達式2的值。如計算a=1*2,a+3,應先計算a=1*2,結果為2,再計算a+3的值,a的值已經變成了2,再加上3為5,這個逗號表達式的最終結果就是5。2.2基本數據類型和表達式4邏輯運算和邏輯表達式C++中提供了用于比較的關系運算符和用于邏輯分析的邏輯運算符。關系運算符包括<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。前四個的優(yōu)先級相同,后兩個的優(yōu)先級相同,而且前四個比后兩個的優(yōu)先級高。用關系運算符把兩個表達式連起來就是關系表達式,關系表達式的結果類型為bool,值只能是true或false。如,a>b,a大于b時表達式a>b表達式的值是true,否則就是false。更復雜的表達式也算是一個道理。2.2基本數據類型和表達式5條件運算符和條件表達式
C++中唯一的一個三元運算符是條件運算符"?"。條件表達式的使用形式是:表達式1?表達式2:表達式3。表達式1是bool類型的,表達死2,3可以是任何類型,并且類型可以不同。條件表達式的類型是表達式2和3中較高的類型,類型的高低后面介紹。條件表達式會先解表達式1,如果表達式1的值是true,則解表達式2,表達式2的值就是條件表達式的值,而如果表達式1的值是false,則解表達式3,其值就是條件表達式的最終結果。如:(a<b)?a:b,如果a小于b,則結果為a,如果a大于b,則結果為b。2.2基本數據類型和表達式6sizeof運算符sizeof
操作符的作用是返回一個對象或類型名的長度,返回值的類型為
size_t,長度的單位是字節(jié),size_t表達式的結果是編譯時常量。該運算符的使用形式為:sizeof(類型名)或sizeof(表達式)。計算結果是這個類型或者這個表達式結果在內存中占的字節(jié)數。將sizeof用于表達式時,并沒有計算表達式的值。特別是在sizeof*p中,指針p可以持有一個無效地址,因為不需要對p做解引用操作。對數組做
sizeof
操作等效于將對其元素類型做
sizeof
操作的結果乘上數組元素的個數,也就是說返回值是所有數組元素所占用的內存單元的大小。2.2基本數據類型和表達式7位運算與C語言一樣,C++提供了多個位運算符,實現對數據的二進制位操作。(1)按位與(&)。它是對兩個操作數的二進制形式的每一位分別進行邏輯與操作。如3的二進制形式為00000011,5的二進制形式為00000101,按位與后結果是00000001。(2)按位或(|)。它對兩個操作數的二進制形式的每一位分別進行邏輯或操作。如3和5按位或運算后結果是00000111。(3)按位異或(^)。它對兩個操作數的每一位進行異或,也就是如果對應位相同則運算結果為0,若對應位不同則計算結果為1。例如3和5按位異或后結果為00000110。2.2基本數據類型和表達式(4)按位取反(~)。這是一個一元運算符。它對一個二進制數的每一位求反。如3按位取反就是11111100。(5)移位。包括左移運算(<<)和右移運算(>>),都是二元運算符。移位運算符左邊的數是需要移位的數值,右邊的數是移動的位數。左移是按指定的位數將一個數的二進制值向左移位,左移后,低位補0,移出的高位舍棄。右移是按照指定的位數將一個數的二進制值向右移位,右移后,移出的低位舍棄,如果是無符號數則高位補0,如果是有符號數,則高位補符號位或0,一般補符號位。例如char型變量的值是-8,則它在內存中的二進制補碼值是11111000,所以a>>2則需要將最右邊兩個0移出,最左邊補兩個1,因為符號位是1,則結果為11111110,對其再求補碼就得到最終結果-2。2.2基本數據類型和表達式2.2.5語句語句(Statement)是C++程序中最小的獨立單位,一般是用分號“;”結束的(復合語句是以右花括號結束的)。C++語句主要可以分為以下幾種。聲明語句如inta,
b;在C語言中,只有產生實際操作的才稱為語句,對變量的定義不作為語句,而且要求對變量的定義必須出現在本塊中所有程序語句之前。因此C程序員已經養(yǎng)成了一個習慣:在函數或塊的開頭位置定義全部變量。在C++中,對變量(以及其他對象)的定義被認為是一條語句,并且可以出現在函數中的任何行,即可以放在其他程序語句可以出現的地方,也可以放在函數之外。這樣更加靈活,可以很方便地實現變量的局部化(變量的作用范圍從聲明語句開始到本函數或本塊結束)。2.2基本數據類型和表達式執(zhí)行語句通知計算機完成一定的操作。執(zhí)行語句包括以下幾種:1控制語句,完成一定的控制功能。C++有9種控制語句,即:if()~else~(條件語句)for()~(循環(huán)語句)while()~
(循環(huán)語句)do~while()(循環(huán)語句)continue(結束本次循環(huán)語句)break(中止執(zhí)行switch或循環(huán)語句)switch
(多分支選擇語句)goto(轉向語句)return
(從函數返回語句)2.2基本數據類型和表達式2函數和流對象調用語句。函數調用語句由一次函數調用加一個分號構成一個語句,例如:sort(x,
y,z);
//假設已定義了sort函數,它有3個參數cout<<x<<endl;
//流對象調用語句2.2基本數據類型和表達式3表達式語句。由一個表達式加一個分號構成一個語句。最典型的是:由賦值表達式構成一個賦值語句。i=i+1
//是一個賦值表達式i=i+1;//是一個賦值語句任何一個表達式的最后加一個分號都可以成為一個語句。一個語句必須在最后出現分號。表達式能構成語句是C和C++語言的一個重要特色。C++程序中大多數語句是表達式語句(包括函數調用語句)。2.2基本數據類型和表達式空語句下面是一個空語句:;
//該語句只有一個分號即只有一個分號的語句,它什么也不做。有時用來做被轉向點,或循環(huán)語句中的循環(huán)體。2.2基本數據類型和表達式復合語句可以用{}把一些語句括起來成為復合語句。如下面是一個復合語句。{z=x+y;if(z>100)z=z-100;cout<<z;}2.3數據的輸入與輸出C++的輸入/輸出(input/output)由標準庫提供。標準庫定義了一族類型,支持對文件和控制窗口等設備的讀寫操作。同時,還定義了其他一些類型,使
string
對象能夠像文件一樣操作,可直接實現數據與字符之間的轉換。這些IO類型都定義了如何讀寫內置數據類型的值。此外,一般來說,類的設計者還可以很方便地使用IO標準庫實施讀寫自定義類的對象。類類型通常使用IO標準庫為內置類型定義的操作符和規(guī)則來進行讀寫。2.3數據的輸入與輸出基本概念C++的輸入輸出基于兩個基類流即輸入流istream和輸出流ostream,針對不同的應用,派生出不同的(類)對象實現數據的輸入與輸出。1標準輸入輸出為了程序員使用方便,C++直接以對象的形式提供了幾個標準輸入輸出工具,分別是cin(標準輸入),cout(標準輸出),cerr(不帶緩存的標準錯誤輸出),clog(帶緩存的標準錯誤輸出)。2.3數據的輸入與輸出2文件輸入輸出C++提供了三個類以方便程序員進行文件讀寫操作,分別為:ifstream(讀文件),ofstream(寫文件),fstream(讀寫文件)。3字符串入輸出將字符串作為輸入輸出流進行處理,有三個對應的類,分別為:istringstream(字符串輸入流),ostringstream(字符串輸出流),stringstream(字符串輸入輸出流)。每種流都對應一個緩沖區(qū)類(filebuf,stringbuf),程序中可通過流提供的相應方法訪問輸出緩沖區(qū)指針。C++輸入輸出示例C++提供cin與cout兩個對象實現標準的輸入與輸出功能,這兩個對象提供一系列方法實現鍵盤數據的輸入與屏幕數據輸出,可以完全取代C語言中的scanf函數與printf函數的功能。cin與cout對象以及與流之間的關系如下圖所示:C++輸入輸出示例cout輸出流的使用首先要在程序的開始包含頭文件:#include<iostream>其次在程序中使用cout<<表達式1<<表達式2…<<表達式n;其中表達式由變量、常量和運算符組成,可返回任意C++的數據類型;cout<<支持將多個輸出操作連接起來,形成所謂的輸出流。C++輸入輸出示例例如,使用cout對象實現屏幕輸出:cout<<”helloword!”<<”welcometocplusplus!\n”;
cout<<”helloword!”<<”welcometocplusplus!”<<endl;其中符號“<<”是cout對象提供的功能函數,實現屏幕輸出,完整的函數名為operator<<,該函數的返回值仍然是一個cout對象,所以可通過cout對象實現連續(xù)輸出。C++輸入輸出示例使用cout輸出時,若輸出endl表示換行(‘\n’),例如:inta=1000;longb=-1234567890;floatc=3.14;doubled=0.5E-18;cout<<”ThisisaC++Program.”<<endl;cout<<a<<endl;cout<<b<<”,”<<c<<endl;cout<<”a=”<<a<<”,d=”<<d<<endl;C++輸入輸出示例同一個語句中多個cout操作可分成多行書寫,執(zhí)行結果和單行書寫一樣,例如: cout<<sin(20.0/180*3.14159)* cos(20.0/180*3.14159)- tan(20.0/180*3.14159)/ <<endl;cout<<”ThisIs” <<”aC++” <<”Program.” <<endl;C++輸入輸出示例使用cout的注意事項:每個<<運算符后面只能輸出一項,不能輸出多項,如cout<<a,b,c;是錯誤的使用cout輸出時,不需指出數據類型,系統(tǒng)會自動判斷輸出數據的類型;cout有缺省的數據輸出格式,可編程控制改變數據輸出格式;endl控制命令等同于’\n’,讓cout輸出回車換行符。C++輸入輸出示例
cout輸出的格式控制與C語言中的printf函數提供的輸出控制符類似,cout對象提供了大量的方便易記的格式控制命令用于輸出數據的格式控制,要使用格式控制,必須先引入頭文件<iomanip>。cout對象常用的格式控制命令如下表所示:C++輸入輸出示例控制符有效期用途endl一次回車換行,等同’\n’dec自設定后一直有效設定數值按十進制輸出oct自設定后一直有效設定數值按八進制輸出hex自設定后一直有效設定數值按十六進制輸出fixed自設定后一直有效浮點數按照定點方式輸出showpoint自設定后一直有效浮點數輸出時顯示小數點setw(…)一次設定數值輸出的位數setprecision(…)自設定后一直有效設定浮點數小數點后的位數setfill(…)自設定后一直有效設定數值前填充的字符C++輸入輸出示例
cin輸入流的使用首先在程序的開始包含頭文件:#include<iostream>,在程序中使用cin>>變量1>>變量2>>…>>變量n,注意cin輸入的表達式只能是變量,不能是常量。例如:有如下的程序片段,輸入整數與浮點數。floata=-1;intb=-1cin>>a>>b;cout<<“a=“<<a<<“,”<<b;實際輸入由于不慎多輸入了一個空格22.03-5則導致變量a,b的值分別為a=22.0,b=-1。說明:由于多輸一個空格,導致-5并沒有被輸入,而.03不符合變量b的輸入格式,輸入失敗,其值沒有改變。C++輸入輸出示例例如:有如下的程序片段,輸入字符型數據。charc1,c2;inta;floatb;cin>>c1>>c2>>a>>b;cout<<c1<<endl<<c2<<endl<<a<<endl<<b;輸入:123456.78輸出:123456.78說明:對字符變量,cin遇到空格、回車以外的任何一個字符,即將該字符輸入變量中,同時完成輸入。C++輸入輸出示例例如:有如下的程序片段,輸入字符串數據。charstr1[16];cin>>str1;cout<<str1<<endl;輸入:WelcometoAnHuiMa’anshan輸出:Welcome說明:對于字符串變量,cin遇到空格、回車后即視為輸入結束。2.4基本控制結構用if語句實現選擇結構
if語句專門用來實現選擇結構,使用形式為:
if(表達式)
語句1
else
語句2這個結構的執(zhí)行順序是,先計算表達式的值,如果為true,則執(zhí)行語句1,否則就執(zhí)行語句2。比如,
if(x>y)
cout<<x;
else
cout<<y;2.4基本控制結構多重選擇結構
有時候問題的解決可能需要經過多次的條件判斷才能夠得出結論,例如輸入一個學生百分制成績,輸入對應的五分制等級,則可能需要多次判斷才能得出一個合理的等級。C++語言提供了多種語法結構實現多重選擇結構的程序。2.4基本控制結構多重選擇結構嵌套的if語句語法形式如下:
if(表達式1)
if(表達式2)
語句1
else
語句2
else
if(表達式3)
語句3
else
語句4語句1、2、3、4可以是復合語句。每一層的if都要與else配對,如果省略掉一個else則要使用{}把這一層的if語句括起來。建議大家寫程序的時候最好每層都用大括號括起來這樣會大大減少出錯的概率,也比較整齊。2.4基本控制結構if...elseif語句
若if語句的嵌套都在else分支下,就可以使用if...elseif語句。使用的語法形式為:
if(表達式1)
語句1
elseif(表達式2)
語句2
elseif(表達式3)
語句3
...
else
語句n2.4基本控制結構switch語句在進行判斷選擇的時候,有可能每次都是對同一個表達式的值進行判斷,那么就沒有必要在每一個嵌套的if語句里都計算一下它的值,而是使用switch來解決這個問題。語法形式為:
switch(表達式)
{
case常量表達式1:
語句1
case常量表達式2:
語句2
...
case常量表達式n:
語句n
default:
語句n+1
}
2.4基本控制結構條件運算符和條件表達式如果在條件語句中,只執(zhí)行單個的賦值語句時,??墒褂脳l件表達式來實現。不但使程序簡潔,也提高了運行效率。
條件運算符為?和:,它是一個三目運算符,即有三個參與運算的量。
由條件運算符組成條件表達式的一般形式為:
表達式1?表達式2:表達式3其求值規(guī)則為:如果表達式1的值為真,則以表達式2的值作為條件表達式的值,否則以表達式2的值作為整個條件表達式的值。
2.4.3循環(huán)結構當程序運行時需要反復的重復某個事情時,可以考慮采用循環(huán)結構的程序,從而提高編程的效率。循環(huán)結構是程序中一種很重要的結構。其特點是,在給定條件成立時,反復執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復執(zhí)行的程序段稱為循環(huán)體。C++語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結構。1)while語句;
2)用do-while語句;
3)用for語句;
2.4.3循環(huán)結構while語句while語句的一般形式為:
while(表達式){語句}
其中表達式是循環(huán)條件,語句為循環(huán)體。
while語句的語義是:計算表達式的值,當值為真(非0)時,執(zhí)行循環(huán)體語句。2.4.3循環(huán)結構do-while語句do-while語句的一般形式為:do{語句}while(表達式);
這個循環(huán)與while循環(huán)的不同在于:它先執(zhí)行循環(huán)中的語句,然后再判斷表達式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。2.4.3循環(huán)結構for語句在C或者C++語言中,for語句使用最為靈活,它完全可以取代while語句。它的一般形式為:for(表達式1;表達式2;表達式3)語句
它的執(zhí)行過程如下:
先求解表達式1。
求解表達式2,若其值為真(非0),則執(zhí)行for語句中指定的內嵌語句,然后執(zhí)行下面第3)步;若其值為假(0),則結束循環(huán),轉到第5)步。
求解表達式3。
轉回上面第2)步繼續(xù)執(zhí)行。
循環(huán)結束,執(zhí)行for語句下面的一個語句。2.4.3循環(huán)結構for語句最簡單的應用形式也是最容易理解的形式如下:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量)語句
循環(huán)變量賦初值總是一個賦值語句,它用來給循環(huán)控制變量賦初值;循環(huán)條件是一個關系表達式,它決定什么時候退出循環(huán);循環(huán)變量增量,定義循環(huán)控制變量每循環(huán)一次后按什么方式變化。這三個部分之間用“;”分隔。
2.4.3break和continue語句break語句break語句通常用在循環(huán)語句和開關語句中。當break用于開關語句switch中時,可使程序跳出switch而執(zhí)行switch以后的語句;如果沒有break語句,則將成為一個死循環(huán)而無法退出。
當break語句用于do-while、for、while循環(huán)語句中時,可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句,通常break語句總是與if語句聯(lián)在一起。即滿足條件時便跳出循環(huán)。2.4.3break和continue語句(1)while(表達式1){……if(表達式2)break;……}(2)while(表達式1){……if(表達式2)continue;……}2.5自定義數據類型C++語言提供了比較豐富的內置的基本數據類型,當這些數據類型不足以描述數據時,可以通過自定義數據類型實現復雜數據的描述?C++中自定義數據類型主要有:枚舉類型、結構體類型、聯(lián)合體類型、數組類型與類類型等,其中類類型是本書的核心,具體實現參考第四章內容。而數組嚴格的說并非是一種數據類型,只是一個數據的集合。本小節(jié)主要介紹枚舉類型、結構體類型與聯(lián)合體類型。2.5自定義數據類型typedef聲明typedef關鍵字可以給已有的數據類型名定義一個別名,使得可以在不同的使用場合給相同的數據類型取一個有意義的名稱,增強程序的可讀性?基本語法形式如下: typedef已知類型名新類型名2.5自定義數據類型其中,已知類型名是C++內置的數據類型或者已經定義過的數據類型,新類型名是指定類型名的別名,可以有多個,使用逗號分隔開。例如:typedefcharC;//Cc即charctypedefcharfield[50];//field即char[50]typedefdoubled1,d2;//d1,d2都是double的別名2.5自定義數據類型枚舉類型enum如果一個變量只有幾種可能的值,可以定義為枚舉(enumeration)類型。語法格式:enum枚舉類型名{枚舉常量值表列};例如,我們定義一個變量todays表示星期,由于一星期只有七天,則該變量的取值只可能有七種情況,可以通過枚舉的方式將變量todays的值全部列表出來,定義如下:enumdays{Mon,Tue,Wed,Thur,Fri,Sat,Sun};//先定義一個枚舉類型daysdaystoday=Mon;//定義一枚舉類型的變量today并賦初值為Mon2.5自定義數據類型上述定義中需要注意的是:在定義枚舉類型的時候,列出的枚舉值Mon,Tue,Wed,Thur,Fri,Sat,Sun都是常量,因此不能給他們賦值,實際這些枚舉常量的值默認從0開始,逐個加1,即Mon=0,Tue=1,Wed=2……,也可以在聲明枚舉類型的時候給每個枚舉常量賦初值,如:enumdays{Mon=1,Tue,Wed,Thur,Fri,Sat,Sun}。2.5自定義數據類型請大家思考下面的程序輸出是什么?enumdays{Mon,Tue=2,Wed,Thur,Fri,Sat,Sun};cout<<Mon<<Tue<<Wed<<Thur<<Fri<<Sat<<Sun<<endl;enumdays2{Sun=7,Mon,Tue=2,Wed,Thur,Fri,Sat};cout<<Mon<<Tue<<Wed<<Thur<<Fri<<Sat<<Sun<<endl;2.5自定義數據類型結構體類型struct當C++內置的基本數據類型不足以描述數據時,C++允許用戶自己定義一組包含若干個類型不同(或相同)的數據項的數據類型,稱為結構體,使用關鍵字struct進行聲明。語法形式如下:struct結構體類型名{成員表列};其中,結構體類型名用來作結構體類型的標志,結構體中的每個成員也稱為結構體中的一個域。成員表列又稱為域表。2.5自定義數據類型聲明結構體類型的位置一般在文件的開頭,在所有函數之前。需要注意的是,在C++語言中已經提供了類類型,所以在一般情況下,不必使用帶函數的結構體。例如,程序中需要描述學生信息,一個學生的基本信息包括學號、姓名、性別、年齡、出生日期,家庭住址等,但是C++內置的簡單數據類型不足以描述上述信息,因此可考慮自定義一種新的數據類型描述學生信息。下面的代碼中我們首先定義一個結構體用于描述出生日期,在此基礎之上再定義一個結構體用于描述學生信息。2.5自定義數據類型structDate//聲明一個結構體類型Date描述出生日期{
intmonth;
intday;
intyear;};structStudent//聲明一個結構體類型Student{
intnum;
charname[20];
charsex;
intage;Datebirthday;//Date是結構體類型,birthday是Date類型的成員
charaddr[30];};2.5自定義數據類型上面的程序代碼首先聲明了一個Date類型,具有三個成員month、day、year。然后聲明Student類型,將成員birthday指定為Date類型,即birthday作為Date結構體類型名的結構體變量,具有month,day,year三個屬性。結構體中的成員名可以與程序中的變量名相同,但二者沒有關系,互不影響。定義好結構體類型之后就可以使用該類型聲明變量了,聲明結構體類型的變量方法有如下幾種:2.5自定義數據類型(1)先聲明結構體類型再定義變量名一般形式:結構體類型名結構體變量名Studentstudent1;注意在C語言中結構體類型名前面需要加上關鍵字struct,但在C++中可以省略struct字。2.5自定義數據類型(2)在聲明類型的同時定義變量一般形式:struct結構體名{成員表列}變量名表列;2.5自定義數據類型(3)直接定義結構體類型變量一般形式:struct//沒有結構體類型名{成員表列}變量名表列;其中后兩種方法使用得較少,建議使用第一種方法,先定義結構體類型,再聲明該類型的變量。2.5自定義數據類型定義好結構體并聲明了結構體類型的變量之后就可以使用結構體了。在使用結構體變量的過程中需要注意以下問題:(1)可以將一個結構體變量的值賦給另一個具有相同結構的結構體變量。例如:Student1=Student2;(2)可以引用一個結構體變量中的一個成員的值。例如:Student1.num=1000;(3)如果成員本身也是一個結構體類型,則要用若干個成員運算符,一級一級找到最低一級的成員。2.5自定義數據類型(4)不能將一個結構體變量作為一個整體進行輸入和輸出。例如:cout<<student1;只能對各個成員分別輸入和輸出;(5)對結構體變量的成員可以像普通變量一樣進行各種運算。例如:student2.score=student1.score;sum=student1.score+student2.score;student1.age++;++student1.age(6)可以引用結構體變量成員的地址,也可以引用結構體變量的地址。例如:cout<<&student1;//輸出student1的首地址cout<<&student1.age;//輸出student1.age的地址結構體變量的地址主要用作函數參數,將結構體變量的地址傳遞給形參。2.5自定義數據類型聯(lián)合體類型union聯(lián)合體也叫共同體,使用Union關鍵字聲明。聯(lián)合體中的每個成員共享同一段內存(每個成員的起始內存位置都是一樣的),整個聯(lián)合體占用內存單元的大小取決于最長的成員的大小。聯(lián)合體的定義方法與結構體類似,但是結構體變量所占內存長度是各成員占得內存長度之和,每個成員分別占有其自己的內存單元。聯(lián)合體變量所占得內存長度等于最長的成員的長度。2.5自定義數據類型定義聯(lián)合體的語法形式如下:union共用體類型名{成員表列};例如:unionmix_t{longl;struct{shorthi;shortlo;}s;charc[4];}mix;2.5自定義數據類型該聯(lián)合體包含三個變量成員,分別是long類型的l、結構體s、char類型的數據c,它們在內存的示意圖如下:(注意32位機器上,char為1byte,short為2bytes,long為4bytes)2.5自定義數據類型與結構體的聲明類似,聲明聯(lián)合體的時候也可以不指定聯(lián)合體的名字,這樣的聯(lián)合體稱為匿名聯(lián)合體,下面的程序代碼分別定義了匿名與非匿名的聯(lián)合體。匿名聯(lián)合體示例:struct{chartitle[50];charauthor[50];union{//匿名的聯(lián)合體floatdollars;intrmbs;};}book;2.5自定義數據類型非匿名聯(lián)合體示例:struct{chartitle[50];charauthor[50];union{floatdollars;intrmbs;}price;}book;兩者的區(qū)別在于訪問聯(lián)合體成員的不同,如果要訪問聯(lián)合體中dollars元素,匿名聯(lián)合體成員的訪問方式為book.dollars,非匿名聯(lián)合體成員的訪問方式為book.price.dollars。2.6小結C++語言中的基本數據類型和表達式;流程控制語句以及自定義數據類型;C++中基本輸入/輸出自定義數據類型在VC6.0平臺上,詳細給出一個基本C++工程建立過程課后任務復習本章內容,上機運行本章示例程序作業(yè):一:選擇題二:填空題三:編程題1,3,4預習第3章第3章函數3.1函數的定義與使用3.2內聯(lián)函數3.3帶默認形參值的函數3.4函數重載3.5C++系統(tǒng)函數3.6知識擴展3.1函數的定義與使用3.1.1函數的定義
C++中,函數的定義基本的原則是,函數必須先定義,后使用,對沒有給出完整函數定義的情形下,可以用函數聲明的形式通知其它調用函數該函數的基本信息。
一般情形下,函數的定義格式如下: 類型標識符函數名(形式參數列表){
聲明部分 語句
}也可以先寫函數聲明,再寫函數聲明實現的一般格式如下:……類型標識符函數名(形式參數列表);//函數聲明………………類型標識符函數名(形式參數列表){聲明部分語句}例如,定義一個函數,用于求兩個數中的大數,可寫為:intmax(inta,intb){if(a>b)returna;elsereturnb;}
第一行說明max函數是一個整型函數,其返回的函數值是一個整數。形參為a,b,均為整型量。a,b的具體值是由主調函數在調用時傳送過來的。比如,在main()中,可以這樣調用:
voidmain() { inti=2,j=3; cout<<max(i,j)<<endl; }3.1.2函數的參數傳遞
大多數情況下,函數是帶參數的?主調函數和被調用函數之間有數據傳遞關系?前面已提到:在定義函數時函數名后面括號中的變量名稱為形式參數,在主調函數中調用一個函數時,函數名后面括號中的參數(也可以是一個表達式)稱為實際參數?
C++的參數傳遞規(guī)則基本上和C是一樣的,在主調函數調用被調函數時,要根據被調函數的形參列表傳入參數類型、個數一致的實在參數。【例3.1】調用函數時的數據傳遞?#include<iostream>usingnamespacestd;//使用標準名空間intmax(intx,inty)//定義有參函數max{intz;z=x>y?x:y;return(z);}voidmain(){inta,b,c;cout<<″pleaseentertwointegernumbers:″;cin>>a>>b;c=max(a,b);//調用max函數,給定實參為a,bcout<<″max=″<<c<<endl;}有關形參與實參的說明:(1)在定義函數時指定的形參,在未出現函數調用時,它們并不占內存中的存儲單元,因此稱它們是形式參數,表示它們并不是實際存在的數據,只有在發(fā)生函數調用時,函數max中的形參才被分配內存單元,以便接收從實參傳來的數據?在調用結束后,形參所占的內存單元也被釋放?(2)實參可以是常量、變量或表達式,如max(3,a+b);但要求a和b有確定的值?以便在調用函數時將實參的值賦給形參?(3)在定義函數時,必須在函數首部指定形參的類型(見例3.1程序第3行)?(4)實參與形參的類型應相同或賦值兼容? 例3.1中實參和形參都是整型,這是合法的、正確的?如果實參為整型而形參為實型,或者相反,則按不同類型數值的賦值規(guī)則進行轉換?例如實參a的值為3.5,而形參x為整型,則將3.5轉換成整數3,然后送到形參b?字符型與整型可以互相通用?(5)一般情形下,除了引用形式參數外,實參變量對形參變量的數據傳遞是“值傳遞”,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參?在調用函數時,編譯系統(tǒng)臨時給形參分配存儲單元? 請注意:實參單元與形參單元是不同的單元?3.1.3引用參數引用參數是C++新引入的一種參數形式。首先,引用是被引用對象的一個別名,引用形式傳遞參數是C++中唯一的傳地址參數方式,傳遞引用即傳遞實參本身,是通過對被引用對象地址的直接傳遞實現的,對引用的更新或者賦值將直接操作在該引用代表的對象身上。引用的定義形式:類型名&引用名=被引用對象;使用引用時,要注意,引用是一種特殊類型的變量,在不是作為函數參數時,定義一個引用必須進行初始化,使它引用一個已經存在的對象。例: inti=3; int&refi=i;對于引用來說,引用一旦定義好了,在整個程序運行期間不允許更改,一個引用名只能引用一個對象。如下面這樣定義引用是非法的。 inti=3,j=5; int&refi=i; int&refi=j;【例3.2】引用參數的數據傳遞?#include"iostream.h"voidrefreshfunc(int&ref){ref++;cout<<”ref=”<<ref<<endl;}voidmain(){inti=0;
cout<<”i=”<<i<<endl;refreshfunc(i);cout<<”i=”<<i<<endl;}運行此程序,結果輸出為:i=0ref=1i=1Pressanykeytocontinue3.1.4函數的返回值(1)函數的返回值是通過函數中的return語句獲得的?return語句將被調用函數中的一個確定值帶回主調函數中去;return語句后面的括號可以要,也可以不要?return后面的值可以是一個表達式?(2)函數值的類型?函數返回值屬于某一個確定的類型,應在定義函數時指定函數值的類型?(3)如果函數值的類型和return語句中表達式的值不一致,則以函數類型為準,即函數類型決定返回值的類型?對數值型數據,可以自動進行類型轉換?3.1.5函數調用形式1函數調用的一般形式函數名([實參表列])//[]中內容表示可選項如果是調用無參函數,則“實參表列”可以沒有,但括號不能省略?如果實參表列包含多個實參,各參數間要用逗號隔開?實參與形參的個數應相等,類型匹配(相同或賦值兼容)?實參與形參按順序對應,一對一地傳遞數據?按函數在語句中的作用來分,可以有以下3種函數調用方式:(1)函數語句把函數調用單獨作為一個語句,函數調用只是完成一定的操作,無需返回值?如:
printf(“helloworld\n”);(2)函數表達式函數出現在一個表達式中,這時要求函數帶回一個確定的值以參加表達式的運算?如c=2*max(a,b);(3)函數參數函數調用作為一個函數的實參?如
m=max(a,max(b,c));//max(b,c)是函數調用,其值作為外層max函數調用的一個實參。
2被調用函數的聲明和函數原型在一個函數中調用另一個函數(即被調用函數)需要具備以下幾點:
(1)首先被調用的函數必須是已經存在的函數?
(2)如果使用庫函數,一般需要在本文件開頭用#include命令將有關頭文件嵌入到本文件中來?
(3)如果使用用戶自己定義的函數,而該函數與調用它的函數(即主調函數)在同一個程序單位中,且位置在主調函數之后,則必須在調用此函數之前對被調用的函數作聲明?所謂函數聲明,就是在函數尚在未定義的情況下,事先將該函數的有關信息通知編譯系統(tǒng),以便使編譯能正常進行?【例3.3】對被調用的函數作聲明?#include<iostream>usingnamespacestd;intmain(){floatadd(floatx,floaty);//對add函數作聲明
floata,b,c;cout<<″pleaseentera,b:″;cin>>a>>b;c=add(a,b);cout<<″sum=″<<c<<endl;return0;}floatadd(floatx,floaty)//定義add函數{floatz;z=x+y;return(z);}注意:對函數的定義和聲明不是同一件事情?定義是指對函數功能的確立,包括指定函數名、函數類型、形參及其類型、函數體等,它是一個完整的、獨立的函數單位?而聲明的作用則是把函數的名字、函數類型以及形參的個數、類型和順序(注意,不包括函數體)通知編譯系統(tǒng),以便在對包含函數調用的語句進行編譯時,據此對其進行對照檢查(例如函數名是否正確,實參與形參的類型和個數是否一致)?其實,在函數聲明中也可以不寫形參名,而只寫形參的類型,如:floatadd(float,float);3.2內聯(lián)函數一般情況下,函數在調用過程中需要進行一些準備工作,比如參數入棧,局部量保存,代碼跳轉等,調用返回時需要恢復現場,函數值返回,執(zhí)行流程返回到調用前的下一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026湖北恩施州宣恩縣園投人力資源服務有限公司招聘湖北省宣恩縣第一中學4人備考題庫附答案詳解
- 中國精準醫(yī)療行業(yè)市場需求及投資戰(zhàn)略規(guī)劃研究
- 重慶文理學院《數字動畫導論》2023-2024學年第二學期期末試卷
- 中國空氣源熱泵歐洲市場準入標準與本土化營銷策略報告
- 北海藝術設計學院《人居環(huán)境景觀設計》2023-2024學年第二學期期末試卷
- 成都師范學院《國際經貿地理》2023-2024學年第二學期期末試卷
- 中國空氣凈化設備新國標實施后市場洗牌趨勢報告
- 銀行卡業(yè)務操作規(guī)范手冊
- 蘭州文理學院《企業(yè)運營綜合模擬》2023-2024學年第二學期期末試卷
- 2026重慶市永川區(qū)就業(yè)和人才中心招聘公益性崗位人員1人備考題庫附答案詳解
- 鄉(xiāng)鎮(zhèn)醫(yī)院器械管理辦法
- 關節(jié)脫位院前急救
- 2024年山東省濟南市中考化學試卷( 含答案)
- 建筑結構改造設計和加固技術綜合分析的開題報告
- 管理會計學 第10版 課件 第1、2章 管理會計概論、成本性態(tài)與變動成本法
- 喪葬費用補助申請的社保授權委托書
- 2024年度初會《經濟法基礎》高頻真題匯編(含答案)
- 課例研究報告
- 啤酒營銷促銷實戰(zhàn)技巧之經銷商管理技巧知識培訓
- 建筑工程各部門職能及各崗位職責201702
- 機柜端口對應表
評論
0/150
提交評論