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

下載本文檔

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

文檔簡介

1、面向?qū)ο蟪绦蛟O(shè)計面向?qū)ο蟪绦蛟O(shè)計主講教師:房立存主講教師:房立存電電 話:話:2267385122673851郵郵 箱:箱:譚浩強主編譚浩強主編 清華大學(xué)出版社清華大學(xué)出版社zTHE C+ PROGRAMMING THE C+ PROGRAMMING LANGUAGE(Special Edition)LANGUAGE(Special Edition) Bjarne Stroustrup Bjarne Stroustrup 高等教育出版社高等教育出版社 本課程的性質(zhì)及學(xué)習(xí)目標本課程的性質(zhì)及學(xué)習(xí)目標 本課程是在本課程是在高級語言程序設(shè)計高級語言程序設(shè)計的基礎(chǔ)上學(xué)習(xí)面向?qū)ο蟮幕A(chǔ)上學(xué)習(xí)面向?qū)ο蠓治雠c

2、面向?qū)ο蟪绦蛟O(shè)計方法的一門課程。分析與面向?qū)ο蟪绦蛟O(shè)計方法的一門課程。 學(xué)習(xí)目標:學(xué)習(xí)目標:掌握面向?qū)ο蟪绦蛟O(shè)計的基本概念及基本思想;掌握面向?qū)ο蟪绦蛟O(shè)計的基本概念及基本思想;掌握類、對象的概念及掌握類、對象的概念及C+C+語言實現(xiàn)方法;語言實現(xiàn)方法;掌握繼承的概念及掌握繼承的概念及C+C+語言實現(xiàn)方法;語言實現(xiàn)方法;掌握多態(tài)的概念及掌握多態(tài)的概念及C+C+語言實現(xiàn)方法;語言實現(xiàn)方法; 初步建立必備的面向?qū)ο蟪绦蛟O(shè)計思想。初步建立必備的面向?qū)ο蟪绦蛟O(shè)計思想。幾點要求:幾點要求: 認真聽課不缺勤、遵守課堂紀律 (不做與本課程無關(guān)的事情不做與本課程無關(guān)的事情)認真作好課堂筆記 認真完成作業(yè) 認真完

3、成上機實驗 成績確定:考試成績70%,實驗成績20%,平時成績10%;平時成績根據(jù)考勤情況、作業(yè)完成情況等確定;實驗成績根據(jù)考勤及實驗內(nèi)容完成的情況確定。第第1章章 C+對對C的擴充的擴充1.1 1.1 C+C+的特點的特點1.2 1.2 C+C+語言的文件擴展名語言的文件擴展名1.3 1.3 注釋符注釋符1.4 1.4 命名空間命名空間1.5 1.5 C+C+語言的輸入輸出語言的輸入輸出1.6 1.6 變量的定義變量的定義1.7 1.7 強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換1.8 1.8 動態(tài)內(nèi)存的分配與釋放動態(tài)內(nèi)存的分配與釋放1.9 1.9 作用域運算符作用域運算符:1.10 1.10 引用引用1.1

4、1 1.11 constconst修飾符修飾符1.12 1.12 字符串字符串1.13 1.13 C+C+語言中函數(shù)的新特性語言中函數(shù)的新特性習(xí)題習(xí)題C+C+語言既保留了語言既保留了C C語言的有效性、靈活性、便于移植等全部精語言的有效性、靈活性、便于移植等全部精華和特點;華和特點;添加了添加了,具有強大的編程功能,可方便地,具有強大的編程功能,可方便地構(gòu)造出模擬現(xiàn)實問題的實體和操作;構(gòu)造出模擬現(xiàn)實問題的實體和操作;編寫出的程序具有結(jié)構(gòu)清晰、易于擴充等優(yōu)良特性,適合于各編寫出的程序具有結(jié)構(gòu)清晰、易于擴充等優(yōu)良特性,適合于各種應(yīng)用軟件、系統(tǒng)軟件的程序設(shè)計。種應(yīng)用軟件、系統(tǒng)軟件的程序設(shè)計。用用C+

