最新CC学习范本第13章C特有功能与字串_第1页
最新CC学习范本第13章C特有功能与字串_第2页
最新CC学习范本第13章C特有功能与字串_第3页
最新CC学习范本第13章C特有功能与字串_第4页
最新CC学习范本第13章C特有功能与字串_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、最新最新c & c+學習範本學習範本第第13章章 c+特有功能與字串特有功能與字串本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載13-1 inline 函式函式 linline 函式是函式是c+ 新增功能,傳統新增功能,傳統 c 所沒有。所沒有。l透過透過 inline 函式可加快程式執行速度。函式可加快程式執行速度。lc+ 編譯時,將編譯時,將 inline 函式內的敘述直接取代函式內的敘述直接取代該函式,會增加程式長度,但執行時可直接執該函式,會增加程式長度,但執行時可直接執行該敘述省掉進出函式時間。行該敘述省掉進出函式時間。l語法:語法:inline return_typ

2、e function_name(argument_list)p13-21.inline 函式寫法和一般函式一樣,必須在使用前函式寫法和一般函式一樣,必須在使用前先宣告,且必須在宣告或定義函式最前面加上先宣告,且必須在宣告或定義函式最前面加上 inline。2.若若 inline 函式內的敘述太長或是遞迴函式,函式內的敘述太長或是遞迴函式,編譯器會視為一般函式處理。編譯器會視為一般函式處理。3.使用使用 inline 函式由於有函式由於有 argument_list(引數串列引數串列)可對傳入資料的資料型態檢查是否有錯誤;可對傳入資料的資料型態檢查是否有錯誤;使用使用define 巨集則無法對資

3、料型態做檢查。巨集則無法對資料型態做檢查。4. return_type 是指函式傳回結果的資料型態。是指函式傳回結果的資料型態。5.function_name 代表函式名稱。代表函式名稱。p13-2inline int getsum(int, int) ; / / 宣告宣告inline int getsum (int _price,int _qty) / / 定義定義 return (_price*_qty); int main (int argc, char *argv) int sum = getsum(2, 3) ;/ 呼叫呼叫 return exit_success;/ filenam

4、e : inlinefun.cpp01 #include 02 #include 03 #include 04 using namespace std;06 inline void getsum(int, int) ;07 int main(int argc, char *argv)08 09 int price, qty;10 cout 全全ok書籍購物系統書籍購物系統 endl endl;11 cout price ;13 cout qty;p13-315 getsum(price, qty) ;16 system(pause);17 return exit_success;18 19 i

5、nline void getsum(int _price,int _qty) 20 21 if (_qty=100)22 23 cout 打八折打八折!一共一共 _price*_qty*0.8 元元!nn ;24 25 else26 27 cout 謝謝惠顧謝謝惠顧!一共一共 _price*_qty 元元!nn ;28 29 / filename : funoverloading.cpp01 #include 02 #include 03 #include 04 using namespace std;05 int max(int, int);06 float max(float, float

6、, float);08 int main(int argc, char *argv) 10 int x1=15,y1=75;11 float x2=56.4,y2=78.5,z2=24.8,; 12 cout max(15,75)= max(x1,y1) endl;13 cout max(56.4,78.5,24.8)= max(x2,y2,z2) endl b)? a:b ;23 return (max1); 24 26 float max(float a, float b, float c)27 28 float max2;29 if (ab) 31 if(bc)32 max2=c;33

7、else34 max2=b;35 36 else 38 if(ac)39 max2=c;40 else41 max2=a;42 43 return (max2); 44 13-3 參考變數參考變數 lc+ 可讓多個變數佔用相同的記憶體位址,此種變數一般可讓多個變數佔用相同的記憶體位址,此種變數一般稱之為參考變數,傳統的稱之為參考變數,傳統的c語言並沒有提供參考變數語言並沒有提供參考變數的功能。的功能。l若變數宣告時在變數之前加上若變數宣告時在變數之前加上&位址運算子,此時該位址運算子,此時該變數即被宣告為參考變數。變數即被宣告為參考變數。l使用變數時在變數之前加上使用變數時在變數之前加

