




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程第1章C++程序設(shè)計(jì)根底1.1C++的開展和主要特點(diǎn)1.1.1C++的開展1.1.2C++的特點(diǎn)1.2第一個(gè)C++程序以及C++程序開發(fā)過程1.2.1第一個(gè)C++程序 1.2.2C++程序開發(fā)過程1.3C++在非面向?qū)ο蠓矫娴某S眯绿匦?1.3.1C++的輸入輸出1.3.2const定義常量函數(shù)重載有默認(rèn)參數(shù)的函數(shù)變量的引用 1.3.6動(dòng)態(tài)分配/釋放內(nèi)存的運(yùn)算符new和delete 1.3.7布爾類型1.4程序陷阱1.5補(bǔ)充:變量的定義、數(shù)據(jù)類型、函數(shù)等1.1C++的開展和主要特點(diǎn)1.1.1C++的開展C++由AT&TBellLaboratories的BjarneStroustrup設(shè)計(jì)和實(shí)現(xiàn)的,C++最初的版本被稱作“帶類的C”1980年第一次投入使用支持面向?qū)ο筇匦栽?983年被參加到C++中,在1987年至1989年之間,模板技術(shù)被加進(jìn)了C++C++標(biāo)準(zhǔn)化工作在1990年啟動(dòng)。標(biāo)準(zhǔn)化工作由ANSI〔美國國家標(biāo)準(zhǔn)化組織〕及后來參加的ISO〔國際標(biāo)準(zhǔn)化組織〕負(fù)責(zé)。1998年正式發(fā)布了C++國際標(biāo)準(zhǔn)回憶:C語言的特點(diǎn)(1)C語言既具備高級(jí)語言的結(jié)構(gòu)和編程環(huán)境,又提供類似于匯編語言那樣的系統(tǒng)資源操縱能力及程序執(zhí)行效率。適合解決有實(shí)時(shí)要求的問題。(2)有豐富的運(yùn)算符和數(shù)據(jù)類型,表達(dá)式類型多樣化,可以方便地實(shí)現(xiàn)在其他語言中較難實(shí)現(xiàn)的運(yùn)算,對(duì)各種不同類型的程序設(shè)計(jì)都有良好的適應(yīng)性。(3)以函數(shù)為根底實(shí)現(xiàn)程序的結(jié)構(gòu)化設(shè)計(jì),支持大型程序的多文件構(gòu)成及單個(gè)文件獨(dú)立編譯,適合大型復(fù)雜程序的設(shè)計(jì)。(4)可移植性好,語言簡潔、緊湊,使用方便、靈活。1.1.2C++的特點(diǎn)一個(gè)更好的CC++兼容C,會(huì)C的程序員,可在C
的根底上逐步參加C++的新特性支持面向?qū)ο蟪绦蛟O(shè)計(jì)C++通過類支持面向?qū)ο蟪绦蛟O(shè)計(jì)支持范型程序設(shè)計(jì)在C++中,通過模板簡單而實(shí)用地實(shí)現(xiàn)了范型程序設(shè)計(jì)技術(shù)補(bǔ)充程序設(shè)計(jì)語言的開展1、開展過程:機(jī)器語言匯編語言高級(jí)語言(1)機(jī)器語言簡單的“0”和“1”的組合,與硬件相關(guān)。(2)匯編語言將機(jī)器語言映射為一些可以被人們讀懂的助記符,如“ADD”、“SUB”等,與硬件相關(guān)。(3)高級(jí)語言接近自然語言,與硬件無關(guān)。2、高級(jí)語言的開展(1)根底語言,如:Fortran,Basic等;(2)結(jié)構(gòu)化程序設(shè)計(jì)語言,如:C語言,Pascal等;(3)面向?qū)ο蟪绦蛟O(shè)計(jì)語言,如:純面向?qū)ο蟮挠校篠malltalk,Eiffel,Java;混合型的有:C++,CLOS。例如:要向屏幕打印一個(gè)“A”字符1、BASIC語言:PRINT“A”2、PASCAL語言:writeln(‘A’);3、C語言:printf(“A”);4、C++語言:cout<<“A”;5、JAVA語言:System.out.print("A");1、新的研究領(lǐng)域?qū)π畔⒖茖W(xué)、軟件工程、人工智能、系統(tǒng)工程和認(rèn)知科學(xué)等學(xué)科有重要影響;對(duì)在計(jì)算機(jī)科學(xué)與技術(shù)的許多方面影響深遠(yuǎn)。面向?qū)ο髷?shù)據(jù)庫(OODB,Object-OrientedDatabase)面向?qū)ο蟮南到y(tǒng)模擬面向?qū)ο蟮娜藱C(jī)交互圖形用戶界面(GUI,GraphicUserInterface)人工智能和知識(shí)工程計(jì)算機(jī)輔助軟件工程(CASE,Computer-AidedSoftwareEngineering)計(jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)模擬面向?qū)ο蠹夹g(shù)概述2、定義(Coad和Yourdon)
面向?qū)ο?對(duì)象+類+繼承+消息通信3、作用(1)提高生產(chǎn)效率。表現(xiàn)在:程序可重用性(2)降低維護(hù)復(fù)雜性。表現(xiàn)在:程序模塊化(3)開發(fā)大型軟件。主要表現(xiàn)在:抽象模型更接近現(xiàn)實(shí)世界;模型與程序易于理解;程序具有重用性和模塊化;軟件易于維護(hù)。結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)的區(qū)別1、結(jié)構(gòu)化程序設(shè)計(jì)60年代后期提出來的(針對(duì)當(dāng)時(shí)對(duì)goto語句的爭(zhēng)論才開展起來的),70年代到80年代非常流行;設(shè)計(jì)思路:自頂向下、逐步求精、模塊化;優(yōu)點(diǎn):增強(qiáng)了程序的可讀性,程序結(jié)構(gòu)清晰;缺點(diǎn):軟件的可重用程度低,軟件很難維護(hù)。C語言之父DennisRitchieTheCProgrammingLanguage(1978)2、面向?qū)ο蟪绦蛟O(shè)計(jì)90年代以來才興起的;設(shè)計(jì)思路:OOA(面向?qū)ο蠓治?、OOD(面向?qū)ο笤O(shè)計(jì))、OOP(面向?qū)ο蟪绦蛟O(shè)計(jì));優(yōu)點(diǎn):可移植性增強(qiáng)了,可重用性、可維護(hù)性好;缺點(diǎn):有待于大家去發(fā)現(xiàn)和體會(huì)。C++之父BjarneStroustrupTheC++ProgrammingLanguage(1991)面向?qū)ο蠹夹g(shù)的根本特征根本特征主要有:對(duì)象、類、封裝、繼承、消息、結(jié)構(gòu)與連接、多態(tài)性。1、對(duì)象(1)定義:客觀存在的事物,是構(gòu)成現(xiàn)實(shí)世界的一個(gè)獨(dú)立單位;具體的:一名學(xué)生,一臺(tái)電腦等;抽象的:一次籃球比賽,一次班會(huì)等;(2)屬性和效勞是構(gòu)成一個(gè)對(duì)象的兩個(gè)重要的因素;屬性:對(duì)象本身所具有的狀態(tài)。如:S(S#,SNAME,AGE,SEX);屬性分為公有(public)、保護(hù)(protected)和私有(private);效勞:是用來描述對(duì)象動(dòng)態(tài)特征和行為的一個(gè)操作。(3)對(duì)象完整的定義:描述事物的一個(gè)實(shí)體;構(gòu)成系統(tǒng)的一個(gè)根本單元;由一組屬性和效勞組成。2、類(1)定義:具有相同屬性和效勞的一組對(duì)象的集合,為該類的全部對(duì)象提供了統(tǒng)一的抽象描述。其內(nèi)部包含屬性和效勞。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類是一個(gè)獨(dú)立的程序單位。(2)作用:用來定義對(duì)象。(3)類的層次結(jié)構(gòu):人教職工學(xué)生教師管理員工人本科生研究生超類(父類)
子類兩者的關(guān)系:超類是子類的抽象或普通化,子類是超類的特殊化活具體化。3、封裝(1)定義:把對(duì)象的屬性和效勞結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。如:一個(gè)集成塊,我們不關(guān)心其內(nèi)部結(jié)構(gòu),只關(guān)心芯片的引腳個(gè)數(shù),引腳的電氣參數(shù)及引腳提供的功能。(2)特點(diǎn):一個(gè)清楚的邊界;一個(gè)接口;受保護(hù)的內(nèi)部實(shí)現(xiàn)。(3)意義:靜態(tài)特征和動(dòng)態(tài)特征的不可分割;隱蔽性反映了事物的相對(duì)獨(dú)立性;如:存款:姓名,賬號(hào),存款額,利率等屬性;計(jì)算利息,顯示存款金額,轉(zhuǎn)賬等效勞。4、繼承(1)定義:特殊類的對(duì)象擁有其一般類的全部屬性和效勞;(2)基類:一般類;派生類:特殊類(3)意義:對(duì)程序的理解、修改和維護(hù)都變得相對(duì)簡單;實(shí)現(xiàn)了軟件的可重用性、模塊化。如買大桶的礦泉水商店;顧客;買東西;買大桶什么牌子的礦泉水;付款;案例:5、消息(1)定義:向?qū)ο蟀l(fā)出的效勞請(qǐng)求;(2)組成:接受者;發(fā)送者;要求的效勞;輸入信息;輸出信息;如買大桶的礦泉水商店;顧客;買東西;買大桶什么牌子的礦泉水;付款;(3)機(jī)制流程:創(chuàng)立對(duì)象輸入信息;發(fā)送消息發(fā)送者;接受消息接受者;分析處理消息要求的效勞;返回相應(yīng)的消息輸出信息;6、結(jié)構(gòu)與連接分為4種:一般與特殊結(jié)構(gòu);整體與局部結(jié)構(gòu);實(shí)例連接;消息連接。(1)一般與特殊結(jié)構(gòu)類與類之間的關(guān)系,即一般類與特殊類;(2)整體與局部結(jié)構(gòu)對(duì)象之間的組成關(guān)系;(3)實(shí)例連接一對(duì)一;一對(duì)多;多對(duì)多;(4)消息連接效勞的實(shí)現(xiàn)方式;如:學(xué)生和圖書管理員,“我借一本C++的書”。7、多態(tài)性指在一般類中定義的屬性或效勞在被特殊類繼承以后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。幾何圖形橢圓多邊形如:繪圖(效勞)1.2第一個(gè)C++程序以及C++程序開發(fā)過程1.2.1第一個(gè)C++程序C++程序的結(jié)構(gòu)嚴(yán)謹(jǐn),下面介紹著名的“Hello,world!”程序,此程序一般用于介紹各種語言的第一個(gè)程序程序功能是在屏幕上輸出字符串“Hello,world!”。例1.1在屏幕上輸出“Hello,world!”//文件路徑名:e1_1\main.cpp#include<iostream> //編譯預(yù)處理命令usingnamespacestd; //使用命名空間stdintmain() //主函數(shù)main(){ cout<<“Hello,World!”<<endl; //用C++方法輸出一行 system(“PAUSE”); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}程序運(yùn)行時(shí)屏幕輸出如下:Hello,world!請(qǐng)按任意鍵繼續(xù)...注釋上面程序的第一行如下: //文件路徑名:e1_1\main.cpp這一行不是程序代碼,是注釋,告訴讀者程序的文件路徑名,位于“//”后面的文本都是注釋讀者應(yīng)養(yǎng)成給程序添加注釋的習(xí)慣在C++程序中,可以使用C語言中“/*……*/”形式的注釋,還可以使用以“//”開頭的注釋輸出信息例1.1中的main()函數(shù)體包含了如下的語句: cout<<"Hello,World!"<<endl; //用C++的方法輸出一行cout實(shí)際上是C++系統(tǒng)預(yù)定義的對(duì)象名,稱為標(biāo)準(zhǔn)輸出流對(duì)象。“<<”是“輸出運(yùn)算符”,在上面的代碼中將運(yùn)算符“<<”右側(cè)雙引號(hào)內(nèi)的字符串“Hello,World!”插入到輸出流中,endl用于表示換行,endl也插入到輸出流中,C++系統(tǒng)將輸出流的內(nèi)容輸出到系統(tǒng)指定的設(shè)備〔一般為顯示器〕上C++中也可以用C函數(shù)printf()進(jìn)行輸出main()函數(shù)中還包含了調(diào)用system()函數(shù)的語句: system("PAUSE"); //輸出系統(tǒng)提示信息 system("PAUSE")函數(shù)調(diào)用將使程序暫停,以便用戶觀察執(zhí)行結(jié)果預(yù)處理命令和命名空間stdcout需要用到頭文件iostream。程序中如下的代碼行 #include<iostream> //編譯預(yù)處理命令 是一個(gè)預(yù)處理命令,文件iostream的內(nèi)容提供輸入或輸出時(shí)所需要的一些信息注意:在C語言中所有的頭文件都帶后綴.h,C++標(biāo)準(zhǔn)要求由系統(tǒng)提供的頭文件不帶后綴.h,用戶自己編制的頭文件可以有后綴.h。在C++中也可使用C語言編譯系統(tǒng)提供的帶后綴.h的頭文件,如“#include<stdio.h>”程序的如下代碼: usingnamespacestd; //使用命名空間std 表示使用命名空間std。C++標(biāo)準(zhǔn)庫中的類和函數(shù)是在命名空間std中聲明的,程序中可用“usingnamespacestd;”語句聲明,表示要用到命名空間std中的內(nèi)容定義main()函數(shù)下面的代碼行定義了main()函數(shù):intmain() //主函數(shù)main(){ cout<<"Hello,World!"<<endl; //輸出一行 system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}所有C++程序都由一個(gè)或多個(gè)函數(shù)組成,每個(gè)C++程序都必須有一個(gè)main()函數(shù)定義main()函數(shù)定義main()函數(shù)的第一行代碼如下: intmain() //主函數(shù)main() 的int表示main()函數(shù)的返回值的類型,表示返回一個(gè)整數(shù)值,執(zhí)行完main()函數(shù)后將返回給操作系統(tǒng)的一個(gè)代碼,它表示程序的狀態(tài)。在下面的語句中,指定了執(zhí)行完main()函數(shù)后要返回的值: return0; //返回值0,返回操作系統(tǒng) main()函數(shù)通常用返回0表示程序正常終止,而返回非0值表示發(fā)生了異常標(biāo)準(zhǔn)C++要求main()函數(shù)必須聲明為int型。有的操作系統(tǒng)〔如Linux)要求執(zhí)行一個(gè)程序后必須向操作系統(tǒng)返回一個(gè)數(shù)值。但有些C++編譯系統(tǒng)并未完全執(zhí)行C++這一規(guī)定,如主函數(shù)首行寫成“voidmain()”也能通過,本書中的所有例題都按標(biāo)準(zhǔn)C++規(guī)定寫成“intmain()”。1.2.2C++程序開發(fā)過程注意:當(dāng)前的C++語言開發(fā)環(huán)境中都集成了以上四個(gè)步驟,大大方便了C++語言的開發(fā)工作。附錄B討論了常用C++語言開發(fā)環(huán)境的使用方法。 請(qǐng)同學(xué)們至少選擇一種〔如能做到兩種更好〕C++編譯系統(tǒng),在該環(huán)境下輸入和運(yùn)行例題和習(xí)題中的程序。程序開發(fā)過程
簡單的C++程序1、正式的程序從代碼“voidmain()”開始,它包含一個(gè)名為main()的函數(shù),也稱為主函數(shù)。每個(gè)C++程序有且僅有一個(gè)main()函數(shù),程序在開始運(yùn)行時(shí)會(huì)自動(dòng)調(diào)用main()函數(shù)。main()前面的void表示函數(shù)的返回值的類型,意味著程序執(zhí)行結(jié)束后無需向操作系統(tǒng)返回。
3、注釋:“注釋”是程序員為讀者作的說明,用來提高程序的可讀性,C++程序在編譯過程中忽略注釋。(1)“//”用來注釋一行說明,在“//”之后的文字直到換行都為注釋。一般用來對(duì)于程序中難懂的代碼進(jìn)行說明。(2)“/*”和“*/”用來注釋一段說明,在“/*”和“*/”之間的局部,不管多長都為注釋。2、#include<iostream.h>:每次啟動(dòng)編譯器時(shí),先運(yùn)行預(yù)處理器,預(yù)處理器找到所有以“#”開頭的代碼行進(jìn)行處理。iostream是系統(tǒng)定義的一個(gè)“頭文件”,它設(shè)置了C++的I/O相關(guān)環(huán)境,并定義了輸入輸出流對(duì)象cout和cin等。
補(bǔ)充C++的字符集26個(gè)小寫字母
abcdefghijklmnopqrstuvwxyz26個(gè)大寫字母
ABCDEFGHIJKLMNOPQRSTUVWXYZ10個(gè)阿拉伯?dāng)?shù)字
0123456789
其他符號(hào)
+-*/=,._:;?\"'~|!#%&()[]{}^<>空格C++語言根本字符:關(guān)鍵字關(guān)鍵字〔keyword〕:又稱保存字。是由系統(tǒng)定義的具有特定含義的英文單詞。關(guān)鍵字不能另作它用。C++區(qū)分大小寫,關(guān)鍵字全部由小寫字母組成。標(biāo)準(zhǔn)C++〔ISO14882〕定義了74個(gè)關(guān)鍵字,具體的C++編譯器會(huì)做一些增刪。常用關(guān)鍵字及分類見表2.1。數(shù)據(jù)類型說明符與修飾符boolcharwchar_tclassconstdoubleenumfloatintlongshortsignedstructunionunsignedvoidvolatile存儲(chǔ)類型說明符autoexterninlineregisterstatic訪問說明符friendprivateprotectedpublic其它說明符asmexplicitnamespaceoperatortemplatethistypedeftypenameusingvirtual
語句與標(biāo)號(hào)breakcasecatchcontinuedefaultdoelseforgotoifreturnswitchthrowtrywhile
運(yùn)算符及邏輯值deletefalsenewsizeoftrue表2-1C++常用關(guān)鍵字及分類
關(guān)鍵字
還有一些關(guān)鍵字本書未介紹:
const_castdynamic_castreinterpret_caststatic_castexportmutabletypeid下面可用一些關(guān)鍵字代替邏輯運(yùn)算符:andand_eqbitandbitorComplnotoror_eqXorxor_eqnot_eq關(guān)鍵字標(biāo)識(shí)符標(biāo)識(shí)符〔Identifier,ID〕:是程序員定義的“單詞”,用來給變量、常量、數(shù)據(jù)類型、函數(shù)等命名。合法標(biāo)識(shí)符由字母或下劃線開始,由字母、數(shù)字、下劃線組成,其有效長度為1-31個(gè)字符,長度超過31個(gè)字符者只識(shí)別前31個(gè)字符,VC++標(biāo)識(shí)符長度為1-247個(gè)字符。建議使用有一定含義的英文單詞或拼音序列作標(biāo)識(shí)符,以提高可讀性;另外盡量不用下劃線或雙下劃線打頭,以免與系統(tǒng)定義的關(guān)鍵字沖突。 標(biāo)識(shí)符例:判斷下面哪些是合法的標(biāo)識(shí)符:
MyFileSalary94amountvoid94SalarySalary94$amountf3.5Num_of_Student標(biāo)點(diǎn)符號(hào)標(biāo)點(diǎn)符號(hào):#、()、{}、,、:、;、"、'等。標(biāo)點(diǎn)符號(hào)的作用:有一定的語法意義。如字符和字符串常量分別用‘’和“”引起來。對(duì)語法符號(hào)起分隔作用。如;等C++中的數(shù)據(jù)類型C++的數(shù)據(jù)結(jié)構(gòu)實(shí)型float雙精度型doubleC++的數(shù)據(jù)類型基本數(shù)據(jù)類型非基本數(shù)據(jù)類型數(shù)組type[]指針type*結(jié)構(gòu)struct聯(lián)合union枚舉enum類class整型int字符型char邏輯型bool無值型void實(shí)型類型名稱占用字節(jié)數(shù)取值范圍bool布爾型
1true,false(signed)char有符號(hào)字符型1-128
127unsigedchar無符號(hào)字符型10
255(signed)short(int)有符號(hào)短整型2-32768
32767unsignedshort(int)無符號(hào)短整型20
65535(signed)int(signed)有符號(hào)整型4-231
(231-1)unsigned(int)無符號(hào)整型40
(232-1)(signed)long(int)有符號(hào)長整型4-231
(231-1)unsignedlong(int)無符號(hào)長整型40
(232-1)float實(shí)型4-1038
1038double雙精度型8-10308
10308longdouble長雙精度型8-10308
10308void無值型0無值VC++中所有根本數(shù)據(jù)類型常量和變量變量文字常量常變量在程序中,常量和變量是用來表示數(shù)據(jù)的;常量又分為字面常量、常變量;變量1變量說明
2變量初始化值
變量,在程序中是指可以改變值的量;變量必須用標(biāo)識(shí)符進(jìn)行標(biāo)識(shí),稱為變量名;變量有類型之分,如整形變量、字符變量等;任何變量都必須先說明后使用;一是便于編譯程序?yàn)樽兞糠峙淇臻g,二是便于編譯時(shí)進(jìn)行語法檢查;變量使用的第一步,是給變量賦初始值;變量說明
在C++中,變量說明的一般格式為:《存儲(chǔ)類型》數(shù)據(jù)類型變量名1《,變量名2,
,變量名n》;例:inti,j,k;
//說明三個(gè)整型變量i,j,kfloatx,y,z;
//說明三個(gè)單精度實(shí)型變量x,y,zcharc1,c2;
//說明兩個(gè)字符型變量c1,c2doubledx;
//說明一個(gè)雙精度型變量dx
變量初始化賦初值:定義變量時(shí)即給變量一個(gè)值稱為變量初始化或給變量賦初值例如: inta=3,b=4,c=5; floatx=3.0; 變量初始化可以防止引用到隨機(jī)變量。文字常量1.整型常量
4.字符串常量3.字符型常量2.實(shí)型常量文字常量:指程序中直接給出的量;常量的值在程序執(zhí)行過程中保持不變;并且存儲(chǔ)在程序區(qū),而非數(shù)據(jù)區(qū);根據(jù)取值和表示方法的不同,可分為以下幾種:1.3C++在非面向?qū)ο蠓矫娴某S眯绿匦訡++在非面向?qū)ο蠓矫娴某S眯绿匦訡++是從C開展而來的,C++對(duì)C引入了面向?qū)ο蟮男赂拍?,同時(shí)也增加一些非面向?qū)ο蟮男绿匦?,這些特性使C++使用起來更方便與更平安,本節(jié)將討一些常用新特性。1.3.1C++的輸入輸出為了方便用戶,C++還增加了標(biāo)準(zhǔn)輸入輸出流對(duì)象cout和cin。cout代表標(biāo)準(zhǔn)輸出流對(duì)象,cin代表輸入流對(duì)象cout和cin都是在頭文件iostream中定義的。cin的輸入設(shè)備是鍵盤,cout的輸出設(shè)備是屏幕coutcout是從內(nèi)存向屏幕流動(dòng)的數(shù)據(jù)流。cout必須和輸出運(yùn)算符“<<”配合使用?!?lt;<”在此處起到插入的作用,例如: cout<<"Hello,World!\n"; //用C++的方法輸出一行 的作用是將字符串“Hello,World!\n”插入到輸出流中,也就是輸出在標(biāo)準(zhǔn)輸出設(shè)備上。在頭文件iostream中定義了控制符endl,endl代表回車換行操作,作用與“\n”相同。cincin是從鍵盤向內(nèi)存流動(dòng)的數(shù)據(jù)流。用“>>”運(yùn)算符從輸入設(shè)備鍵盤取得數(shù)據(jù)送到標(biāo)準(zhǔn)輸入流cin中,然后再送到內(nèi)存?!?gt;>”常稱為輸入運(yùn)算符。cin應(yīng)與“>>”配合使用。例如:intm; //定義整型變量mfloatx; //定義浮點(diǎn)型變量xcin>>m>>x; //輸入一個(gè)整數(shù)和一個(gè)實(shí)數(shù)可以從鍵盤輸入:16168.98 m和x分別獲得值16和168.98。例1.2cin與cout使用例如a。#include<iostream> //編譯預(yù)處理命令usingnamespacestd; //使用命名空間stdintmain() //主函數(shù)main(){ cout<<"請(qǐng)輸入你的姓名與年齡:"<<endl;//輸出提示信息 charname[16]; //姓名 intage; //年齡
cin>>name; //輸入姓名 cin>>age; //輸入年齡 cout<<"你的姓名是:"<<name<<endl; //輸出姓名 cout<<"你的年齡是:"<<age<<endl; //輸出年齡
system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}對(duì)變量的定義放在執(zhí)行語句之后。在C語言中要求變量的定義必須在執(zhí)行語句之前。C++允許將變量的定義放在程序的任何位置。1.3.2const定義常量在C語言中常用#define命令來定義符號(hào)常量,例如:#definePI3.14159 //聲明符號(hào)常量PI 在預(yù)編譯時(shí)進(jìn)行字符替換,把程序中出現(xiàn)的字符串PI全部替換為3.14159C++提供了用const定義常量的方法,例如:constfloatPI=3.14159; //定義常量PI 常量PI具有數(shù)據(jù)類型,在編譯時(shí)要進(jìn)行類型檢查,占用存儲(chǔ)單元,在程序運(yùn)行期間它的值是固定的。注意:(1)程序中不能修改,只能讀;(2)常量名不能放在賦值語句的左邊,如:constfloatPI;PI=3.14159;(3)常量定義中初始化的值可以是常量表達(dá)式,如:constcharca[]=“Iamastudent.”;(4)定義常量的目的是:防止在程序中對(duì)該值的改變,減少程序出錯(cuò)的可能性,提高程序的可維護(hù)性;例1.3用const定義常量使用例如。#include<iostream> //編譯預(yù)處理命令usingnamespacestd; //使用命名空間stdintmain() //主函數(shù)main(){ constfloatPI=3.14159; //定義常量PI floatr,s; //定義變量
cout<<"輸入半徑:"; //輸入提示信息 cin>>r; //輸入半徑r s=PI*r*r; //計(jì)算面積 cout<<"面積:"<<s<<endl; //輸出面積
system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}1.3.3函數(shù)重載問題:在C語言中,例如:intadd(intx,inty){ints;returns=x+y;}floatadd(floatx,floaty){ints;returns=x+y;}C++中,可以解決這個(gè)問題。C++允許在同一作用域內(nèi)定義多個(gè)同名函數(shù),但要求這些函數(shù)參數(shù)的類型或個(gè)數(shù)不相同。這個(gè)功能稱為函數(shù)重載在同一個(gè)作用域內(nèi),函數(shù)名相同,參數(shù)的類型或個(gè)數(shù)不同的函數(shù)稱為重載函數(shù)。重載函數(shù)的形參個(gè)數(shù)或類型必須至少有其中之一不同,不允許參數(shù)個(gè)數(shù)和類型都相同而只有返回值類型不同,這是由于系統(tǒng)無法從函數(shù)的調(diào)用形式判斷與哪一個(gè)重載函數(shù)相匹配。//函數(shù)重載#include<iostream>//-------------------------------------intabs(inta){return(a>0)?a:-a;}//------------------------------------doubleabs(doublea){return(a>0)?a:-a;}//------------------------------------intmain(){std::cout<<abs(-10)<<"\n";std::cout<<abs(-12.23)<<"\n";}//=======================重載函數(shù)匹配只要參數(shù)個(gè)數(shù)不同,參數(shù)類型不同,參數(shù)順序不同,函數(shù)就可以重載。然而,返回類型不同那么不允許函數(shù)重載。如:voidfunc(inta);//okvoidfunc(chara);//okvoidfunc(chara,intb);//okvoidfunc(inta,charb);//okcharfunc(inta);//error因?yàn)椋篺unc(23);//錯(cuò):voidfunc(inta);還是charfunc(inta);匹配規(guī)那么:尋找一個(gè)嚴(yán)格匹配,如果找到了,就用那個(gè)函數(shù);通過相容類型的隱式轉(zhuǎn)換尋找一個(gè)匹配,如果找到了,就用那個(gè)函數(shù)通過用戶定義的轉(zhuǎn)換尋找一個(gè)匹配,假設(shè)能查出有唯一的一組轉(zhuǎn)換,就用那個(gè)函數(shù);例如:voidprint(double);voidprint(int);voidmain(){print(1);//匹配voidprint(int);規(guī)那么1print(1.0);//匹配voidprint(double);規(guī)那么1print(‘a(chǎn)’);//匹配voidprint(int);規(guī)那么2print(3.14159);//匹配voidprint(double);規(guī)那么2}在使用重載函數(shù)時(shí)需要注意下面三點(diǎn):(1)編譯器不以形式參數(shù)的標(biāo)識(shí)符區(qū)分重載函數(shù)。例intmax(inta,intb);intmax(intx,inty);編譯器認(rèn)為這是同一個(gè)函數(shù)聲明兩次,編譯時(shí)出錯(cuò)。(2)編譯器不以函數(shù)類型區(qū)分重載函數(shù)。floatfun(intx,inty);intfun(intx,inty);如果函數(shù)名和形式參數(shù)表相同,只是函數(shù)類型不同,編譯器同樣認(rèn)為它們是同一個(gè)函數(shù)聲明兩次,編譯出錯(cuò)。(3)不應(yīng)該將完成不同功能的函數(shù)寫成重載函數(shù),破壞程序的可讀性。例1.4求2個(gè)數(shù)中最小值〔分別考慮整數(shù)、浮點(diǎn)數(shù)的情況〕。intMin(inta,intb) //求2個(gè)整數(shù)的最小值{ returna<b?a:b; //返回a,b的最小值 }floatMin(floata,floatb) //求2個(gè)浮點(diǎn)數(shù)的最小值{ returna<b?a:b; //返回a,b的最小值 }intmain() //主函數(shù)main(){ inta,b; //定義整型變量 floatx,y; //定義浮點(diǎn)型變量 cout<<"輸入整數(shù)a,b:"; //輸入提示 cin>>a>>b; //輸入a,b cout<<a<<","<<b<<"的最小值為"<<Min(a,b)<<endl; //輸出a,b的最小值,調(diào)用“intMin(inta,intb)” cout<<“輸入浮點(diǎn)數(shù)x,y:"; //輸入提示 cin>>x>>y; //輸入x,y cout<<x<<","<<y<<"的最小值為"<<Min(x,y)<<endl; //輸出x,y的最小值,調(diào)用“floatMin(floata,floatb)” system("PAUSE"); //調(diào)用庫函數(shù)system(),輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}例1.5用重載函數(shù)實(shí)現(xiàn)分別求2個(gè)整數(shù)或3個(gè)整數(shù)中的最小者。intMin(inta,intb) //求2個(gè)整數(shù)的最小值{ returna<b?a:b; //返回a,b的最小值 }intMin(inta,intb,intc) //求3個(gè)整數(shù)的最小值{ intt=a<b?a:b; //a,b的最小值
t=t<c?t:c; //t,c的最小值 returnt; //返回a,b,c的最小值 }intmain() //主函數(shù)main(){ inta,b,c; //定義整型變量 cout<<"輸入整數(shù)a,b,c:"; //輸入提示 cin>>a>>b>>c; //輸入a,b,c cout<<a<<“,”<<b<<“的最小值為”<<Min(a,b)<<endl; //輸出a,b的最小值,調(diào)用“intMin(inta,intb)” cout<<a<<","<<b<<","<<c<<"的最小值為"<<Min(a,b,c) <<endl;//輸出a,b,c的最小值,調(diào)用“intMin(inta,intb,intc)” system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}1.3.4有默認(rèn)參數(shù)的函數(shù)在C語言中,在函數(shù)調(diào)用時(shí)形參從實(shí)參獲得參數(shù)值,所以實(shí)參的個(gè)數(shù)應(yīng)與形參相同。有時(shí)屢次調(diào)用同一函數(shù)時(shí)使用相同的實(shí)參值,C++允許給形參提供默認(rèn)值,這樣形參就不一定要從實(shí)參取值了。如有一函數(shù)聲明: floatArea(floatr=1.6); //有默認(rèn)值的函數(shù)聲明 上面的函數(shù)聲明指定參數(shù)r的默認(rèn)值為1.6,如果在調(diào)用此函數(shù)時(shí)無實(shí)參,那么參數(shù)r的值為1.6,例如: s=Area(); //等價(jià)于Area(1.6)有默認(rèn)參數(shù)的函數(shù)默認(rèn)參數(shù)應(yīng)在函數(shù)名第一次出現(xiàn)時(shí)指定。默認(rèn)參數(shù)必須是函數(shù)參數(shù)表中最右邊(尾部)的參數(shù)。例如: floatVolume(floatl=10.0,floatw=8.0,floath);//錯(cuò)誤 floatVolume(floatl=10.0,floatw=8.0,floath=6.0);//正確 對(duì)于上面正確的函數(shù)聲明,可采用如下形式的函數(shù)調(diào)用:v=Volume(10.1,8.2,6.8); //形參值全從實(shí)參得到,l=10.1,w=8.2,h=6.8v=Volume(10.1,8.2); //最后1個(gè)形參的值取默認(rèn)值,l=10.1,w=8.2,h=6.0v=Volume(10.1); //最后2個(gè)形參的值取默認(rèn)值,l=10.1,w=8.0,h=6.0v=Volume(); //形參的值全取默認(rèn)值,l=10.0,w=8.0,h=6.0例1.6函數(shù)默認(rèn)參數(shù)例如。voidShow(charstr1[],charstr2[]="",charstr3[]=""); //在聲明函數(shù)時(shí)給出默認(rèn)值intmain() //主函數(shù)main(){ Show("你好!"); //str1值取"你好!",str2與str3取默認(rèn)值 Show("你好,","歡送學(xué)習(xí)C++!"); //str1值"你好,",str2取"歡送學(xué)習(xí)C++!",str3取默認(rèn)值 Show("你好",",","歡送學(xué)習(xí)C++!"); //str1值"你好,",str2取",",str3取值"歡送學(xué)習(xí)C++!" system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}voidShow(charstr1[],charstr2[],charstr3[]){ cout<<str1<<str2<<str3<<endl; //輸出str1,str2,str3}1.3.5引用的概念建立“引用”的作用是為一個(gè)變量起另一個(gè)名字,對(duì)一個(gè)變量的“引用”的所有操作,實(shí)際上都是對(duì)其所代表的〔原來的〕變量的操作設(shè)有一個(gè)變量x,要給它起一個(gè)別名y,可以這樣寫:floatx; //定義變量x float&y=x;//聲明y是一個(gè)浮點(diǎn)型變量的引用變量,它被初始化為x 聲明后,使用x或y代表同一變量。在上述聲明中,&是“引用聲明符”對(duì)變量聲明一個(gè)引用,并不另開辟內(nèi)存單元,x和y都代表相同一變量存儲(chǔ)單元。引用的概念在聲明一個(gè)引用時(shí),必須同時(shí)使之初始化在函數(shù)中聲明一個(gè)變量的引用后,在函數(shù)執(zhí)行期間,該引用一直與其代表的變量相聯(lián)系,不能再作為其他變量的別名。例如:inta,b; //定義整型變量a,bint&c=a; //使c成為變量a的引用〔別名〕int&c=b; //又使c成為變量b的引用〔別名〕是錯(cuò)誤的例1.7變量的引用使用例如。intmain() //主函數(shù)main(){ inta=10; //定義變量 int&b=a; //b為a的引用,a與b代表相同變量存儲(chǔ)單元 b=b+2; //b的值自加2,a與b的值都為12 cout<<"a的地址:"<<&a<<endl; //輸出a的地址 cout<<"b的地址:"<<&b<<endl; //輸出b的地址 cout<<"a的值:"<<a<<endl; //輸出a的值 cout<<"b的值:"<<b<<endl; //輸出a的值 system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}程序運(yùn)行時(shí)屏幕輸出參考如下:a的地址:0013FF7Cb的地址:0013FF7Ca的值:12b的值:12請(qǐng)按任意鍵繼續(xù)...將引用作為函數(shù)參數(shù)C++增加“引用”的主要目的是利用它作為函數(shù)參數(shù),以便擴(kuò)充函數(shù)傳遞數(shù)據(jù)的功能。在C語言中,將變量名作為實(shí)參。這時(shí)將變量的值傳遞給形參。傳遞是單向的,在調(diào)用函數(shù)時(shí),形參和實(shí)參不是同一個(gè)存儲(chǔ)單元。在執(zhí)行函數(shù)期間形參值發(fā)生變化并不傳回給實(shí)參。例1.8以變量為實(shí)參不能實(shí)現(xiàn)交換變量的值的。voidSwap(inta,intb) //不能實(shí)現(xiàn)交換實(shí)參變量的值{ intt=a;a=b;b=t; //循環(huán)賦值交換a,b的值}intmain() //主函數(shù)main(){ intm=6,n=8; //定義整型變量 Swap(m,n); //調(diào)用函數(shù)Swap() cout<<m<<""<<n<<endl; //輸出m,n的值 system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}在C程序中可以用指針傳遞變量地址的方法。使形參得到一個(gè)變量的地址,這時(shí)形參指針變量指向?qū)崊⒆兞繂卧@?.9用指針變量作形參,實(shí)現(xiàn)兩個(gè)變量的值互換。voidSwap(int*p,int*q) //實(shí)現(xiàn)交換*p與*q的值{ intt=*p;*p=*q;*q=t; //循環(huán)賦值交換*p與*q的值}intmain() //主函數(shù)main(){ intm=6,n=8; //定義整型變量 Swap(&m,&n); //調(diào)用函數(shù)Swap() cout<<m<<""<<n<<endl; //輸出m,n的值 system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}在C++中,把變量的引用作為函數(shù)形參,由于形參是實(shí)參的引用,也就是形參是實(shí)參的別名,這樣對(duì)形參的操作等價(jià)于對(duì)實(shí)參的操作。例1.10利用引用形參實(shí)現(xiàn)交換兩個(gè)變量的值。voidSwap(int&a,int&b) //實(shí)現(xiàn)交換實(shí)參變量的值{ intt=a;a=b;b=t; //循環(huán)賦值交換a與b的值}intmain() //主函數(shù)main(){ intm=6,n=8; //定義整型變量 Swap(m,n); //調(diào)用函數(shù)Swap() cout<<m<<""<<n<<endl; //輸出m,n的值 system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}常引用常引用就是用const對(duì)引用加以限定,表示不允許改變?cè)撘玫闹?。例如:inta=6; //定義整型變量a,初值為6constint&b=a; //聲明常引用,不允許改變b的值b=8; //改變常引用b的值,錯(cuò)誤a=8; //改變a的值,正確常引用通常用作函數(shù)形參,這樣能保證形參的值不被改變例1.11常引用形參例如。structPerson{ charname[20]; //姓名 charsex[3]; //性別};voidShow(constPerson&p){ cout<<"姓名:"<<<<endl; //輸出姓名 cout<<"性別:"<<p.sex<<endl; //輸出性別}intmain() //主函數(shù)main(){ Personp={"李倩","女"}; //定義結(jié)構(gòu)體變量 Show(p); //輸出p system("PAUSE"); //輸出系統(tǒng)提示信息 return0; //返回值0,返回操作系統(tǒng)}在程序中,用結(jié)構(gòu)名Person作為類型來定義變量p,在C語言中,不能用結(jié)構(gòu)名來定義結(jié)構(gòu)變量名,必須在結(jié)構(gòu)名前加struct才能定義結(jié)構(gòu)變量,即應(yīng)采用如下形式定義:struct Personp={"李倩","女"};//定義結(jié)構(gòu)體變量常引用可以用常量或表達(dá)式對(duì)常引用進(jìn)行初始化,例如:inta=6; //定義變量constint&b=a+3;//正確,可以用表達(dá)式對(duì)常引用進(jìn)行初始化int&c=a+3; //錯(cuò)誤,對(duì)非常引用只能用變量進(jìn)行初始化用表達(dá)式對(duì)常引用進(jìn)行初始化時(shí),系統(tǒng)將生成一個(gè)臨時(shí)變量,用于存儲(chǔ)表達(dá)式的值,引用是臨時(shí)變量的別名。例如將“constint&b=a+3;”變換為:inttem=a+4; //將表達(dá)式的值存放在臨時(shí)變量tem中constint&b=tem;//聲明b是tem的引用(別名)1.3.6動(dòng)態(tài)分配運(yùn)算符newC++語言使用能完成動(dòng)態(tài)內(nèi)存分配和初始化工作的運(yùn)算符new,以及一個(gè)能完成清理與釋放內(nèi)存工作的運(yùn)算符delete來管理動(dòng)態(tài)內(nèi)存。例如:newint; //分配一個(gè)存放整數(shù)的空間,返回一個(gè)指向整型數(shù)據(jù)的指針newint(6); //分配一
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人購銷農(nóng)機(jī)合同范本
- 辦證合同范本模板
- 2025年黑龍江貨運(yùn)從業(yè)資格證模擬考試題目
- 2025年固原貨運(yùn)從業(yè)資格證考試試題
- 農(nóng)業(yè)招標(biāo)合同范本
- 供水項(xiàng)目施工合同范本
- 分級(jí)銷售合同范本
- 做布料生意合同范本
- 辦公花卉采購合同范本
- 鹿邑牛犢購買合同范本
- 2024年江蘇旅游職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 2024年全國高中數(shù)學(xué)聯(lián)賽試題(及答案)
- 鑄造車間整改和工資改革方案
- 哄女生消氣的100句話
- 2023夏季廣東廣州期貨交易所招聘歷年高頻難易度、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 鉛銻合金生產(chǎn)工藝技術(shù)規(guī)范
- 企業(yè)稅務(wù)風(fēng)險(xiǎn)防控財(cái)務(wù)規(guī)劃中的稅法合規(guī)策略
- PPAP-測(cè)量系統(tǒng)分析研究模板
- 培養(yǎng)幼兒的時(shí)間觀念
- 肉山羊規(guī)模飼養(yǎng)生產(chǎn)技術(shù)規(guī)程
- 全國教育科學(xué)規(guī)劃課題申報(bào)書:34.《高質(zhì)量數(shù)字教材建設(shè)研究》
評(píng)論
0/150
提交評(píng)論