5、C+編寫的程序可讀性好,生成的代碼質(zhì)量高,運行效率僅編寫的程序可讀性好,生成的代碼質(zhì)量高,運行效率僅比匯編語言慢比匯編語言慢10%10%20%20%。1.1 C+的特點的特點1.2 C+1.2 C+語言的文件擴展名語言的文件擴展名 為了使編譯器能夠區(qū)別是為了使編譯器能夠區(qū)別是C C語言還是語言還是C+C+語言,語言,C+C+語語言體系規(guī)定用言體系規(guī)定用“”(意即(意即)作為)作為C+C+語語言源文件的擴展名以區(qū)別于言源文件的擴展名以區(qū)別于C C語言用的語言用的“.C.C”文件擴展文件擴展名。名?!癱ppcpp”的文件擴展名與操作系統(tǒng)無關(guān)。的文件擴展名與操作系統(tǒng)無關(guān)。與與C+C+語言源文件相關(guān)的

6、頭文件擴展名一般仍用語言源文件相關(guān)的頭文件擴展名一般仍用“”,但有些操作系統(tǒng)也有規(guī)定使用但有些操作系統(tǒng)也有規(guī)定使用“.hpp.hpp”充當頭文件擴展充當頭文件擴展名的。名的。1.3 1.3 注釋符注釋符 【例例1.11.1】簡單的簡單的C+C+程序程序 1.1.主程序主程序 2.2.段注釋:段注釋: / /* * */ / 3. 3.單行注釋:單行注釋:/ / 當只做單行注釋時便當只做單行注釋時便可用可用“/”符號表示從此符號起至行尾均符號表示從此符號起至行尾均為行注釋內(nèi)容。為行注釋內(nèi)容。 程序編譯時將忽略所有的注釋內(nèi)容。程序編譯時將忽略所有的注釋內(nèi)容。 標準標準C+C+庫中的所有組件都是在一

7、個被稱為庫中的所有組件都是在一個被稱為stdstd的的名字空間中聲明和定義的。在采用標準名字空間中聲明和定義的。在采用標準C+C+的平臺上的平臺上使用標準使用標準C+C+庫中的組件,只要寫一個庫中的組件,只要寫一個usingusing指示符:指示符: 就可以直接使用就可以直接使用中的所有成員。中的所有成員。 注意:注意:如果使用了名空間如果使用了名空間stdstd,則在使用,則在使用#include#include編譯預(yù)處理命令包含頭文件時,必須去掉編譯預(yù)處理命令包含頭文件時,必須去掉頭文件的擴展名頭文件的擴展名.h.h,否則會出錯。,否則會出錯。1.4 1.4 命名空間(名空間命名空間(名空