8、上&位址運算子,此時該變位址運算子,此時該變數即會取得記憶體的位址。數即會取得記憶體的位址。l以下的簡例說明一般變數、參考變數、指標變數:以下的簡例說明一般變數、參考變數、指標變數: p13-6一般變數、參考變數、指標變數的差異:一般變數、參考變數、指標變數的差異: 1. int n1=2;2. int &n2=n1;3. int *n3=&n1;4. n2+;5. *n3+=1;6. cout n1= n1 ttn1位址位址 &n1 endl;7. cout n2= n2 ttn2位址位址 &n2 endl;8. cout n3= n3 tn3位址位址

9、 &n3 t*n3= *n3 endl;/ filename : refvariables.cpp01 #include 02 #include 03 #include 04 using namespace std;06 int main(int argc, char *argv)07 08 int a=168;09 int &b=a;10 cout a= a tta位址位址 &a endl;11 cout b= b ttb位址位址 &b endl;13 b+=100;14 cout -n ;15 cout a= a tta位址位址 &a endl;16

10、 cout b= b ttb位址位址 &b endl;18 cout -n ;19 int c=a;20 cout a= a tta位址位址 &a endl;21 cout c= c ttc位址位址 &c endl;p13-823 cout -n ;24 int *d=&a;25 *d+=100;26 cout a= a tta位址位址 &a endl;27 cout b= b ttb位址位址 &b endl;28 cout d= d td位址位址 &d endl;29 cout endl;30 system(pause);31 retu

11、rn exit_success;32 13-4 c+函式的傳址呼叫特有功能函式的傳址呼叫特有功能 l參考呼叫是參考呼叫是 c+ 另一種類似傳址呼叫方式。另一種類似傳址呼叫方式。l在定義或宣告參考呼叫函式的虛引數之前在定義或宣告參考呼叫函式的虛引數之前必須加上必須加上&位址運算子位址運算子l若使用參考呼叫的函式的實引數與引數都會佔用若使用參考呼叫的函式的實引數與引數都會佔用相同的記憶體位址。相同的記憶體位址。l下面是參考呼叫函式的宣告與定義寫法:下面是參考呼叫函式的宣告與定義寫法:void myfun(int &, double &); int main(int argc

12、, char *argv)int a=168;double b=1.23;myfun(a, b); return 0;void myfun(int &x, double &y)p13-10p13-11/ filename : calladdress.cpp01 #include 02 #include 03 #include 04 using namespace std;05 void calladdress(int*, int*);06 int main(int argc, char *argv)07 08 cout - 傳址呼叫傳址呼叫 -nn ;09 int a, b;1

13、0 a=10, b=12;11 cout 函式呼叫前函式呼叫前n ;12 cout a= a ttb= b endl ;13 cout a位址位址 &a tb位址位址 &b endl endl ;14 calladdress(&a, &b);1516 cout 函式呼叫後函式呼叫後n;17 cout a= a ttb= b endl ;18 cout a位址位址 &a tb位址位址 &b endl endl ;19 system(pause);20 return exit_success;21 22 void calladdress(int *x

14、, int *y)23 24 *x=4;25 *y=*x+*y;26 cout 函式呼叫n ;27 cout x= x ty= y endl ;28 cout *x= *x tt*y= *y endl ;29 cout x位址 &x ty位址 &y endl endl;30 p13-14/ filename : callref.cpp01 #include 02 #include 03 #include 04 using namespace std;05 void callref(int&, int&);06 int main(int argc, char *a

15、rgv)07 08 cout - 參參 考考 呼呼 叫叫 -nn ;09 int a, b;10 a=10, b=12;11 cout 函式呼叫前函式呼叫前n ;12 cout a= a ttb= b endl ;13 cout a位址位址 &a tb位址位址 &b endl endl ;1415 callref(a, b);1617 cout 函式呼叫後函式呼叫後n ;18 cout a= a ttb= b endl ;19 cout a位址位址 &a tb位址位址 &b endl endl ;2021 system(pause);22 return exit

