C面向?qū)ο蟪绦蛟O(shè)計(jì)教程_第1頁
C面向?qū)ο蟪绦蛟O(shè)計(jì)教程_第2頁
C面向?qū)ο蟪绦蛟O(shè)計(jì)教程_第3頁
C面向?qū)ο蟪绦蛟O(shè)計(jì)教程_第4頁
C面向?qū)ο蟪绦蛟O(shè)計(jì)教程_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第1 1章章 C+C+程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ) 1.1 C+的發(fā)展和主要特點(diǎn)的發(fā)展和主要特點(diǎn) 1.1.1 C+的發(fā)展的發(fā)展 C+由由AT&T Bell Laboratories的的Bjarne Stroustrup設(shè)計(jì)和實(shí)現(xiàn)的,設(shè)計(jì)和實(shí)現(xiàn)的,C+最初的版本被稱作最初的版本被稱作“帶類的帶類的C” 1980年第一次投入使用年第一次投入使用 支持面向?qū)ο筇匦栽谥С置嫦驅(qū)ο筇匦栽?983年被加入到年被加入到C+中,在中,在1987年至年至1989年之間,年之間,模板模板技術(shù)被加進(jìn)了技術(shù)被加進(jìn)了C+ C+標(biāo)準(zhǔn)化工作在標(biāo)準(zhǔn)化工作在1990年啟動。標(biāo)準(zhǔn)化工作由年啟動。標(biāo)準(zhǔn)化工作由ANSI(美國國

2、家標(biāo)準(zhǔn)化組織)及后來加入的(美國國家標(biāo)準(zhǔn)化組織)及后來加入的ISO(國際標(biāo)準(zhǔn)化組織)負(fù)責(zé)。(國際標(biāo)準(zhǔn)化組織)負(fù)責(zé)。1998年正式發(fā)布了年正式發(fā)布了C+國際標(biāo)準(zhǔn)國際標(biāo)準(zhǔn)1.1.2 C+的特點(diǎn)的特點(diǎn) 一個更好的一個更好的C C+兼容兼容C,會,會C的程序員,可在的程序員,可在C 的基礎(chǔ)上逐的基礎(chǔ)上逐步加入步加入C+的新特性的新特性 支持面向?qū)ο蟪绦蛟O(shè)計(jì)支持面向?qū)ο蟪绦蛟O(shè)計(jì) C+通過類支持面向?qū)ο蟪绦蛟O(shè)計(jì)通過類支持面向?qū)ο蟪绦蛟O(shè)計(jì) 支持范型程序設(shè)計(jì)支持范型程序設(shè)計(jì) 在在C+中,通過模板簡單而實(shí)用地實(shí)現(xiàn)了范型中,通過模板簡單而實(shí)用地實(shí)現(xiàn)了范型程序設(shè)計(jì)技術(shù)程序設(shè)計(jì)技術(shù) 1.2 第一個第一個C+程序以及程

3、序以及C+程序開發(fā)過程程序開發(fā)過程 1.2.1 第一個第一個C+程序程序 C+程序的結(jié)構(gòu)嚴(yán)謹(jǐn),下面介紹著名的程序的結(jié)構(gòu)嚴(yán)謹(jǐn),下面介紹著名的“Hello, world!”程序,此程序一般用于介程序,此程序一般用于介紹各種語言的第一個程序紹各種語言的第一個程序 程序功能是在屏幕上輸出字符串程序功能是在屏幕上輸出字符串“Hello, world!”。 例例1.1 在屏幕上輸出在屏幕上輸出“Hello, world!”/ 文件路徑名文件路徑名:e1_1main.cpp#include / 編譯預(yù)處理命令編譯預(yù)處理命令using namespace std;/ 使用命名空間使用命名空間std int m

4、ain()/ 主函數(shù)主函數(shù)main() cout “Hello, World!” endl;/ 用用C+方法輸出一行方法輸出一行system(“PAUSE”);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)行時屏幕輸出如下:程序運(yùn)行時屏幕輸出如下:Hello, world!請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .注釋注釋上面程序的第一行如下:上面程序的第一行如下:/ 文件路徑名文件路徑名:e1_1main.cpp這一行不是程序代碼,是注釋,告訴讀者程序的這一行不是程序代碼,是注釋,告訴讀者程序的文件路徑名,位于文件路徑名,位于“/”后