8、間namespacenamespace)1.5 C+1.5 C+語言的輸入輸出語言的輸入輸出 C+ C+語言另外定義了一套保留字與運算符來替代語言另外定義了一套保留字與運算符來替代C C語言中對標準輸入、輸語言中對標準輸入、輸出函數(shù)的引用。出函數(shù)的引用。C+C+語言的保留字為:語言的保留字為: coutcout“輸出內(nèi)容輸出內(nèi)容”“輸入內(nèi)容輸入內(nèi)容”; / / cincin為標準輸入流對象為標準輸入流對象( (默認從鍵盤輸入默認從鍵盤輸入) ) (提取)(提?。┍仨毤由希罕仨毤由希?#include #include 【例例1.3】輸入輸出輸入輸出【例例1.5】輸入輸出再舉例輸入輸出再舉例注意

9、:注意: 輸出格式的控制;輸出格式的控制;#include Setw()1.6 1.6 變量的定義變量的定義C+C+在變量的定義上作了在變量的定義上作了兩種較大的改變兩種較大的改變: 允許直接使用結(jié)構(gòu)體名定義變量允許直接使用結(jié)構(gòu)體名定義變量,這種擴展,這種擴展為程序員在編程中提供了不少方便。為程序員在編程中提供了不少方便。 類似地在類似地在C+C+中聯(lián)合名、枚舉名也可在定義后中聯(lián)合名、枚舉名也可在定義后獨立地作為類型名使用。獨立地作為類型名使用。#includeusing namespace std;Int main() struct studentint no;float math;int

10、n;cinn; wang.no=n;cinwang.math;coutwang.no wang.mathendl; return 0;1.7 強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換格式:格式:(數(shù)據(jù)類型數(shù)據(jù)類型) (表達式表達式)數(shù)據(jù)類型數(shù)據(jù)類型 (表達式表達式)(1) (1) 通過強制類型轉(zhuǎn)換,得到一個所需類型的中間值,該中間值通過強制類型轉(zhuǎn)換,得到一個所需類型的中間值,該中間值被引用后即自動釋放。原來表達式的值類型并未改變。如下列代被引用后即自動釋放。原來表達式的值類型并未改變。如下列代碼段:碼段:intint b;floatb;float f;ff;f= =float(bfloat(b););/ /

11、此時變量此時變量b b仍然為仍然為intint類型。類型。(2) (2) 強制類型轉(zhuǎn)換符優(yōu)先級較高,只對緊隨其后的表達式起作用,強制類型轉(zhuǎn)換符優(yōu)先級較高,只對緊隨其后的表達式起作用,而對其他部分不起作用。如表達式而對其他部分不起作用。如表達式float(ifloat(i) )* *f f的含義是先將變量的含義是先將變量i i強制類型轉(zhuǎn)換為強制類型轉(zhuǎn)換為floatfloat類型,然后與變量類型,然后與變量f f運算。運算。(3) (3) 強制類型轉(zhuǎn)換應(yīng)當用在不做轉(zhuǎn)換將影響表達式結(jié)果的正確性強制類型轉(zhuǎn)換應(yīng)當用在不做轉(zhuǎn)換將影響表達式結(jié)果的正確性或精度,或不能完成相應(yīng)運算的場合。而對于系統(tǒng)可以自動轉(zhuǎn)換

12、或精度,或不能完成相應(yīng)運算的場合。而對于系統(tǒng)可以自動轉(zhuǎn)換類型的場合,則沒有必要使用。類型的場合,則沒有必要使用。1.8 1.8 動態(tài)內(nèi)存的分配與釋放動態(tài)內(nèi)存的分配與釋放1.new1.new運算符運算符 指針變量指針變量 = new = new 數(shù)據(jù)類型數(shù)據(jù)類型; ; newnew在內(nèi)存中為程序分配一塊內(nèi)存空間,用在內(nèi)存中為程序分配一塊內(nèi)存空間,用于保存某種類型數(shù)據(jù),并返回指向該內(nèi)存首地于保存某種類型數(shù)據(jù),并返回指向該內(nèi)存首地址的指針,該地址存放于指針變量中。址的指針,該地址存放于指針變量中。一般格式:一般格式: new new 類型類型 (初始值)(初始值) 2.delete2.delete運

13、算符運算符運算符運算符deletedelete用于釋放用于釋放newnew分配的內(nèi)存空間,它的使用形分配的內(nèi)存空間,它的使用形式為:式為:delete delete 指針變量;指針變量;其中的指針變量保存著其中的指針變量保存著newnew動態(tài)分配的內(nèi)存的首地址。動態(tài)分配的內(nèi)存的首地址。3. 3. 注意注意:(1) (1) 用用newnew獲取的內(nèi)存空間,必須用獲取的內(nèi)存空間,必須用deletedelete進行釋放;進行釋放;(2) (2) 對一個指針只能調(diào)用一次對一個指針只能調(diào)用一次deletedelete;(3) (3) 用用deletedelete運算符作用的對象必須是用運算符作用的對象必

14、須是用newnew分配的內(nèi)存分配的內(nèi)存空間的首地址。空間的首地址。例例1.18 new與與delete應(yīng)用舉例應(yīng)用舉例1.9 1.9 作用域運算符作用域運算符: : 通常情況下,如果全局變量與局部變量同通常情況下,如果全局變量與局部變量同名,那么局部變量在其作用域內(nèi)具有較高的優(yōu)名,那么局部變量在其作用域內(nèi)具有較高的優(yōu)先權(quán)。先權(quán)。C C語言規(guī)定只能在變量的作用域內(nèi)使用該語言規(guī)定只能在變量的作用域內(nèi)使用該變量,不能使用其他作用域中的變量,可采用變量,不能使用其他作用域中的變量,可采用C+C+中提供的作用域運算符中提供的作用域運算符:,它能指定所需要,它能指定所需要的作用域。的作用域。 注意:注意:

15、不能用不能用:訪問函數(shù)中的局部變量。訪問函數(shù)中的局部變量。在在C+C+語言中作用域運算符語言中作用域運算符:還用來限定類的成還用來限定類的成員。員。 【例例1.16】1.10 1.10 引用引用 引用是引用是C+C+語言的一個特殊的數(shù)據(jù)類型描述,用于在語言的一個特殊的數(shù)據(jù)類型描述,用于在程序的不同部分使用兩個以上的變量名指向同一地址。程序的不同部分使用兩個以上的變量名指向同一地址。 被聲明為引用類型的變量名則是實際變量名的別名。被聲明為引用類型的變量名則是實際變量名的別名。對其中任一個變量的操作實際上都是對同一地址單元進對其中任一個變量的操作實際上都是對同一地址單元進行的。行的。引用運算符為引

16、用運算符為& &,聲明引用的一般形式為:,聲明引用的一般形式為: 數(shù)據(jù)類型數(shù)據(jù)類型 & &引用變量名引用變量名 = = 變量名;變量名;對引用進行操作,實際上就是對被引用的變量進行操作。對引用進行操作,實際上就是對被引用的變量進行操作。引用不是值,不占存儲空間,聲明引用時,目標存儲狀引用不是值,不占存儲空間,聲明引用時,目標存儲狀態(tài)不會改變。態(tài)不會改變。說明:說明:(1) (1) 在一行上聲明多個引用型變量名時,要在每個在一行上聲明多個引用型變量名時,要在每個變量名前都加變量名前都加“& &”符號。符號。(2) (2) 引用不是變量,在程序中對引

17、用的存取都是對引用不是變量,在程序中對引用的存取都是對它所引用的變量的存取。它所引用的變量的存取。(3) (3) 一個變量被聲明為引用時必須進行初始化,除一個變量被聲明為引用時必須進行初始化,除非這個引用是用作函數(shù)的參數(shù)或返回值,為引用提非這個引用是用作函數(shù)的參數(shù)或返回值,為引用提供的初始值應(yīng)為變量。供的初始值應(yīng)為變量。引用一旦被初始化引用一旦被初始化, ,就不能再就不能再重新賦值。重新賦值。(4) (4) 不能說明數(shù)組元素的類型為引用數(shù)組。例如:不能說明數(shù)組元素的類型為引用數(shù)組。例如:intint &a5; / &a5; / 錯誤錯誤(5) (5) 引用與指針不同。指針的內(nèi)容

18、或值是某一變量的內(nèi)存單引用與指針不同。指針的內(nèi)容或值是某一變量的內(nèi)存單元地址,而引用則與初始化它的變量具有相同的內(nèi)存單元地元地址,而引用則與初始化它的變量具有相同的內(nèi)存單元地址。指針是個變量,可以把它再賦值成其它的地址,然而,址。指針是個變量,可以把它再賦值成其它的地址,然而,建立引用時必須進行初始化并且決不會再指向其它不同的變建立引用時必須進行初始化并且決不會再指向其它不同的變量。量。(6)(6)一個變量引用的地址可以賦給一個指針;一個變量引用的地址可以賦給一個指針; intint a=3; a=3; intint &b=a; &b=a; intint * *pt=&

19、b;pt=&b;(6) 要注意區(qū)分引用運算符和地址運算符的區(qū)別要注意區(qū)分引用運算符和地址運算符的區(qū)別。例如:。例如: int num=50; int &ref=num; int *p=&ref;(7) 可以用一個引用初始化另一個引用可以用一個引用初始化另一個引用。例如:。例如: int num=50; int &ref1=num; int &ref2=ref1; ref2=100;/ num被修改為被修改為100其中其中ref2也是對也是對num的引用。的引用。(8) (8) 可以把可以把函數(shù)的參數(shù)說明成引用函數(shù)的參數(shù)說明成引用以建立函數(shù)參數(shù)的引用傳遞方

20、式。以建立函數(shù)參數(shù)的引用傳遞方式。(9) (9) 不能建立不能建立voidvoid型的引用型的引用(10)(10) 變量引用的地址可以賦給指針,如:變量引用的地址可以賦給指針,如: intint a=3; a=3; intint &b=a; &b=a; intint * *p=&b;p=&b;(11) (11) 指針變量可以有引用。指針變量可以有引用。 int a=5; int *p=&a; int *&pt=p; / a指向變量指向變量b 【例例1.10】目標是實現(xiàn)兩個數(shù)據(jù)的值互換。目標是實現(xiàn)兩個數(shù)據(jù)的值互換。1.11 const1.11 co

21、nst修飾符修飾符#define PI 3.1415926#define PI 3.1415926const float PI=3.1415926; const float PI=3.1415926; #define#define定義的常量只是在預(yù)編譯時進行字符替換;定義的常量只是在預(yù)編譯時進行字符替換;constconst定義的常量是有類型的,也有地址,可以用指針指向這個值。定義的常量是有類型的,也有地址,可以用指針指向這個值。constconst定義的常量定義的常量有自己的數(shù)據(jù)類型有自己的數(shù)據(jù)類型,這樣,這樣C+C+編譯程序可編譯程序可以進行更加嚴格的類型檢查,具有良好的編譯時的檢測性。以

22、進行更加嚴格的類型檢查,具有良好的編譯時的檢測性。C+C+建議用建議用constconst取代取代#define#define定義常量。定義常量。注意:注意:(1)(1)使用使用constconst修飾符定義常量時,修飾符定義常量時,必須初始化必須初始化;(2) (2) 常量一旦被定義,在程序中任何地方都常量一旦被定義,在程序中任何地方都不能不能再更改再更改。(3) (3) 如果用如果用constconst定義的是一個整型常量,定義的是一個整型常量,intint可可以省略。以省略。 (4) (4) 函數(shù)參數(shù)也可以用函數(shù)參數(shù)也可以用constconst說明,用于保證實參說明,用于保證實參在該函數(shù)

23、內(nèi)部不被改動,大多數(shù)在該函數(shù)內(nèi)部不被改動,大多數(shù)C+C+編譯器能對具有編譯器能對具有constconst參數(shù)的函數(shù)進行更好的代碼優(yōu)化。例如,通過參數(shù)的函數(shù)進行更好的代碼優(yōu)化。例如,通過函數(shù)函數(shù)maxmax求出整型數(shù)組求出整型數(shù)組a100a100中的最大值,函數(shù)原型中的最大值,函數(shù)原型應(yīng)該是:應(yīng)該是: intint max(constmax(const intint* *pa);pa); 這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即這樣做的目的是確保原數(shù)組的數(shù)據(jù)不被破壞,即在函數(shù)中對數(shù)組元素的操作只許讀,不許寫。在函數(shù)中對數(shù)組元素的操作只許讀,不許寫。constconst與指針一起使用的組合情況與

24、指針一起使用的組合情況: :1.121.12字符串字符串文本處理是編程過程中一個非常重要的方面。在文本處理是編程過程中一個非常重要的方面。在C C語言中使用字符數(shù)語言中使用字符數(shù)組和字符指針實現(xiàn)字符串功能,但是在組和字符指針實現(xiàn)字符串功能,但是在C+C+中提供了一種既方便又好用的中提供了一種既方便又好用的stringstring類型。類型。n定義字符串;定義字符串;n對字符串變量賦值對字符串變量賦值; ;n字符串變量的輸入和輸出;字符串變量的輸入和輸出;n字符串變量的運算字符串變量的運算; ;n字符串數(shù)組字符串數(shù)組【例例1.17】字符串類字符串類string的使用。的使用。特別注意:使用字符串

25、的時候一定要有:特別注意:使用字符串的時候一定要有: #include 1.13 C+1.13 C+語言中函數(shù)的新特性語言中函數(shù)的新特性1.13.11.13.1 函數(shù)原型(函數(shù)原型(Function PrototypeFunction Prototype)1.13.21.13.2 內(nèi)聯(lián)(內(nèi)聯(lián)(inlineinline)函數(shù))函數(shù)1.13.31.13.3 函數(shù)重載(函數(shù)重載(overloadoverload)1.13.41.13.4 帶缺省參數(shù)的函數(shù)帶缺省參數(shù)的函數(shù)1.13.51.13.5 函數(shù)模板(函數(shù)模板(function templatefunction template)vC+C+要求為

26、每一個函數(shù)建立原型聲明要求為每一個函數(shù)建立原型聲明,用以說明,用以說明函數(shù)的名稱、函數(shù)的名稱、參數(shù)個數(shù)及類型、函數(shù)返回值的類型參數(shù)個數(shù)及類型、函數(shù)返回值的類型。(函數(shù)。(函數(shù)3 3要素)要素)v其主要目的是讓其主要目的是讓C+C+編譯程序進行類型檢查,即形參與實參的編譯程序進行類型檢查,即形參與實參的類型匹配檢查,以及返回值是否與原型相符,以維護程序的類型匹配檢查,以及返回值是否與原型相符,以維護程序的正確性。正確性。v函數(shù)原型聲明與函數(shù)的定義要在函數(shù)原型聲明與函數(shù)的定義要在函數(shù)的返回類型,函數(shù)名和函數(shù)的返回類型,函數(shù)名和參數(shù)的類型及數(shù)量參數(shù)的類型及數(shù)量這三條線上保持一致這三條線上保持一致。v

27、寫函數(shù)原型時,可以省略形參的名字,寫函數(shù)原型時,可以省略形參的名字,因為參數(shù)名對編譯器因為參數(shù)名對編譯器沒有意義,但如果取名恰當?shù)脑挘@些名字可以起到提示參沒有意義,但如果取名恰當?shù)脑挘@些名字可以起到提示參數(shù)用途的作用。數(shù)用途的作用。1.13.1 1.13.1 函數(shù)原型(函數(shù)原型(Function PrototypeFunction Prototype)1.13.2內(nèi)聯(lián)(inline)函數(shù)1 1)內(nèi)聯(lián)函數(shù)機制)內(nèi)聯(lián)函數(shù)機制在執(zhí)行程序過程中如果要進行函數(shù)調(diào)用,則系統(tǒng)要將程序當前的一些狀在執(zhí)行程序過程中如果要進行函數(shù)調(diào)用,則系統(tǒng)要將程序當前的一些狀態(tài)信息存到棧中,之后進行虛實結(jié)合,同時轉(zhuǎn)到函數(shù)的