16、_success;24 void callref(int &x, int &y)25 26 x=4;27 y=x+y;28 cout 函式呼叫函式呼叫n ;29 cout x= x tty= y endl ;30 cout x位址位址 &x ty位址位址 &y endl endl ;31 結論結論:l使用函式之傳址使用函式之傳址(指標指標) 或參考的呼叫或參考的呼叫方式,都能讓被呼叫函式的結果回傳給主程式。方式,都能讓被呼叫函式的結果回傳給主程式。l使用指標來傳遞參數,對於初學者困難度高且使用指標來傳遞參數,對於初學者困難度高且使用太多指標亦會造成混淆。使用太多

17、指標亦會造成混淆。l使用參考傳遞參數來代替指標傳遞參數,使用參考傳遞參數來代替指標傳遞參數,不但易學且有淨化程式的效果,尤其在不但易學且有淨化程式的效果,尤其在撰寫程式時,要將整個物件或部份物件成員撰寫程式時,要將整個物件或部份物件成員傳給另一個函式時,使用參考呼叫即是傳給另一個函式時,使用參考呼叫即是最佳的選擇。最佳的選擇。13-5 string 類別類別 c+ 的標準程式庫函式提供的標準程式庫函式提供 string類別,類別,此類別提供許多更方便的字串成員函式供此類別提供許多更方便的字串成員函式供您使用,以更直覺方式來處理字串。您使用,以更直覺方式來處理字串。 欲在程式中使用欲在程式中使用

18、string類別時,必須在程式類別時,必須在程式最開頭先含入最開頭先含入 #include 才行。才行。 下面寫法為字串物件的建立方式下面寫法為字串物件的建立方式 string emptystr; string namestr(“王小明王小明”); string prod=”vb.net”;p13-17 string 類別重新定義類別重新定義 =(相等相等) 、!=(不相等不相等) 、 (大於大於)、=(不小於不小於)、 + (連接兩個字串連接兩個字串)、= (指定指定) 等運算子。等運算子。 下面簡例比較下面簡例比較str_id字串是否為字串是否為 “松崗松崗”字串,若成立則字串,若成立則印

19、出印出 “松崗松崗good”,反之印出,反之印出 “#_#”。 string str_id(“松崗松崗”);string show;if(strid=”松崗松崗”)/使用使用 = 運算子比較兩字串運算子比較兩字串 cout “松崗松崗” + “good” ; /使用使用 + 運算子運算子else show=”#_#”;/將字串將字串 “#_#”指定給指定給show cout s ;p13-17p13-18p13-20/ filename : string1.cpp01 #include 02 #include 03 #include 04 #include 0506 using namespa

20、ce std;0708 int main(int argc, char *argv)09 10 string input_str, insert_str, sub_str;11 int n;12 cout input_str;14 cout 字串長度:字串長度: input_str.length() endl;15 cout 是否為空字串:是否為空字串: (input_str.empty() ? 是是 : 否否) endl;16 cout insert_str;18 cout n; 20 input_str.insert(n, insert_str);21 cout 新字串: + input_

21、str endl;22 cout sub_str;24 cout sub_str 子字串在 input_str 的第 25 input_str.find(sub_str)+1 位置 endl endl;26 system(pause);27 return exit_success;28 二、傳統字串與二、傳統字串與string字串的互換字串的互換方法方法1 string字串轉成字串陣列字串轉成字串陣列先利用先利用string類別中的類別中的c_str()方法轉換成傳統字方法轉換成傳統字串陣列,並用串陣列,並用strcpy字串拷貝函式,將它拷貝到字串拷貝函式,將它拷貝到name字元陣列中:字元陣列中: char name20; string s1; strcpy(name, s1.c_str();方法方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论