5、面的文本都是注釋后面的文本都是注釋讀者應(yīng)養(yǎng)成給程序添加注釋的習(xí)慣讀者應(yīng)養(yǎng)成給程序添加注釋的習(xí)慣在在C+程序中,可以使用程序中,可以使用C語言中語言中“/* */”形式的注釋,還可以使用以形式的注釋,還可以使用以“/”開頭的注釋開頭的注釋輸出信息輸出信息 例例1.1中的中的main()函數(shù)體包含了如下的語句:函數(shù)體包含了如下的語句:cout Hello, World! endl;/ 用用C+的方法輸出一行的方法輸出一行 cout實(shí)際上是實(shí)際上是C+系統(tǒng)預(yù)定義的對象名,稱為標(biāo)準(zhǔn)輸出流對系統(tǒng)預(yù)定義的對象名,稱為標(biāo)準(zhǔn)輸出流對象。象?!啊笔鞘恰拜敵鲞\(yùn)算符輸出運(yùn)算符”,在上面的代碼中將運(yùn)算符,在上面的代碼

6、中將運(yùn)算符“”右側(cè)雙引號內(nèi)的字符串右側(cè)雙引號內(nèi)的字符串“Hello, World!”插入到輸出流插入到輸出流中,中,endl用于表示換行,用于表示換行,endl也插入到輸出流中,也插入到輸出流中,C+系統(tǒng)系統(tǒng)將輸出流的內(nèi)容輸出到系統(tǒng)指定的設(shè)備(一般為顯示器)將輸出流的內(nèi)容輸出到系統(tǒng)指定的設(shè)備(一般為顯示器)上上 C+中也可以用中也可以用C函數(shù)函數(shù)printf()進(jìn)行輸出進(jìn)行輸出 main()函數(shù)中還包含了調(diào)用函數(shù)中還包含了調(diào)用system()函數(shù)的語句:函數(shù)的語句:system(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息 system(PAUSE)函數(shù)調(diào)用將使程序暫停,以便用戶觀察執(zhí)函

7、數(shù)調(diào)用將使程序暫停,以便用戶觀察執(zhí)行結(jié)果行結(jié)果預(yù)處理命令和命名空間預(yù)處理命令和命名空間std cout需要用到頭文件需要用到頭文件iostream。程序中如下的代碼行。程序中如下的代碼行#include / 編譯預(yù)處理命令編譯預(yù)處理命令是一個預(yù)處理命令,文件是一個預(yù)處理命令,文件iostream的內(nèi)容提供輸入或輸?shù)膬?nèi)容提供輸入或輸出時所需要的一些信息出時所需要的一些信息 注意:注意:在在C語言中所有的頭文件都帶后綴語言中所有的頭文件都帶后綴.h,C+標(biāo)準(zhǔn)要標(biāo)準(zhǔn)要求由系統(tǒng)提供的頭文件不帶后綴求由系統(tǒng)提供的頭文件不帶后綴.h,用戶自己編制的頭,用戶自己編制的頭文件可以有后綴文件可以有后綴.h。在。

8、在C+中也可使用中也可使用C語言編譯系統(tǒng)提語言編譯系統(tǒng)提供的帶后綴供的帶后綴.h的頭文件,如的頭文件,如“#include ” 程序的如下代碼:程序的如下代碼:using namespace std;/ 使用命名空間使用命名空間std 表示使用命名空間表示使用命名空間std。C+標(biāo)準(zhǔn)庫中的標(biāo)準(zhǔn)庫中的類類和和函數(shù)函數(shù)是在命是在命名空間名空間std中聲明的,程序中可用中聲明的,程序中可用“using namespace std;”語句聲明,表示要用到命名空間語句聲明,表示要用到命名空間std中的內(nèi)容中的內(nèi)容定義定義main()函數(shù)函數(shù) 下面的代碼行定義了下面的代碼行定義了main()函數(shù):函數(shù):i

9、nt main()/ 主函數(shù)主函數(shù)main() cout Hello, World! endl;/ 輸出一行輸出一行system(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng) 所有所有C+程序程序都由都由一個一個或或多個多個函數(shù)組成,每個函數(shù)組成,每個C+程序都程序都必必須有須有一個一個main()函數(shù)函數(shù)定義定義main()函數(shù)函數(shù) 定義定義main()函數(shù)的第一行代碼如下:函數(shù)的第一行代碼如下:int main()/ 主函數(shù)主函數(shù)main()的的int表示表示main()函數(shù)的返回值的類型,表示返回一個整數(shù)函數(shù)的返回值

10、的類型,表示返回一個整數(shù)值,執(zhí)行完值,執(zhí)行完main()函數(shù)后將返回給操作系統(tǒng)的一個代碼,它函數(shù)后將返回給操作系統(tǒng)的一個代碼,它表示程序的狀態(tài)。在下面的語句中,指定了執(zhí)行完表示程序的狀態(tài)。在下面的語句中,指定了執(zhí)行完main()函函數(shù)后要返回的值:數(shù)后要返回的值:return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)main()函數(shù)通常用返回函數(shù)通常用返回0表示程序正常終止,而返回非表示程序正常終止,而返回非0值表值表示發(fā)生了異常示發(fā)生了異常 標(biāo)準(zhǔn)標(biāo)準(zhǔn)C+要求要求main()函數(shù)必須聲明為函數(shù)必須聲明為int型。有的操作系統(tǒng)型。有的操作系統(tǒng)(如(如Linux)要求執(zhí)行一個程序后必須

11、向操作系統(tǒng)返回一個數(shù)要求執(zhí)行一個程序后必須向操作系統(tǒng)返回一個數(shù)值。但有些值。但有些C+編譯系統(tǒng)并未完全執(zhí)行編譯系統(tǒng)并未完全執(zhí)行C+這一規(guī)定,如主這一規(guī)定,如主函數(shù)首行寫成函數(shù)首行寫成“void main()”也能通過,本書中的所有例題也能通過,本書中的所有例題都按標(biāo)準(zhǔn)都按標(biāo)準(zhǔn)C+規(guī)定寫成規(guī)定寫成“int main()”。1.2.2 C+程序開發(fā)過程程序開發(fā)過程 注意:注意:當(dāng)前的當(dāng)前的C+語言開發(fā)環(huán)境中都語言開發(fā)環(huán)境中都集成集成了以上四個步驟,了以上四個步驟,大大方便了大大方便了C+語言的開發(fā)工作。附錄語言的開發(fā)工作。附錄B討論了常用討論了常用C+語言開發(fā)環(huán)境的使用方法。語言開發(fā)環(huán)境的使用方法

12、。請同學(xué)們至少選擇請同學(xué)們至少選擇一種一種(如能做到兩種更好)(如能做到兩種更好)C+編譯系編譯系統(tǒng),在該環(huán)境下統(tǒng),在該環(huán)境下輸入輸入和和運(yùn)行運(yùn)行例題和習(xí)題中的例題和習(xí)題中的程序程序。1.3 C+在非面向?qū)ο蠓矫娴脑诜敲嫦驅(qū)ο蠓矫娴某S眯绿匦猿S眯绿匦?C+在非面向?qū)ο蠓矫娴某S眯绿匦栽诜敲嫦驅(qū)ο蠓矫娴某S眯绿匦?C+是從是從C發(fā)展而來的,發(fā)展而來的,C+對對C引入了面引入了面向?qū)ο蟮男赂拍?,同時也增加一些向?qū)ο蟮男赂拍睿瑫r也增加一些非面向非面向?qū)ο髮ο蟮男绿匦?,這些特性使的新特性,這些特性使C+使用起來更使用起來更方便與更安全,本節(jié)將討一些常用新特性。方便與更安全,本節(jié)將討一些常用新特性。