28、代碼處去執(zhí)行函數(shù)體語態(tài)信息存到棧中,之后進行虛實結(jié)合,同時轉(zhuǎn)到函數(shù)的代碼處去執(zhí)行函數(shù)體語句,這些參數(shù)保存與傳遞的過程中需要時間和空間的開銷,使得程序執(zhí)行句,這些參數(shù)保存與傳遞的過程中需要時間和空間的開銷,使得程序執(zhí)行效率效率降低降低,特別是在程序,特別是在程序頻繁地進行函數(shù)調(diào)用頻繁地進行函數(shù)調(diào)用以及函數(shù)代碼段比較少時,這個問題以及函數(shù)代碼段比較少時,這個問題會變得更為嚴重。會變得更為嚴重。2 2)內(nèi)聯(lián)函數(shù)的機理)內(nèi)聯(lián)函數(shù)的機理使用內(nèi)聯(lián)函數(shù)是一種用使用內(nèi)聯(lián)函數(shù)是一種用空間換時間空間換時間的措施,若內(nèi)聯(lián)函數(shù)較長,且調(diào)用太的措施,若內(nèi)聯(lián)函數(shù)較長,且調(diào)用太頻繁時,程序?qū)⒓娱L很多。因此,通常頻繁時,程序

29、將加長很多。因此,通常只有較短的函數(shù)才定義為內(nèi)聯(lián)函數(shù)只有較短的函數(shù)才定義為內(nèi)聯(lián)函數(shù),對,對于較長的函數(shù)最好作為一般函數(shù)處理。于較長的函數(shù)最好作為一般函數(shù)處理。內(nèi)置函數(shù)、內(nèi)嵌函數(shù)、內(nèi)聯(lián)函數(shù)只是翻譯不同,本質(zhì)是相同的!內(nèi)置函數(shù)、內(nèi)嵌函數(shù)、內(nèi)聯(lián)函數(shù)只是翻譯不同,本質(zhì)是相同的!【例1.13】內(nèi)聯(lián)函數(shù)的使用。一般情況下,我們對內(nèi)聯(lián)函數(shù)做如下的一般情況下,我們對內(nèi)聯(lián)函數(shù)做如下的限制:限制: (1) (1) 不能有遞歸不能有遞歸 (2) (2) 不能包含靜態(tài)數(shù)據(jù)不能包含靜態(tài)數(shù)據(jù) (3) (3) 不能包含循環(huán)不能包含循環(huán) (4) (4) 不能包含不能包含switchswitch和和gotogoto語句語句 (

30、5) (5) 不能包含數(shù)組不能包含數(shù)組 若一個內(nèi)聯(lián)函數(shù)定義不滿足以上限制,則編譯系統(tǒng)把它當若一個內(nèi)聯(lián)函數(shù)定義不滿足以上限制,則編譯系統(tǒng)把它當作普通函數(shù)對待。作普通函數(shù)對待?!咀ⅰ績?nèi)聯(lián)函數(shù)的使用與帶參宏定義的區(qū)別?!纠?.13】 【例1.14】 內(nèi)聯(lián)函數(shù)的使用。 1.13.2內(nèi)聯(lián)(inline)函數(shù)1.13.31.13.3函數(shù)重載(函數(shù)重載(overloadoverload)C+C+編譯系統(tǒng)允許為兩個或兩個以上的函數(shù)具有編譯系統(tǒng)允許為兩個或兩個以上的函數(shù)具有相同的函數(shù)名,但是相同的函數(shù)名,但是形參的個數(shù)形參的個數(shù)或者或者形參的類型形參的類型不相不相同同,這就是所謂的,這就是所謂的函數(shù)重載函數(shù)重載

31、。函數(shù)重載函數(shù)重載無需特別聲明無需特別聲明,只要所定義的函數(shù)與已,只要所定義的函數(shù)與已經(jīng)定義的同名函數(shù)形參形式不完全相同,經(jīng)定義的同名函數(shù)形參形式不完全相同,C+C+編譯器編譯器就認為是函數(shù)的重載。編譯系統(tǒng)會根據(jù)實參和形參的就認為是函數(shù)的重載。編譯系統(tǒng)會根據(jù)實參和形參的類型及個數(shù)的最佳匹配,自動確定調(diào)用哪一個函數(shù)。類型及個數(shù)的最佳匹配,自動確定調(diào)用哪一個函數(shù)。【例例1.61.6】重載函數(shù)應(yīng)用舉例。重載函數(shù)應(yīng)用舉例。 在使用重載函數(shù)時要注意在使用重載函數(shù)時要注意: : 僅返回值類型不同不能重載僅返回值類型不同不能重載 不可以定義兩個具有相同名稱、相同參不可以定義兩個具有相同名稱、相同參數(shù)類型和相

32、同參數(shù)個數(shù),只是函數(shù)返回值不同的函數(shù)。數(shù)類型和相同參數(shù)個數(shù),只是函數(shù)返回值不同的函數(shù)。 intint func(intfunc(int x) x); float float func(intfunc(int x) x); 如果某個函數(shù)參數(shù)有缺省值,必須保證其參數(shù)缺省后調(diào)用形式不與其如果某個函數(shù)參數(shù)有缺省值,必須保證其參數(shù)缺省后調(diào)用形式不與其它函數(shù)混淆。它函數(shù)混淆。 intint f(intf(int a, float b); a, float b); void void f(intf(int a, float b, a, float b, intint c=0); c=0);函數(shù)調(diào)用語句:函數(shù)

33、調(diào)用語句: f(10, 2.0);f(10, 2.0);具有二義性,既可以調(diào)用第一個函數(shù),也可以調(diào)用第二個函數(shù),編譯器不具有二義性,既可以調(diào)用第一個函數(shù),也可以調(diào)用第二個函數(shù),編譯器不能根據(jù)參數(shù)的形式確定到底調(diào)用哪一個。能根據(jù)參數(shù)的形式確定到底調(diào)用哪一個。【例例1.7】重載函數(shù)應(yīng)用再舉例。重載函數(shù)應(yīng)用再舉例。如果在函數(shù)聲明或函數(shù)定義中為形參指定一個缺省值,則如果在函數(shù)聲明或函數(shù)定義中為形參指定一個缺省值,則稱此函數(shù)為稱此函數(shù)為帶缺省參數(shù)的函數(shù)。帶缺省參數(shù)的函數(shù)。當函數(shù)調(diào)用發(fā)生后,在形參表中等號后的各當函數(shù)調(diào)用發(fā)生后,在形參表中等號后的各“缺省值缺省值”將將起實參的傳遞作用。起實參的傳遞作用。#

34、include using namespace std;int main()float area(float w,float h=5.0,float longth=4.5);coutarea(20)endl;coutarea(20,10)endl;float area(float w,float h,float longth)return w*h*longth;1)如果函數(shù)有多個缺省參數(shù),則缺省參數(shù)必須是從右向左)如果函數(shù)有多個缺省參數(shù),則缺省參數(shù)必須是從右向左定義,并且在一個缺省參數(shù)的右邊不能有未指定缺省值的定義,并且在一個缺省參數(shù)的右邊不能有未指定缺省值的參數(shù)。參數(shù)。 下面形式均是錯誤的:

35、下面形式均是錯誤的: void fun(int a=3,int b=6,int c,int d); void fun(int a=65,int b=3,int c,int d=3);2)需要)需要特別注意特別注意的是:如果在函數(shù)原型的聲明中設(shè)置了函的是:如果在函數(shù)原型的聲明中設(shè)置了函數(shù)參數(shù)的缺省值,則是否可在函數(shù)定義的頭部重復(fù)設(shè)置,數(shù)參數(shù)的缺省值,則是否可在函數(shù)定義的頭部重復(fù)設(shè)置,要根據(jù)不同的編譯系統(tǒng)而定。要根據(jù)不同的編譯系統(tǒng)而定。(思考:如果函數(shù)原型聲明中思考:如果函數(shù)原型聲明中無缺省值,定義時有,正確嗎?無缺省值,定義時有,正確嗎?)2.13.52.13.5函數(shù)模板(函數(shù)模板(functi

36、on templatefunction template)所謂函數(shù)模板所謂函數(shù)模板是一種使用不具體指定類型的參數(shù)來產(chǎn)生是一種使用不具體指定類型的參數(shù)來產(chǎn)生一系列函數(shù)的機制一系列函數(shù)的機制,是,是C+C+的一個重要特征。的一個重要特征。函數(shù)模板函數(shù)模板是以一種完全通用的方法來設(shè)計函數(shù),而不必是以一種完全通用的方法來設(shè)計函數(shù),而不必預(yù)先說明將被使用的每個數(shù)據(jù)的數(shù)據(jù)類型。預(yù)先說明將被使用的每個數(shù)據(jù)的數(shù)據(jù)類型。函數(shù)模板的使用過程:函數(shù)模板的使用過程:使用函數(shù)模板的方法是先說明使用函數(shù)模板的方法是先說明函函數(shù)模板數(shù)模板,然后實例化成相應(yīng)的,然后實例化成相應(yīng)的模板函數(shù)模板函數(shù)進行調(diào)用執(zhí)行。進行調(diào)用執(zhí)行。 C+C+提供的函數(shù)模板可以定義一個對任何類型變量進行提供的函數(shù)模板可以定義一個對任何類型變量進行操作的函數(shù),從而大大增強了函數(shù)設(shè)計的通用性。操作的函數(shù),從而大大增強了函數(shù)設(shè)計的通用性?!纠?. 8】函數(shù)模板的說明形式:函數(shù)模板的說明形式: 模板類型參數(shù)模板類型參數(shù)(template type parameter)(template type parameter)代表一種類型,代表一種類型,由關(guān)鍵字由關(guān)鍵字 class class 或或 type

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論