版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、主要內(nèi)容2.5c+輸入輸出語(yǔ)句3.4C串與string3.6向量3.7引用5.6函數(shù)重載6.1內(nèi)聯(lián)函數(shù)2.5c+輸入輸出(1) 對(duì)系統(tǒng)指定的標(biāo)準(zhǔn)設(shè)備的輸入和輸出。即從鍵盤輸入數(shù)據(jù),輸出到顯示器屏幕。這種輸入輸出稱為標(biāo)準(zhǔn)的輸入輸出,簡(jiǎn)稱標(biāo)準(zhǔn)I/O。(2) 以外存磁盤文件為對(duì)象進(jìn)行輸入和輸出,即從磁盤文件輸入數(shù)據(jù),數(shù)據(jù)輸出到磁盤文件。以外存文件為對(duì)象的輸入輸出稱為文件的輸入輸出,簡(jiǎn)稱文件I/O。(3) 對(duì)內(nèi)存中指定的空間進(jìn)行輸入和輸出。通常指定一個(gè)字符數(shù)組作為存儲(chǔ)空間(實(shí)際上可以利用該空間存儲(chǔ)任何信息)。這種輸入和輸出稱為字符串輸入輸出,簡(jiǎn)稱串I/O。C+的輸入輸出流 C+的輸入輸出流是指由若干字
2、節(jié)組成的字節(jié)序列,這些字節(jié)中的數(shù)據(jù)按順序從一個(gè)對(duì)象傳送到另一對(duì)象。流表示了信息從源到目的端的流動(dòng)。在輸入操作時(shí),字節(jié)流從輸入設(shè)備(如鍵盤、磁盤)流向內(nèi)存,在輸出操作時(shí),字節(jié)流從內(nèi)存流向輸出設(shè)備(如屏幕、打印機(jī)、磁盤等)。流中的內(nèi)容可以是ASCII字符、二進(jìn)制形式的數(shù)據(jù)、圖形圖像、數(shù)字音頻視頻或其他形式的信息。 實(shí)際上,在內(nèi)存中為每一個(gè)數(shù)據(jù)流開(kāi)辟一個(gè)內(nèi)存緩沖區(qū),用來(lái)存放流中的數(shù)據(jù)。流是與內(nèi)存緩沖區(qū)相對(duì)應(yīng)的,或者說(shuō),緩沖區(qū)中的數(shù)據(jù)就是流。 在C+中,輸入輸出流被定義為類。C+的I/O庫(kù)中的類稱為流類(stream class)。用流類定義的對(duì)象稱為流對(duì)象。 cout和cin并不是C+語(yǔ)言中提供的語(yǔ)
3、句,它們是iostream類的對(duì)象,在未學(xué)習(xí)類和對(duì)象時(shí),在不致引起誤解的前提下,為敘述方便,把它們稱為cout語(yǔ)句和cin語(yǔ)句。C+編譯系統(tǒng)提供了用于輸入輸出的iostream類庫(kù)。iostream這個(gè)單詞是由3個(gè)部分組成的,即i-o-stream,意為輸入輸出流。在iostream類庫(kù)中包含許多用于輸入輸出的類。與iostream類庫(kù)有關(guān)的頭文件iostream包含了對(duì)輸入輸出流進(jìn)行操作所需的基本信息。fstream用于用戶管理的文件的I/O操作。strstream用于字符串流I/O。stdiostream用于混合使用C和C+的I/O機(jī)制時(shí)。iomanip在使用格式化I/O時(shí)應(yīng)包含此頭文件。
4、標(biāo)準(zhǔn)輸出流1. cout流對(duì)象cout是console output的縮寫(xiě),意為在控制臺(tái)(終端顯示器)的輸出。2. cerr流對(duì)象cerr流對(duì)象是標(biāo)準(zhǔn)錯(cuò)誤流。cerr流已被指定為與顯示器關(guān)聯(lián)。3. clog流對(duì)象clog流對(duì)象也是標(biāo)準(zhǔn)錯(cuò)誤流,它是console log的縮寫(xiě)。它的作用和cerr相同,都是在終端顯示器上顯示出錯(cuò)信息。區(qū)別: cerr是不經(jīng)過(guò)緩沖區(qū),直接向顯示器上輸出有關(guān)信息,而clog中的信息存放在緩沖區(qū)中,緩沖區(qū)滿后或遇endl時(shí)向顯示器輸出。Cout 格式:cout表達(dá)式表達(dá)式nendl是輸出是的控制符,表示換行系統(tǒng)自動(dòng)判別輸出項(xiàng)的數(shù)據(jù)類型輸出數(shù)據(jù)時(shí),不能只用一個(gè)插入運(yùn)算符“
5、”輸出多個(gè)數(shù)據(jù)項(xiàng)所有類型的數(shù)據(jù)在輸出時(shí),數(shù)據(jù)間均無(wú)間隔,如需要,則需在數(shù)據(jù)間插入相應(yīng)的間隔符輸出多個(gè)表達(dá)式的值時(shí),可以寫(xiě)成多個(gè)cout語(yǔ)句來(lái)實(shí)現(xiàn)例 用控制符控制輸出格式。#include #include /不要忘記包含此頭文件using namespace std;int main()int a; couta; coutdec:decaendl; /以十進(jìn)制形式輸出整數(shù) couthex:hexaendl; /以十六進(jìn)制形式輸出整數(shù)a coutoct:setbase(8)aendl; /以八進(jìn)制形式輸出整數(shù)a char *pt=China; /pt指向字符串China coutsetw(10)
6、ptendl; /指定域?qū)挒?0,輸出字符串coutsetfill(*)setw(10)ptendl; /指定域?qū)?0,輸出字符串,空白處以*填充 double pi=22.0/7.0; /計(jì)算pi值 coutsetiosflags(ios:scientific)setprecision(8);/按指數(shù)形式輸出,8位小數(shù) coutpi=piendl; /輸出pi值 coutpi=setprecision(4)piendl; /改為4位小數(shù) coutpi=setiosflags(ios:fixed)pi”從流中提取數(shù)據(jù)。cin 格式:cin變量1變量n1)輸入任何數(shù)據(jù)時(shí),空格符、制表符、回車符都
7、作為輸入數(shù)據(jù)的間隔符2)輸入數(shù)據(jù)時(shí),變量時(shí)變量可以在同一個(gè)語(yǔ)句中,也可以分成多個(gè)語(yǔ)句3)系統(tǒng)會(huì)根據(jù)變量的類型從輸入流中提取相應(yīng)長(zhǎng)度的字節(jié)4)還可以進(jìn)行字符串?dāng)?shù)據(jù)的輸入#include using namespace std;void main(void) char ch1,ch2,ch3; int a,b; float x,y; cinch1ch2ch3; cinab; cinxy; coutch1ch2ch3endl; couta bendl; coutx y endl; return 0;文件流的輸入出操作與標(biāo)準(zhǔn)輸入出基本相同,只是需要以一定方式打開(kāi)和關(guān)閉如,將文件a.in打開(kāi),逐行讀入字
8、符,輸出到文件a.out: ifstream in(“a.in”); ofstream out(“a.out”); forfor(string s; getline(in, s); ) outsendl;其中文件流讀入操作總是伴隨著狀態(tài)返回,判斷狀 態(tài) 就 可 以 確 定 文 件 是 否 正 常 讀 入 , 如getline(in,s)當(dāng)讀到文件尾時(shí),便返回false,以使循環(huán)結(jié)束3.4C串與string C+提供了一種新的數(shù)據(jù)類型字符串類型(string類型),在使用方法上,它和char、int類型一樣,可以用來(lái)定義變量,這就是字符串變量用一個(gè)名字代表一個(gè)字符序列。 實(shí)際上,string并不
9、是C+語(yǔ)言本身具有的基本類型,它是在C+標(biāo)準(zhǔn)庫(kù)中聲明的一個(gè)字符串類,用這種類可以定義對(duì)象。每一個(gè)字符串變量都是string類的一個(gè)對(duì)象。1. 定義字符串變量 和其他類型變量一樣,字符串變量必須先定義后使用,定義字符串變量要用類名string。如string string1; /定義string1為字符串變量string string2=China; /定義string2同時(shí)對(duì)其初始化應(yīng)當(dāng)注意: 要使用string類的功能時(shí),必須在本文件的開(kāi)頭將C+標(biāo)準(zhǔn)庫(kù)中的string頭文件包含進(jìn)來(lái),即應(yīng)加上#include /注意頭文件名不是string.h2. 對(duì)字符串變量的賦值在定義了字符串變量后,可以
10、用賦值語(yǔ)句對(duì)它賦予一個(gè)字符串常量,如string1=Canada;既可以用字符串常量給字符串變量賦值,也可以用一個(gè)字符串變量給另一個(gè)字符串變量賦值。如 string2=string1; /假設(shè)string2和string1均已定義為字符串變量不要求string2和string1長(zhǎng)度相同,假如string2原來(lái)是China,string1原來(lái)是Canada,賦值后string2也變成Canada。在定義字符串變量時(shí)不需指定長(zhǎng)度,長(zhǎng)度隨其中的字符串長(zhǎng)度而改變。3. 字符串變量的輸入輸出 可以在輸入輸出語(yǔ)句中用字符串變量名,輸入輸出字符串,如cin string1; /從鍵盤輸入一個(gè)字符串給字符串變
11、量string1cout string2; /將字符串string2輸出4字符串變量的運(yùn)算字符串復(fù)制用賦值號(hào)字符串連接用加號(hào)字符串比較直接用關(guān)系運(yùn)算符3.6向量 向量與數(shù)組的共同特征是元素的排列在邏輯上是線性序列結(jié)構(gòu),可以用下標(biāo)進(jìn)行訪問(wèn) 向量可以按需創(chuàng)建,拷貝創(chuàng)建,局部拷貝創(chuàng)建,異類拷貝和創(chuàng)建靈活的初始化 隨意擴(kuò)容和元素增減 可通過(guò)異常來(lái)進(jìn)行下標(biāo)溢出追蹤和處理可比較 等等int n=10;int t5=1,2,3,4,5;vector a(n); /按需創(chuàng)建按需創(chuàng)建vector b(10, 1); /元素賦全,元素賦全,靈活的初始化靈活的初始化vector c(b); / 整體拷貝創(chuàng)建整體拷貝
12、創(chuàng)建vector f(t, t+5); /異類拷貝創(chuàng)異類拷貝創(chuàng)建建vector d(b.begin(), b.begin()+3);/局部拷貝創(chuàng)建局部拷貝創(chuàng)建d為為b的的前個(gè)元素前個(gè)元素a.assign(100); /動(dòng)態(tài)擴(kuò)容至100個(gè)元素向量常用操作a.assign(b.begin(), b.begin()+3); / b的前的前3個(gè)元素賦給個(gè)元素賦給aa.assign(4,2);/ a向量含向量含4個(gè)元素,全初個(gè)元素,全初始化為始化為2int x = a.back(); / a的最后一個(gè)元素賦的最后一個(gè)元素賦給變量給變量xa.clear(); / a向量清空(不再有元素)向量清空(不再有元
13、素)if(a.empty() cout”empty”; / a判空操作判空操作int y = a.front(); / a的第一個(gè)元素賦的第一個(gè)元素賦給變量給變量y向量常用操作a.pop_back(); / 刪除a的最后一個(gè)元素a.push_back(5); / a最后插入一個(gè)元素,其值為5a.resize(10); / a元素個(gè)數(shù)調(diào)至10。多刪少補(bǔ),其值隨機(jī)a.resize(10,2);/a元素個(gè)數(shù)調(diào)至10。多刪少補(bǔ),新添元素初值為2if(a=b) cout”equal”; / a與b的向量比較操作3.7引用 對(duì)變量起另外一個(gè)名字對(duì)變量起另外一個(gè)名字 (外號(hào)外號(hào)),這個(gè)名字稱,這個(gè)名字稱為該
14、變量的引用。為該變量的引用。 & = ; 其中其中原變量名原變量名必須是一個(gè)已定義過(guò)的變量必須是一個(gè)已定義過(guò)的變量。如:。如:int max ;int &refmax=max;refmax并沒(méi)有重新在內(nèi)存中開(kāi)辟單元,只是并沒(méi)有重新在內(nèi)存中開(kāi)辟單元,只是引引用用max的單元。的單元。max與與refmax在內(nèi)存中占用同在內(nèi)存中占用同一地址一地址,即同一地址兩個(gè)名字即同一地址兩個(gè)名字。int max ;int &refmax=max;max=5 ;refmax=10;refmax=max+refmax;maxrefmax51020max與與refmax同一地址同一地址1、引
15、用在定義的時(shí)候要初始化。、引用在定義的時(shí)候要初始化。int &refmax;int &refmax=max;2、對(duì)引用的操作就是對(duì)被引用的變、對(duì)引用的操作就是對(duì)被引用的變量的操作。量的操作。對(duì)引用類型的變量,說(shuō)明以下幾點(diǎn):對(duì)引用類型的變量,說(shuō)明以下幾點(diǎn):錯(cuò)誤,沒(méi)有具體的引用對(duì)象錯(cuò)誤,沒(méi)有具體的引用對(duì)象max是已定義過(guò)的變量是已定義過(guò)的變量3、 引用類型變量的初始化值不能是引用類型變量的初始化值不能是一個(gè)常數(shù)。一個(gè)常數(shù)。如:如:int &ref1 = 5; / 是錯(cuò)誤的。是錯(cuò)誤的。int &ref=i;4、引用同變量一樣有地址,可以對(duì)、引用同變量一樣有地址,可以對(duì)
16、其地址進(jìn)行操作,即將其地址賦給其地址進(jìn)行操作,即將其地址賦給一指針。一指針。int a, *p;int &m=a;p=&m;*p=10;指針與引用的區(qū)別:指針與引用的區(qū)別:1、指針是通過(guò)地址、指針是通過(guò)地址間接間接訪問(wèn)某個(gè)變?cè)L問(wèn)某個(gè)變量,而引用是通過(guò)別名量,而引用是通過(guò)別名直接直接訪問(wèn)某訪問(wèn)某個(gè)變量。個(gè)變量。2、引用必須初始化,而、引用必須初始化,而一旦被初始一旦被初始化后不得再作為其它變量的別名化后不得再作為其它變量的別名。以下的聲明是非法的以下的聲明是非法的1、企圖建立數(shù)組的引用、企圖建立數(shù)組的引用 int & a9;2、企圖建立指向引用的指針、企圖建立指向引用的指
17、針 int & *p;3、企圖建立引用的引用、企圖建立引用的引用 int & &px;引用的用途主要是用來(lái)作引用的用途主要是用來(lái)作函數(shù)的參數(shù)函數(shù)的參數(shù)或或函數(shù)的返回值。函數(shù)的返回值。void change(int &x, int &y)/x,y是實(shí)參是實(shí)參a,b的別名的別名 int t; t=x; x=y; y=z;void main(void) int a=3,b=5; change(a,b); /實(shí)參為變量實(shí)參為變量 coutatbendl; const類型變量類型變量 當(dāng)用const限制說(shuō)明標(biāo)識(shí)符時(shí),表示所說(shuō)明的數(shù)據(jù)類型為常量類型??煞譃閏onst
18、型常量和const型指針??捎胏onst限制定義標(biāo)識(shí)符量,如:const int MaxLine =1000;const float Pi=3.1415926 用const定義的標(biāo)識(shí)符常量時(shí),一定要對(duì)其初始化。在說(shuō)明時(shí)進(jìn)行初始化是對(duì)這種常量置值的唯一方法 ,不能用賦值運(yùn)算符對(duì)這種常量進(jìn)行賦值。如:MaxLine =35; const 型指針1)禁寫(xiě)指針聲明語(yǔ)句格式為: 數(shù)據(jù)類型 * const 指針變量名如:int r=6; int * const pr=&r;則指針pr被禁寫(xiě),即pr將始終指向一個(gè)地址,成為一個(gè)指針常量。它將不能再作為左值而放在賦值號(hào)的左邊。void main(voi
19、d) int a,b; int *const pa=&a; /一定要賦初值,pa是常量,不能在程序中/被改變 *pa=10;/可以間接引用 pa=&b;/非法,pa為常量2)禁寫(xiě)間接引用聲明語(yǔ)句格式如下: const 數(shù)據(jù)類型 *指針變量名;所聲明的指針指向一禁寫(xiě)的實(shí)體,即間接引用不能被改寫(xiě)。如: const int *p;所以程序中不能出現(xiàn)諸如 *p= 的語(yǔ)句,但指針p并未被禁寫(xiě),因而可對(duì)指針p進(jìn)行改寫(xiě)。void main(void) int a=3,b=5; const int *pa=&b; /可以不賦初值 pa=&a;/指針變量可以重新賦值 cout*p
20、aendl; /輸出3 *pa=10;/非法,指針指向的內(nèi)容不能賦值 a=100;/變量可以重新賦值 cout*paendl; /輸出1003)禁寫(xiě)指針又禁寫(xiě)間接引用將上面兩種情況結(jié)合起來(lái),聲明語(yǔ)句為下面的格式const 數(shù)據(jù)類型 *const 指針變量名如:const int *const px=&x說(shuō)明:px是一個(gè)指針常量,它指向一禁寫(xiě)的實(shí)體,并且指針本身也被禁寫(xiě),諸如:px= *px= 此類的語(yǔ)句都是非法的。5.6函數(shù)的重載函數(shù)重載:函數(shù)重載:一組概念相同,處理對(duì)象(參數(shù))一組概念相同,處理對(duì)象(參數(shù))不同的過(guò)程,出于方便編程的目的,用同一不同的過(guò)程,出于方便編程的目的,用同一個(gè)
21、函數(shù)名字來(lái)命名的技術(shù)稱為函數(shù)重載個(gè)函數(shù)名字來(lái)命名的技術(shù)稱為函數(shù)重載參數(shù)默認(rèn):參數(shù)默認(rèn):一個(gè)函數(shù),既可以嚴(yán)謹(jǐn)和地道的一個(gè)函數(shù),既可以嚴(yán)謹(jǐn)和地道的調(diào)用,也可以省略參數(shù),輕靈地調(diào)用,達(dá)到調(diào)用,也可以省略參數(shù),輕靈地調(diào)用,達(dá)到此種方便編程目的的技術(shù)稱為參數(shù)默認(rèn)此種方便編程目的的技術(shù)稱為參數(shù)默認(rèn)重載與參數(shù)默認(rèn):重載與參數(shù)默認(rèn):它們都是通過(guò)參數(shù)的變化它們都是通過(guò)參數(shù)的變化來(lái)分辨處理任務(wù)的不同如果參數(shù)決定了不來(lái)分辨處理任務(wù)的不同如果參數(shù)決定了不同的處理過(guò)程,則應(yīng)重載,否則參數(shù)默認(rèn)更同的處理過(guò)程,則應(yīng)重載,否則參數(shù)默認(rèn)更簡(jiǎn)捷一些簡(jiǎn)捷一些函數(shù)的重載 在編程時(shí),有時(shí)我們要實(shí)現(xiàn)的是同一類的功能,只是有些細(xì)節(jié)不同。例
22、如希望從3個(gè)數(shù)中找出其中的最大者,而每次求最大數(shù)時(shí)數(shù)據(jù)的類型不同,可能是3個(gè)整數(shù)、3個(gè)雙精度數(shù)或3個(gè)長(zhǎng)整數(shù)。程序設(shè)計(jì)者往往會(huì)分別設(shè)計(jì)出3個(gè)不同名的函數(shù),其函數(shù)原型為:函數(shù)的重載int max1(int a,int b, int c); /求3個(gè)整數(shù)中的最大者double max2(double a,double b,double c); /求3個(gè)雙精度數(shù)中最大者long max3(long a,long b,long c); /求3個(gè)長(zhǎng)整數(shù)中的最大者C+允許用同一函數(shù)名定義多個(gè)函數(shù),這些函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)類型不同。這就是函數(shù)的重載。即對(duì)一個(gè)函數(shù)名重新賦予它新的含義,使一個(gè)函數(shù)名可以多用。例求
23、3個(gè)數(shù)中最大的數(shù)(分別考慮整數(shù)、雙精度數(shù)、長(zhǎng)整數(shù)的情況)。#include using namespace std;int main( )int max(int a,int b,int c); /函數(shù)聲明double max(double a,double b,double c); long max(long a,long b,long c); int i1,i2,i3,i; cini1i2i3; /輸入3個(gè)整數(shù) i=max(i1,i2,i3); /求3個(gè)整數(shù)中的最大者 couti_max=iendl; couti_max=id1d2d3; /輸入3個(gè)雙精度數(shù) d=max(d1,d2,d3);
24、 /求3個(gè)雙精度數(shù)中的最大者 coutd_max=dg1g2g3; /輸入3個(gè)長(zhǎng)整數(shù) g=max(g1,g2,g3); /求3個(gè)長(zhǎng)整數(shù)中的最大者 coutg_max=ga) a=b; if(ca) a=c; return a;double max(double a,double b,double c) if(ba) a=b; if(ca) a=c; return a;long max(long a,long b,long c) if(ba) a=b; if(ca) a=c; return a;運(yùn)行情況如下:185 -76 567 (輸入3個(gè)整數(shù))56.87 90.23 -3214.78 (輸入
25、3個(gè)實(shí)數(shù))67854 -912456 673456 (輸入3個(gè)長(zhǎng)整數(shù))i_max=567 (輸出3個(gè)整數(shù)的最大值)d_max=90.23 (輸出3個(gè)雙精度數(shù)的最大值)g_max=673456 (輸出3個(gè)長(zhǎng)整數(shù)的最大值)上例3個(gè)max函數(shù)的函數(shù)體是相同的,其實(shí)重載函數(shù)并不要求函數(shù)體相同。重載函數(shù)除了允許參數(shù)類型不同以外,還允許參數(shù)的個(gè)數(shù)不同。例 編寫(xiě)一個(gè)程序,用來(lái)求兩個(gè)整數(shù)或3個(gè)整數(shù)中的最大數(shù)。如果輸入兩個(gè)整數(shù),程序就輸出這兩個(gè)整數(shù)中的最大數(shù),如果輸入3個(gè)整數(shù),程序就輸出這3個(gè)整數(shù)中的最大數(shù)。#include using namespace std;int main( )int max(int
26、a,int b,int c); /函數(shù)聲明 int max(int a,int b); /函數(shù)聲明 int a=8,b=-12,c=27; coutmax(a,b,c)=max(a,b,c)endl; coutmax(a,b)=max(a,b)a) a=b; if(ca) a=c; return a;int max(int a,int b) if(ab) return a;else return b;運(yùn)行情況如下:max(a,b,c)=27max(a,b)=8兩次調(diào)用max函數(shù)的參數(shù)個(gè)數(shù)不同,系統(tǒng)就根據(jù)參數(shù)的個(gè)數(shù)找到與之匹配的函數(shù)并調(diào)用它。參數(shù)的個(gè)數(shù)和類型可以都不同。但不能只有函數(shù)的類型不同而
27、參數(shù)的個(gè)數(shù)和類型相同。int f(int); /函數(shù)返回值為整型long f(int); /函數(shù)返回值為長(zhǎng)整型void f(int); /函數(shù)無(wú)返回值在函數(shù)調(diào)用時(shí)都是同一形式,如“f(10)”。編譯系統(tǒng)無(wú)法判別應(yīng)該調(diào)用哪一個(gè)函數(shù)。重載函數(shù)的參數(shù)個(gè)數(shù)、參數(shù)類型或參數(shù)順序3者中必須至少有一種不同,函數(shù)返回值類型可以相同也可以不同。在使用重載函數(shù)時(shí),同名函數(shù)的功能應(yīng)當(dāng)相同或相近,不要用同一函數(shù)名去實(shí)現(xiàn)完全不相干的功能,雖然程序也能運(yùn)行,但可讀性不好,使人莫名其妙。有默認(rèn)參數(shù)的函數(shù)一般情況下,在函數(shù)調(diào)用時(shí)形參從實(shí)參那里取得值,因此實(shí)參的個(gè)數(shù)應(yīng)與形參相同。有時(shí)多次調(diào)用同一函數(shù)時(shí)用同樣的實(shí)參,C+提供簡(jiǎn)單
28、的處理辦法,給形參一個(gè)默認(rèn)值,這樣形參就不必一定要從實(shí)參取值了。如有一函數(shù)聲明float area(float r=6.5);指定r的默認(rèn)值為6.5,如果在調(diào)用此函數(shù)時(shí),確認(rèn)r的值為6.5,則可以不必給出實(shí)參的值, area( ); /相當(dāng)于area(6.5);area(7.5); /形參得到的值為7.5,而不是6.5如果有多個(gè)形參,可以使每個(gè)形參有一個(gè)默認(rèn)值,也可以只對(duì)一部分形參指定默認(rèn)值,另一部分形參不指定默認(rèn)值。如有一個(gè)求圓柱體體積的函數(shù),形參h代表圓柱體的高,r為圓柱體半徑。函數(shù)原型如下:float volume(float h,float r=12.5); /只對(duì)形參r指定默認(rèn)值12
29、.5函數(shù)調(diào)用可以采用以下形式: volume(45.6); /相當(dāng)于volume(45.6,12.5)volume(34.2,10.4) /h的值為34.2,r的值為10.4默認(rèn)形參值的說(shuō)明次序默認(rèn)形參值必須從右向左順序聲明,并且在默認(rèn)形參值的右面不能有非默認(rèn)形參值的參數(shù)。因?yàn)檎{(diào)用時(shí)實(shí)參取代形參是從左向右的順序。例:int add(int x,int y=5,int z=6); /正確int add(int x=1,int y=5,int z); /錯(cuò)誤int add(int x=1,int y,int z=6); /錯(cuò)誤默認(rèn)形參值與函數(shù)的調(diào)用位置調(diào)用出現(xiàn)在函數(shù)體實(shí)現(xiàn)之前時(shí),默認(rèn)形參值必須在函
30、數(shù)原形中給出;而當(dāng)調(diào)用出現(xiàn)在函數(shù)體實(shí)現(xiàn)之后時(shí),默認(rèn)形參值需在函數(shù)實(shí)現(xiàn)時(shí)給出。int add(int x=5,int y=6);void main(void) add( ); /調(diào)用在實(shí)現(xiàn)前int add(int x,int y) return x+y; int add(int x=5,int y=6) return x+y; void main(void) add(); /調(diào)用在實(shí)現(xiàn)后默認(rèn)形參值的作用域在相同的作用域內(nèi),默認(rèn)形參值的說(shuō)明應(yīng)保持唯一,但如果在不同的作用域內(nèi),允許說(shuō)明不同的默認(rèn)形參。例:int add(int x=1,int y=2);void main(void) int add
31、(int x=3,int y=4); add(); /使用局部默認(rèn)形參值(實(shí)現(xiàn)3+4)void fun(void) . add(); /使用全局默認(rèn)形參值(實(shí)現(xiàn)1+2)例 求2個(gè)或3個(gè)正整數(shù)中的最大數(shù),用帶有默認(rèn)參數(shù)的函數(shù)實(shí)現(xiàn)。#include using namespace std;int main( )int max(int a, int b, int c=0);int a,b,c; cinabc; coutmax(a,b,c)=max(a,b,c)endl; coutmax(a,b)=max(a,b)a) a=b; if(ca) a=c; return a;運(yùn)行情況如下:14 -56 1
32、35max(a,b,c)=135max(a,b)=14在使用帶有默認(rèn)參數(shù)的函數(shù)時(shí)有兩點(diǎn)要注意:(1) 如果函數(shù)的定義在函數(shù)調(diào)用之前,則應(yīng)在函數(shù)定義中給出默認(rèn)值。如果函數(shù)的定義在函數(shù)調(diào)用之后,則在函數(shù)調(diào)用之前需要有函數(shù)聲明,此時(shí)必須在函數(shù)聲明中給出默認(rèn)值,在函數(shù)定義時(shí)可以不給出默認(rèn)值。(2) 一個(gè)函數(shù)不能既作為重載函數(shù),又作為有默認(rèn)參數(shù)的函數(shù)。因?yàn)楫?dāng)調(diào)用函數(shù)時(shí)如果少寫(xiě)一個(gè)參數(shù),系統(tǒng)無(wú)法判定是利用重載函數(shù)還是利用默認(rèn)參數(shù)的函數(shù),出現(xiàn)二義性,系統(tǒng)無(wú)法執(zhí)行。內(nèi)置函數(shù)調(diào)用函數(shù)時(shí)需要一定的時(shí)間和空間的開(kāi)銷。圖表示函數(shù)調(diào)用的過(guò)程:圖4.5C+提供一種提高效率的方法,即在編譯時(shí)將所調(diào)用函數(shù)的代碼直接嵌入到主調(diào)
33、函數(shù)中,而不是將流程轉(zhuǎn)出去。這種嵌入到主調(diào)函數(shù)中的函數(shù)稱為內(nèi)置函數(shù)(inline function),又稱內(nèi)嵌函數(shù)。在有些書(shū)中把它譯成內(nèi)聯(lián)函數(shù)。指定內(nèi)置函數(shù)的方法很簡(jiǎn)單,只需在函數(shù)首行的左端加一個(gè)關(guān)鍵字 inline即可。例 函數(shù)指定為內(nèi)置函數(shù)。#include using namespace std;inline int max(int,int, int); /聲明函數(shù),注意左端有inlineint main( )int i=10,j=20,k=30,m; m=max(i,j,k); coutmax=ma) a=b; if(ca) a=c; return a;由于在定義函數(shù)時(shí)指定它為內(nèi)置函數(shù)
34、,因此編譯系統(tǒng)在遇到函數(shù)調(diào)用“max(i,j,k)”時(shí),就用max函數(shù)體的代碼代替“max(i,j,k)”,同時(shí)將實(shí)參代替形參。這樣,程序第6行 “m=max(i,j,k);”就被置換成if (ji) i=j;if(ki) i=k;m=i;注意: 可以在聲明函數(shù)和定義函數(shù)時(shí)同時(shí)寫(xiě)inline,也可以只在其中一處聲明inline,效果相同,都能按內(nèi)置函數(shù)處理。使用內(nèi)置函數(shù)可以節(jié)省運(yùn)行時(shí)間,但卻增加了目標(biāo)程序的長(zhǎng)度。內(nèi)置函數(shù)中不能包括復(fù)雜的控制語(yǔ)句,如循環(huán)語(yǔ)句和switch語(yǔ)句。應(yīng)當(dāng)說(shuō)明: 對(duì)函數(shù)作inline聲明,只是程序設(shè)計(jì)者對(duì)編譯系統(tǒng)提出的一個(gè)建議,也就是說(shuō)它是建議性的,而不是指令性的。并非
35、一經(jīng)指定為inline,編譯系統(tǒng)就必須這樣做。編譯系統(tǒng)會(huì)根據(jù)具體情況決定是否這樣做。歸納起來(lái),只有那些規(guī)模較小而又被頻繁調(diào)用的簡(jiǎn)單函數(shù),才適合于聲明為 inline函數(shù)。函數(shù)模板C+提供了函數(shù)模板(function template)。所謂函數(shù)模板,實(shí)際上是建立一個(gè)通用函數(shù),其函數(shù)類型和形參類型不具體指定,用一個(gè)虛擬的類型來(lái)代表。這個(gè)通用函數(shù)就稱為函數(shù)模板。凡是函數(shù)體相同的函數(shù)都可以用這個(gè)模板來(lái)代替,不必定義多個(gè)函數(shù),只需在模板中定義一次即可。在調(diào)用函數(shù)時(shí)系統(tǒng)會(huì)根據(jù)實(shí)參的類型來(lái)取代模板中的虛擬類型,從而實(shí)現(xiàn)了不同函數(shù)的功能??聪旅娴睦泳颓宄?。#include using namespace std;template /模板聲明,其中T為類型參數(shù)T max(T a,T b,T c) /定義一個(gè)通用函數(shù),用T作虛擬的類型名if(ba) a=b; if(ca) a=c; return a;int main( )int i1=185,i2=-76,i3=567,i; double d1=56.87,d2=90.23,d3=-3214.78,d; long g1=67854,g2=-912456,g3=67
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 材料員職責(zé)及主要任務(wù)
- 二零二五年度老舊房屋翻新后轉(zhuǎn)租合作協(xié)議3篇
- 小學(xué)科學(xué)課程中的寫(xiě)作技能培養(yǎng)
- 小學(xué)STAM課程中批判性思維的培養(yǎng)方法
- 2025年外研銜接版八年級(jí)物理上冊(cè)階段測(cè)試試卷含答案
- 2024年網(wǎng)站建設(shè)合同條款
- 2025年湘教新版八年級(jí)數(shù)學(xué)下冊(cè)月考試卷含答案
- 2025年華東師大版七年級(jí)化學(xué)上冊(cè)月考試卷
- 家用電器與環(huán)保如何選擇更環(huán)保的家電產(chǎn)品
- 《黃花柳微衛(wèi)星富集文庫(kù)構(gòu)建及標(biāo)記篩選》
- 高血壓急癥的緊急處理與護(hù)理
- 接地隱蔽記錄表
- 2023年1月自考07484社會(huì)保障學(xué)試題及答案含解析
- 餐飲咨詢服務(wù)合同范本
- 股權(quán)投資的基本概念與原理
- 最全海外常駐和出差補(bǔ)助管理規(guī)定
- 工廠消防安全培訓(xùn)知識(shí)課件
- 魯教版五四制-六年級(jí)英語(yǔ)下冊(cè)-Unit1-單元練習(xí)題+單元評(píng)價(jià)檢測(cè)(含答案)
- 耳部疾病影像學(xué)診斷與鑒別診斷課件
- 泌尿外科護(hù)理業(yè)務(wù)查房
- 豬肉配送售后服務(wù)方案
評(píng)論
0/150
提交評(píng)論