13、1.3.1 C+的輸入輸出的輸入輸出 為了方便用戶,為了方便用戶,C+還增加了標(biāo)準(zhǔn)輸入輸出還增加了標(biāo)準(zhǔn)輸入輸出流對象流對象cout和和cin。cout代表代表標(biāo)準(zhǔn)輸出流對標(biāo)準(zhǔn)輸出流對象象,cin代表代表輸入流對象輸入流對象 cout和和cin都是在頭文件都是在頭文件iostream中定義的。中定義的。cin的輸入設(shè)備是的輸入設(shè)備是鍵盤鍵盤,cout的輸出設(shè)備是的輸出設(shè)備是屏幕屏幕cout cout是從內(nèi)存向屏幕流動的數(shù)據(jù)流。是從內(nèi)存向屏幕流動的數(shù)據(jù)流。cout必須和輸出必須和輸出運(yùn)算符運(yùn)算符“”配合使用。配合使用?!啊痹诖颂幤鸬讲迦氲淖髟诖颂幤鸬讲迦氲淖饔?,例如:用,例如:cout ”運(yùn)算符從

14、運(yùn)算符從輸入設(shè)備鍵盤取得數(shù)據(jù)送到標(biāo)準(zhǔn)輸入流輸入設(shè)備鍵盤取得數(shù)據(jù)送到標(biāo)準(zhǔn)輸入流cin中,然后中,然后再送到內(nèi)存。再送到內(nèi)存?!啊背7Q為輸入運(yùn)算符。常稱為輸入運(yùn)算符。 cin應(yīng)與應(yīng)與“”配合使用。例如:配合使用。例如:int m;/ 定義整型變量定義整型變量mfloat x;/ 定義浮點(diǎn)型變量定義浮點(diǎn)型變量xcin m x;/ 輸入一個整數(shù)和一個實(shí)數(shù)輸入一個整數(shù)和一個實(shí)數(shù) 可以從鍵盤輸入:可以從鍵盤輸入:16 168.98m和和x分別獲得值分別獲得值16和和168.98。例例1.2 cin與與cout使用示例使用示例a。#include / 編譯預(yù)處理命令編譯預(yù)處理命令using namespac

15、e std;/ 使用命名空間使用命名空間std int main()/ 主函數(shù)主函數(shù)main() cout 請輸入你的姓名與年齡請輸入你的姓名與年齡: name;/ 輸入姓名輸入姓名cin age;/ 輸入年齡輸入年齡cout 你的姓名是你的姓名是: name endl; / 輸出姓名輸出姓名cout 你的年齡是你的年齡是: age endl;/ 輸出年齡輸出年齡system(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)對變量的定義放在執(zhí)行語句之對變量的定義放在執(zhí)行語句之后。在后。在C語言中要求變量的定語言中要求變量的定義

16、必須在執(zhí)行語句之前。義必須在執(zhí)行語句之前。C+允許將變量的定義放在程序的允許將變量的定義放在程序的任何位置。任何位置。1.3.2 const定義常量定義常量 在在C語言中常用語言中常用#define命令來定義符號常量,例如:命令來定義符號常量,例如:#define PI 3.14159/ 聲明符號常量聲明符號常量PI在預(yù)編譯時進(jìn)行字符替換,把程序中出現(xiàn)的字符串在預(yù)編譯時進(jìn)行字符替換,把程序中出現(xiàn)的字符串PI全部替換為全部替換為3.14159 C+提供了用提供了用const定義常量的方法,例如:定義常量的方法,例如:const float PI = 3.14159;/ 定義常量定義常量PI常量常

17、量PI具有數(shù)據(jù)類型,在編譯時要進(jìn)行類型檢查,占具有數(shù)據(jù)類型,在編譯時要進(jìn)行類型檢查,占用存儲單元,在程序運(yùn)行期間它的值是固定的。用存儲單元,在程序運(yùn)行期間它的值是固定的。例例1.3 用用const定義常量使用示例。定義常量使用示例。#include / 編譯預(yù)處理命令編譯預(yù)處理命令using namespace std;/ 使用命名空間使用命名空間std int main()/ 主函數(shù)主函數(shù)main()const float PI = 3.14159; / 定義常量定義常量PIfloat r, s;/ 定義變量定義變量cout r;/ 輸入半徑輸入半徑rs = PI * r * r;/ 計(jì)算面

18、積計(jì)算面積cout 面積面積: s endl;/ 輸出面積輸出面積system(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)1.3.3 函數(shù)重載函數(shù)重載 C+允許在同一作用域內(nèi)定義多個同名函數(shù),但允許在同一作用域內(nèi)定義多個同名函數(shù),但要求這些函數(shù)要求這些函數(shù)參數(shù)的類型參數(shù)的類型或或個數(shù)個數(shù)不相同。這個功不相同。這個功能稱為能稱為函數(shù)重載函數(shù)重載 在同一個在同一個作用域內(nèi)作用域內(nèi),函數(shù)名相同,參數(shù)的類型或,函數(shù)名相同,參數(shù)的類型或個數(shù)不同的函數(shù)稱為個數(shù)不同的函數(shù)稱為重載函數(shù)重載函數(shù)。 重載函數(shù)重載函數(shù)的形參個數(shù)或類型必須至少

19、有其中之一的形參個數(shù)或類型必須至少有其中之一不同,不允許參數(shù)個數(shù)和類型都相同而不同,不允許參數(shù)個數(shù)和類型都相同而只有返回只有返回值類型不同值類型不同,這是由于系統(tǒng),這是由于系統(tǒng)無法無法從函數(shù)的調(diào)用形從函數(shù)的調(diào)用形式判斷與哪一個重載函數(shù)相式判斷與哪一個重載函數(shù)相匹配匹配。 例例1.4 求求2個數(shù)中最小值(分別考慮整數(shù)、浮點(diǎn)數(shù)的情況)。個數(shù)中最小值(分別考慮整數(shù)、浮點(diǎn)數(shù)的情況)。int Min(int a, int b)/ 求求2個整數(shù)的最小值個整數(shù)的最小值return a b ? a : b;/ 返回返回a,b的最小值的最小值float Min(float a, float b)/ 求求2個浮點(diǎn)

20、數(shù)的最小值個浮點(diǎn)數(shù)的最小值return a b ? a : b;/ 返回返回a,b的最小值的最小值int main()/ 主函數(shù)主函數(shù)main()int a, b;/ 定義整型變量定義整型變量float x, y;/ 定義浮點(diǎn)型變量定義浮點(diǎn)型變量cout a b;/ 輸入輸入a,bcout a , b 的最小值為的最小值為 Min(a, b) endl;/ 輸出輸出a,b的最小值的最小值,調(diào)用調(diào)用“int Min(int a, int b)”cout x y;/ 輸入輸入x,ycout x , y 的最小值為的最小值為 Min(x, y) endl;/ 輸出輸出x,y的最小值的最小值,調(diào)用調(diào)用

21、“float Min(float a, float b)”system(PAUSE);/ 調(diào)用庫函數(shù)調(diào)用庫函數(shù)system( ),輸出系統(tǒng)提示信息,輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)例例1.5 用重載函數(shù)實(shí)現(xiàn)分別求用重載函數(shù)實(shí)現(xiàn)分別求2個整數(shù)或個整數(shù)或3個整數(shù)中的最小者個整數(shù)中的最小者。int Min(int a, int b)/ 求求2個整數(shù)的最小值個整數(shù)的最小值return a b ? a : b;/ 返回返回a,b的最小值的最小值int Min(int a, int b, int c)/ 求求3個整數(shù)的最小值個整數(shù)的最小值int t = a

22、 b ? a : b;/ a,b的最小值的最小值t = t c ? t : c;/ t,c的最小值的最小值return t;/ 返回返回a,b,c的最小值的最小值int main()/ 主函數(shù)主函數(shù)main()int a, b, c;/ 定義整型變量定義整型變量cout a b c;/ 輸入輸入a,b,c cout a “,” b “的最小值為的最小值為” Min(a, b) endl;/ 輸出輸出a,b的最小值的最小值,調(diào)用調(diào)用“int Min(int a, int b)”cout a , b , c 的最小值為的最小值為 Min(a, b, c) endl;/ 輸出輸出a,b,c的最小的最

23、小值值,調(diào)用調(diào)用“int Min(int a, int b, int c)”system(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)1.3.4 有默認(rèn)參數(shù)的函數(shù)有默認(rèn)參數(shù)的函數(shù)在在C語言中,在函數(shù)調(diào)用時形參從實(shí)參獲得參數(shù)值,語言中,在函數(shù)調(diào)用時形參從實(shí)參獲得參數(shù)值,所以實(shí)參的個數(shù)應(yīng)與形參相同。有時多次調(diào)用同一所以實(shí)參的個數(shù)應(yīng)與形參相同。有時多次調(diào)用同一函數(shù)時使用函數(shù)時使用相同的實(shí)參值相同的實(shí)參值,C+允許給形參提供允許給形參提供默默認(rèn)值認(rèn)值,這樣形參就不一定要從實(shí)參取值了。如有一,這樣形參就不一定要從實(shí)參取值了。如有一函

24、數(shù)聲明:函數(shù)聲明:float Area(float r = 1.6); / 有默認(rèn)值的函數(shù)聲明有默認(rèn)值的函數(shù)聲明上面的函數(shù)聲明指定參數(shù)上面的函數(shù)聲明指定參數(shù)r的默認(rèn)值為的默認(rèn)值為1.6,如果在,如果在調(diào)用此函數(shù)時無實(shí)參,則參數(shù)調(diào)用此函數(shù)時無實(shí)參,則參數(shù)r的值為的值為1.6,例如:,例如: s = Area();/ 等價于等價于Area(1.6)有默認(rèn)參數(shù)的函數(shù)有默認(rèn)參數(shù)的函數(shù)默認(rèn)參數(shù)應(yīng)在函數(shù)名第一次出現(xiàn)時指定。默認(rèn)參數(shù)應(yīng)在函數(shù)名第一次出現(xiàn)時指定。默認(rèn)參數(shù)必須是函數(shù)參數(shù)表中最右邊默認(rèn)參數(shù)必須是函數(shù)參數(shù)表中最右邊(尾部尾部)的參數(shù)。例如:的參數(shù)。例如:float Volume(float l =

25、10.0, float w = 8.0, float h);/ 錯誤錯誤float Volume(float l = 10.0, float w = 8.0, float h = 6.0);/ 正確正確對于上面正確的函數(shù)聲明,可采用如下形式的函數(shù)調(diào)用:對于上面正確的函數(shù)聲明,可采用如下形式的函數(shù)調(diào)用:v = Volume(10.1, 8.2, 6.8);/ 形參值全從實(shí)參得到形參值全從實(shí)參得到,l=10.1,w=8.2,h=6.8v = Volume(10.1, 8.2);/ 最后最后1個形參的值取默認(rèn)值個形參的值取默認(rèn)值,l=10.1,w=8.2,h=6.0v = Volume(10.1);

26、/ 最后最后2個形參的值取默認(rèn)值個形參的值取默認(rèn)值,l=10.1,w=8.0,h=6.0v = Volume();/ 形參的值全取默認(rèn)值形參的值全取默認(rèn)值,l=10.0,w=8.0,h=6.0例例1.6 函數(shù)默認(rèn)參數(shù)示例。函數(shù)默認(rèn)參數(shù)示例。void Show(char str1, char str2 = , char str3 = );/ 在在聲明函數(shù)時給出默認(rèn)值聲明函數(shù)時給出默認(rèn)值int main()/ 主函數(shù)主函數(shù)main()Show(你好你好!);/ str1值取值取你好你好!,str2與與str3取取默認(rèn)值默認(rèn)值Show(你好你好, 歡迎學(xué)習(xí)歡迎學(xué)習(xí)C+!);/ str1值值你好你好,

27、str2取取歡迎學(xué)習(xí)歡迎學(xué)習(xí)C+!,str3取取默認(rèn)值默認(rèn)值Show(你好你好, , 歡迎學(xué)習(xí)歡迎學(xué)習(xí)C+!);/ str1值值你好你好,str2取取,str3取值取值歡迎學(xué)習(xí)歡迎學(xué)習(xí)C+!system(PAUSE); / 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)void Show(char str1, char str2, char str3)cout str1 str2 str3 endl;/ 輸出輸出str1,str2,str31.3.5 引用的概念引用的概念 建立建立“引用引用”的作用是為一個變量起另一個名字,對一個的作用是為一

28、個變量起另一個名字,對一個變量的變量的“引用引用”的所有操作,實(shí)際上都是對其所代表的的所有操作,實(shí)際上都是對其所代表的(原來的)變量的操作(原來的)變量的操作 設(shè)有一個變量設(shè)有一個變量x,要給它起一個別名,要給它起一個別名y,可以這樣寫:,可以這樣寫:float x; / 定義變量定義變量xfloat &y = x;/ 聲明聲明y是一個浮點(diǎn)型變量的引用變量,它被初始化為是一個浮點(diǎn)型變量的引用變量,它被初始化為x聲明后,使用聲明后,使用x或或y代表同一變量。在上述聲明中,代表同一變量。在上述聲明中,&是是“引引用聲明符用聲明符” 對變量聲明一個引用,并不另開辟內(nèi)存單元,對變量聲明

29、一個引用,并不另開辟內(nèi)存單元,x和和y都代表都代表相同一變量存儲單元。相同一變量存儲單元。 引用的概念引用的概念 在聲明一個引用時,必須同時使之初始化在聲明一個引用時,必須同時使之初始化 在函數(shù)中聲明一個變量的引用后,在函數(shù)執(zhí)行期間,該在函數(shù)中聲明一個變量的引用后,在函數(shù)執(zhí)行期間,該引用一直與其代表的變量相聯(lián)系,不能再作為其他變量引用一直與其代表的變量相聯(lián)系,不能再作為其他變量的別名。例如:的別名。例如:int a, b;/ 定義整型變量定義整型變量a,bint &c = a;/ 使使c成為變量成為變量a的引用(別名)的引用(別名)int &c = b;/ 又使又使c成為變量成

30、為變量b的引用(別名)是錯誤的的引用(別名)是錯誤的例例1.7 變量的引用使用示例。變量的引用使用示例。int main()/ 主函數(shù)主函數(shù)main()int a = 10;/ 定義變量定義變量int &b = a;/ b為為a的引用的引用,a與與b代表相同變量存儲單元代表相同變量存儲單元b = b + 2;/ b的值自加的值自加2,a與與b的值都為的值都為12cout a的地址的地址: &a endl;/ 輸出輸出a的地址的地址cout b的地址的地址: &b endl;/ 輸出輸出b的地址的地址cout a的值的值: a endl;/ 輸出輸出a的值的值cout b

31、的值的值: b endl;/ 輸出輸出a的值的值system(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)程序運(yùn)行時屏幕輸出參考如下:程序運(yùn)行時屏幕輸出參考如下:a的地址的地址:0013FF7Cb的地址的地址:0013FF7Ca的值的值:12b的值的值:12請按任意鍵繼續(xù)請按任意鍵繼續(xù). . .將引用作為函數(shù)參數(shù)將引用作為函數(shù)參數(shù) C+增加增加“引用引用”的主要目的是利用它作為的主要目的是利用它作為函數(shù)參數(shù),以便擴(kuò)充函數(shù)傳遞數(shù)據(jù)的功能。函數(shù)參數(shù),以便擴(kuò)充函數(shù)傳遞數(shù)據(jù)的功能。 在在C語言中,將變量名作為實(shí)參。這時將語言中,將

32、變量名作為實(shí)參。這時將變變量的值量的值傳遞給傳遞給形參形參。傳遞是。傳遞是單向的單向的,在調(diào),在調(diào)用函數(shù)時,形參和實(shí)參不是同一個存儲單用函數(shù)時,形參和實(shí)參不是同一個存儲單元。在執(zhí)行函數(shù)期間元。在執(zhí)行函數(shù)期間形參值形參值發(fā)生發(fā)生變化變化并并不不傳回給實(shí)參傳回給實(shí)參。例例1.8 以變量為實(shí)參不能實(shí)現(xiàn)交換變量的值的。以變量為實(shí)參不能實(shí)現(xiàn)交換變量的值的。void Swap(int a, int b)/ 不能實(shí)現(xiàn)交換實(shí)參變量的值不能實(shí)現(xiàn)交換實(shí)參變量的值int t = a; a = b; b = t;/ 循環(huán)賦值交換循環(huán)賦值交換a,b的值的值int main()/ 主函數(shù)主函數(shù)main()int m =

33、6, n = 8;/ 定義整型變量定義整型變量Swap(m, n);/ 調(diào)用函數(shù)調(diào)用函數(shù)Swap()cout m n endl;/ 輸出輸出m,n的值的值system(PAUSE); / 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)在在C程序中可以用指針傳遞變量地址的方法。使形參得到一個變量的地址,程序中可以用指針傳遞變量地址的方法。使形參得到一個變量的地址,這時形參指針變量指向?qū)崊⒆兞繂卧?。這時形參指針變量指向?qū)崊⒆兞繂卧@?.9 用指針變量作形參,實(shí)現(xiàn)兩個變量的值互換。用指針變量作形參,實(shí)現(xiàn)兩個變量的值互換。void Swap(in

34、t *p, int *q)/ 實(shí)現(xiàn)交換實(shí)現(xiàn)交換*p與與*q的值的值int t = *p; *p = *q; *q = t;/ 循環(huán)賦值交換循環(huán)賦值交換*p與與*q的值的值int main()/ 主函數(shù)主函數(shù)main()int m = 6, n = 8;/ 定義整型變量定義整型變量Swap(&m, &n);/ 調(diào)用函數(shù)調(diào)用函數(shù)Swap()cout m n endl; / 輸出輸出m,n的值的值system(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)在在C+中,把變量的引用作為函數(shù)形參,由于形參是實(shí)參的引用,

35、也就是中,把變量的引用作為函數(shù)形參,由于形參是實(shí)參的引用,也就是形參是實(shí)參的別名,這樣對形參的操作等價于對實(shí)參的操作。形參是實(shí)參的別名,這樣對形參的操作等價于對實(shí)參的操作。例例1.10 利用引用形參實(shí)現(xiàn)交換兩個變量的值。利用引用形參實(shí)現(xiàn)交換兩個變量的值。void Swap(int &a, int &b)/ 實(shí)現(xiàn)交換實(shí)參變量的值實(shí)現(xiàn)交換實(shí)參變量的值int t = a; a = b; b = t;/ 循環(huán)賦值交換循環(huán)賦值交換a與與b的值的值int main()/ 主函數(shù)主函數(shù)main()int m = 6, n = 8;/ 定義整型變量定義整型變量Swap(m, n);/ 調(diào)用函數(shù)

36、調(diào)用函數(shù)Swap()cout m n endl; / 輸出輸出m,n的值的值system(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)常引用常引用 常引用就是用常引用就是用const對引用加以限定,表示不允許改對引用加以限定,表示不允許改變該引用的值。例如:變該引用的值。例如:int a = 6;/ 定義整型變量定義整型變量a,初值為,初值為6const int &b = a; / 聲明常引用,不允許改變聲明常引用,不允許改變b的值的值b = 8;/ 改變常引用改變常引用b的值,錯誤的值,錯誤a = 8;/ 改變改

37、變a的值,正確的值,正確 常引用通常用作函數(shù)形參常引用通常用作函數(shù)形參,這樣能保證形參的值不被,這樣能保證形參的值不被改變改變例例1.11 常引用形參示例。常引用形參示例。struct Personchar name20;/ 姓名姓名char sex3;/ 性別性別;void Show(const Person &p)cout 姓名姓名: endl;/ 輸出姓名輸出姓名cout 性別性別: p.sex endl;/ 輸出性別輸出性別 int main()/ 主函數(shù)主函數(shù)main()Person p = 李倩李倩, 女女;/ 定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量Show(p);/

38、輸出輸出psystem(PAUSE);/ 輸出系統(tǒng)提示信息輸出系統(tǒng)提示信息return 0; / 返回值返回值0, 返回操作系統(tǒng)返回操作系統(tǒng)在程序中,用結(jié)構(gòu)名在程序中,用結(jié)構(gòu)名Person作為類型來定義變量作為類型來定義變量p,在,在C語言中,不能用結(jié)構(gòu)名來定義結(jié)構(gòu)變量名,必須在結(jié)語言中,不能用結(jié)構(gòu)名來定義結(jié)構(gòu)變量名,必須在結(jié)構(gòu)名前加構(gòu)名前加struct才能定義結(jié)構(gòu)變量,即應(yīng)采用如下形式才能定義結(jié)構(gòu)變量,即應(yīng)采用如下形式定義:定義:structPerson p = 李倩李倩, 女女;/ 定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量常引用常引用 可以用常量或表達(dá)式對常引用進(jìn)行初始化,例如:可以用常量或表達(dá)式對常

39、引用進(jìn)行初始化,例如:int a = 6;/ 定義變量定義變量const int &b = a + 3;/ 正確正確,可以用表達(dá)式對常引用進(jìn)行初始化可以用表達(dá)式對常引用進(jìn)行初始化int &c = a + 3;/ 錯誤錯誤,對非常引用只能用變量進(jìn)行初始化對非常引用只能用變量進(jìn)行初始化 用用表達(dá)式表達(dá)式對對常引用常引用進(jìn)行進(jìn)行初始化初始化時,系統(tǒng)將生成一個時,系統(tǒng)將生成一個臨時變臨時變量量,用于存儲表達(dá)式的值,引用是臨時變量的別名。例如,用于存儲表達(dá)式的值,引用是臨時變量的別名。例如將將“const int &b = a + 3;”變換為:變換為:int tem = a +

40、 4;/ 將表達(dá)式的值存放在臨時變量將表達(dá)式的值存放在臨時變量tem中中const int &b = tem;/ 聲明聲明b是是tem的引用的引用(別名別名)1.3.6 動態(tài)分配運(yùn)算符動態(tài)分配運(yùn)算符new C+語言使用能完成動態(tài)內(nèi)存分配和初始化工作的運(yùn)算符語言使用能完成動態(tài)內(nèi)存分配和初始化工作的運(yùn)算符new,以及一個能完成清理與釋放內(nèi)存工作的運(yùn)算符以及一個能完成清理與釋放內(nèi)存工作的運(yùn)算符delete來管理動態(tài)來管理動態(tài)內(nèi)存。例如:內(nèi)存。例如:new int;/ 分配一個存放整數(shù)的空間,返回一個指向整型數(shù)據(jù)的指針分配一個存放整數(shù)的空間,返回一個指向整型數(shù)據(jù)的指針new int(6); /

41、 分配一個存放整數(shù)的空間,并且初始化為分配一個存放整數(shù)的空間,并且初始化為6new char16;/ 分配一個存放字符數(shù)組的空間,該數(shù)組有分配一個存放字符數(shù)組的空間,該數(shù)組有16個元素個元素 new運(yùn)算符使用的一般格式為運(yùn)算符使用的一般格式為new 類型類型;/分配存儲單個數(shù)據(jù)的空間時不指定初始值分配存儲單個數(shù)據(jù)的空間時不指定初始值new 類型類型(初值初值);/分配單個數(shù)據(jù)的存儲空間時將指定初始值分配單個數(shù)據(jù)的存儲空間時將指定初始值new 類型類型元素個數(shù)元素個數(shù);/分配數(shù)組存儲空間時不指定初始值分配數(shù)組存儲空間時不指定初始值 用用new分配存儲空間時,如果分配失敗,返回空指針分配存儲空間時

42、,如果分配失敗,返回空指針NULL,分,分配成功將返回非空指針。配成功將返回非空指針。釋放內(nèi)存的運(yùn)算符釋放內(nèi)存的運(yùn)算符delete delete運(yùn)算符使用的一般格式為運(yùn)算符使用的一般格式為delete 指針變量指針變量;delete 指針變量指針變量; 第第1種格式釋放用種格式釋放用new分配的單個數(shù)據(jù)的存儲空間,第分配的單個數(shù)據(jù)的存儲空間,第2種格式釋放用種格式釋放用new分配的數(shù)組存儲空間。分配的數(shù)組存儲空間。例例1.12 new/delete運(yùn)算符使用示例。運(yùn)算符使用示例。int main()/ 主函數(shù)主函數(shù)main()int *p;/ 定義整型指針定義整型指針p = new int(1

43、6);/ 分配單個整數(shù)的存儲空間分配單個整數(shù)的存儲空間,并初始化為并初始化為16if (p = NULL)cout 分配存儲空間失敗分配存儲空間失敗! endl;exit(1);/ 退出程序的運(yùn)行退出程序的運(yùn)行,并向操作系統(tǒng)返回并向操作系統(tǒng)返回1cout *p endl;/ 輸出輸出p所指向的動態(tài)存儲空間的值所指向的動態(tài)存儲空間的值16delete p;/ 釋放存儲空間釋放存儲空間p = new int;/ 分配單個整數(shù)的存儲空間分配單個整數(shù)的存儲空間if (p = NULL)cout 分配存儲空間失敗分配存儲空間失敗! endl;exit(2);/ 退出程序的運(yùn)行退出程序的運(yùn)行,并向操作系統(tǒng)返回并向操作系統(tǒng)返回2*p = 8;/ 將將p指向的動態(tài)存儲空間賦值為指向的動態(tài)存儲空間賦

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論