Presentation is loading. Please wait.

Presentation is loading. Please wait.

第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入

Similar presentations


Presentation on theme: "第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入"— Presentation transcript:

1 第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入

2 11-1 C++語言的基礎 C++語言的歷史 第一個C++程式 ANSI-C++的標頭檔與名稱空間

3 C++語言的歷史 C++語言是在1980年初期,Bjarne Stoustrup在AT&T貝爾實驗室著手開發的程式語言,最初的名稱是「C with Classes」,在1983年定名為C++,1985年10月Bjarne Stoustrup出版「The C++ Programming Language,第一版」一書,這就是C++語言第一個標準版本。 到了1990年,ANSI成立X3J16委員會制定標準ANSI-C++,直到1997年11月才製定出標準的ANSI-C++,在第二年建立最後版本的ANSI/ISO標準C++。事實上,1989年製定C語言的ANSI-C時,也參考C++語言的部分語法。

4 第一個C++程式-說明 C++程式架構類似C語言,程式碼副檔名是.cpp(C語言是.c),換句話說,在整合開發環境編譯程式後,儲存成.cpp副檔名,就表示程式碼檔案是C++程式。

5 11-1-2 第一個C++程式-範例 01: /* 程式範例: Ch11_1_2.cpp */
02: #include <iostream> 03: #include <cstdlib> 04: // 主程式 05: int main() { 06: // 顯示訊息 07: std::cout << "第一個C++程式\n"; 08: system("PAUSE"); 09: return 0; 10: }

6 第一個C++程式-範例說明1 程式註解:第1列、第4列和第6列是程式註解,C++語言除了支援C語言標準註解「/*」和「*/」外,還新增「//」符號開始的文字列作為註解(這也是C99支援的註解語法),如下所示: 04: // 主程式 05: int main() { 06: // 顯示訊息 標頭檔:第2~3列含括標頭檔<iostream>和<cstdlib>,ANSI-C++標頭檔和C語言不同,詳細說明請參閱下一節。<iostream>標頭檔是C++語言標準輸出輸入串流的標頭檔。

7 第一個C++程式-範例說明2 主程式:第5~10列的main()函數是C++程式的主程式,也就是執行時的進入點,換句話說,執行C++程式就是從此函數開始,如下所示: 05: int main() { 06: // 顯示訊息 07: std::cout << "第一個C++程式\n"; 08: system("PAUSE"); 09: return 0; 10: } main()主程式是C++語言的函數,在第9列傳回0表示沒有錯誤,第7列使用std::cout和「<<」輸出運算子來輸出文字內容,詳細說明請參閱第11-3節。

8 11-1-3 ANSI-C++的標頭檔與名稱空間-現代樣式標頭檔
在新版ANSI-C++支援「現代樣式標頭檔」(Modern-Style Headers)和名稱空間(Namespaces),可以使用全新方式來含括標頭檔和使用C++語言的標準函式庫(C++ Standard Library)。 在ANSI-C++標準函式庫提供現代樣式標頭檔,新樣式的標頭檔不需.h副檔名,因為它並不是指檔案名稱,而是一個識別字,如下所示: #include <iostream>

9 11-1-3 ANSI-C++的標頭檔與名稱空間-ANSI-C++標頭檔1

10 11-1-3 ANSI-C++的標頭檔與名稱空間-ANSI-C++標頭檔2

11 11-1-3 ANSI-C++的標頭檔與名稱空間-使用標準函數庫的名稱空間std1
C++標準函式庫定義的類別與函數屬於名為std的名稱空間,而不是全域範圍。名稱空間(Namespaces)是宣告一個區域範圍,以便區域化名稱來避免名稱衝突的問題。 換句話說,標準輸出類別cout的全名應該加上名稱空間std::cout,如下所示: std::cout << "第一個C++程式\n";

12 11-1-3 ANSI-C++的標頭檔與名稱空間-使用標準函數庫的名稱空間std2
cout << "第一個C++程式\n"; 上述程式碼並沒有使用std名稱空間,此時,我們需要在程式開頭指定使用std名稱空間,如下所示: #include <iostream> using namespace std; 上述using namespace指引指令使用名稱空間std,表示將std視為全域範圍,此時,就不需要在cout前加上std::。

13 11-2 C++語言的資料型態與運算子 C++語言新增的資料型態 C++語言的運算子

14 C++語言新增的資料型態-說明 C++語言支援C語言的所有資料型態,在ANSI-C++還新增bool和wchar_t資料型態,如下表所示:

15 11-2-1 C++語言新增的資料型態-資料型態wchar_t(說明)
資料型態wchar_t宣告的變數是用來儲存寬字元,在指定變數值時,字元前需要加上「L」符號來表示是寬字元,如下所示: wchar_t ch = L'a'; 上述程式碼指定變數ch值是寬字元'a',事實上,它的值和char型態並沒有不同,因為ANSI字碼的前255字元和Unicode是相同的。不只如此,「L」符號也可以用來表示wchar_t的Unicode字串,如下所示: wchar_t* str = L"Unicode String";

16 11-2-1 C++語言新增的資料型態-資料型態wchar_t(Unicode)
「統一字碼」(Unicode)是由Unicode Consortium組織所制定的一個能包括全世界文字的字碼集,它包含GB2312和Big5字碼集的所有字集,即ISO 10646字集,它有常用的兩種編碼方式:UTF-8為8位元編碼,UTF-16為16位元的編碼。

17 11-2-1 C++語言新增的資料型態-C++語言的變數宣告與初值
C++語言不同於C語言只能在程式區塊的開始宣告變數,C++語言允許在程式碼的任何位置,有需要時即可宣告變數。 在宣告變數後,指定初始變數值的方法,除了使用指定敘述,也可以在括號中指定初值,其語法如下所示: 資料型態 變數名稱 (初值); 程式碼是在宣告變數時,指定其初值,例如:宣告整數a,如下所示: int a (10); int b = 20;

18 C++語言的運算子-關係運算子 C++語言因為支援布林資料型態bool,所以關係運算式的結果是布林值的變數,而不是整數,其值只能是true或false。例如:一些關係運算式的結果,如下所示: r1 = ((5 == 5) && (3 > 6)); // false(true && false) r2 = ((5 == 5) || (3 > 6)); // true(true || false) 上述變數r1和r2是bool布林資料型態,其值分別為false和true,實際值仍然是整數值是0和1。

19 11-2-2 C++語言的運算子-C++的型態迫換
C++語言除了相容C語言的型態迫換方式外,也可以使用新語法,也就是將迫換變數置於型態的括號中,首先是C語言方式,如下所示: int i; float f = ; i = (int) f; 程式碼將浮點變數f迫換成整數,變數i的值為整數3。C++還可以將變數置於括號中進行型態迫換,如下所示: i = int (f);

20 C++語言的運算子-型態迫換運算子 在ANSI-C++定義四種:reinterpret_cast、static_cast、dynamic_cast和const_cast型態迫換運算子,這些運算子主要是使用在類別的型態轉換。其中static_cast運算子也可以使用在基本資料型態的轉換,其語法如下所示: static_cast<基本資料型態>(運算式); 例如:將double浮點數型態迫換成int整數,如下所示: double pi = ; int j = static_cast<int>(pi);

21 11-3 C++語言的輸出與輸入 標準輸出串流的cout物件 標準輸入串流的cin物件

22 11-3 C++語言的輸出與輸入 C++語言提供全新標準輸出與輸入串流(Streams)來取代C語言的標準輸出和輸入函數scanf()和printf(),在<iostream>標頭檔定義兩種標準串流,如下所示: cin:標準輸入串流。 cout:標準輸出串流。 C++語言的cin和cout串流物件的字頭為「c」字元,表示是「控制台」(Console),in/out表示輸入與輸出。在C++程式含括<iostream>標頭檔,就可以使用cin和cout物件來輸入和輸出資料。

23 標準輸出串流的cout物件-說明 在C++程式只需將顯示字串、運算式或變數送到標準輸出cout,就可以在螢幕上顯示所需的資料,其功能如同簡化的printf()函數,如下所示: cout << str; 「<<」串流插入運算子(Stream Insertion Operator)表示串流輸出的方向。 cout運算子還可以重複使用「<<」運算子在同一列程式碼執行多次輸出,如下所示: cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a + b = " << a + b << endl;

24 11-3-1 標準輸出串流的cout物件-成員函數put()
cout.put('a'); cout.put('b').put('c');

25 11-3-1 標準輸出串流的cout物件-成員函數write()
char *str = "陳會安\n"; cout.write(str, 2); cout.write(str, strlen(str));

26 標準輸入串流的cin物件-說明 C++語言處理標準輸入是cin物件,它是與cout物件相反的操作,我們可以使用cin輸入串流來輸入資料,如下所示: char name[MAXSIZE]; cin >> name; 「>>」串流讀取運算子(Stream Extraction Operator)送至變數,即存入字串變數name,在功能上如同scanf("%s")函數。 標準輸入串流的cin物件也可以輸入數值資料,例如:int整數,如下所示: int age; cin >> age;

27 11-3-2 標準輸入串流的cin物件-成員函數getline()
cin.getline(char buffer[], int length, char delimiter = '\n'); 參數buffer儲存輸入文字內容的字元陣列,length參數是陣列長度,參數delimiter判斷輸入結束,預設參數值是新行字元'\n',即讀取到新行字元為止,如下所示: char buffer[MAXSIZE]; cin.getline(buffer, MAXSIZE);

28 11-4 C++語言的動態記憶體配置-說明 在C++語言雖然也可以使用C語言動態記憶體配置的malloc()和free()函數,不過,C++語言可以使用新增的new和delete運算子來配置和釋放記憶體空間。

29 11-4 C++語言的動態記憶體配置-new運算子1
int *ptr2; ptr2 = new int; 程式碼配置整數int,ptr2是整數的指標變數。

30 11-4 C++語言的動態記憶體配置-new運算子2
配置結構Time的記憶體空間,如下所示: Time *now; now = new Time; 第二種情況是當程式需要多個相同資料型態的記憶體空間時,例如:陣列,在C++程式是使用類似陣列宣告方式來指定配置的元素數,如下所示: char *str; str = new char[50]; 程式碼配置50個字元型態char的記憶體空間。

31 11-4 C++語言的動態記憶體配置-delete運算子
在C++程式使用new運算子配置的記憶體空間,可以使用delete運算子釋放指定型態的記憶體空間,其語法如下所示: delete 資料型態; delete[] 資料型態; delete運算子也有2種使用方式,第一種是釋放配置單一元素型態的記憶體空間,如下所示: delete ptr2; delete now; delete[] str;

32 11-5 C++語言的參考變數和範圍運算子-參考變數Reference
參考變數是其他變數的別名,在宣告參考變數時,需要指定成其他變數的名稱。參考變數的宣告和指標變數的宣告相似,其宣告語法如下所示: 資料型態 &變數名稱; 宣告和指標變數宣告的差異只在變數名稱前的「*」號改為「&」符號(即取址運算子)。例如:宣告其他整數變數num別名的參考變數ref,如下所示: int &ref = num;

33 11-5 C++語言的參考變數和範圍運算子-範圍運算子
在函數中如果擁有與全域變數同名的區域變數,C語言的函數只能存取區域變數,並無法存取全域變數。C++語言提供「::」範圍運算子可以存取全域變數的值,如下所示: ::value = int(value) + 7;

34 11-6 C++語言的函數 11-6-1 函數過載 11-6-2 inline函數 11-6-3 參考變數的傳址呼叫
預設的參數值與空參數列

35 函數過載 C++函數允許擁有兩個以上同名函數,只需函數傳遞的參數個數或資料型態不同即可,這些同名的函數稱為「過載」(Overload),如下所示: int square(int); double square(double); 兩個同名函數的原型宣告是參數型態不同。接著是參數個數不同的函數範例,如下所示: int getMax(int, int); int getMax(int , int, int);

36 inline函數 C++語言的inline函數主要是針對一些小型且需要頻繁呼叫的函數,因為inline函數是直接在函數呼叫的程式列展開函數的程式碼,以便節省呼叫函數所花費的額外執行時間,可以加速程式的執行。 在C++程式建立inline函數只需在函數前加上inline關鍵字,如下所示: inline int square(int no) { return no*no; }

37 參考變數的傳址呼叫-說明 C語言的函數只支援傳值呼叫,函數的傳址呼叫是透過指標來處理。C++語言可以使用指標(和C語言相同)或參考變數來建立函數的傳址呼叫,雖然寫法不同,但是功能完全相同。參考變數的函數原型宣告,如下所示: void swap(int &, int &); void swap(int &x, int &y); 兩種函數原型宣告都可以使用,在參數列可以只列出型態,也可以連參數名稱也一併列出,這2個參數x和y都是參考變數。

38 參考變數的傳址呼叫-範例 如果函數使用參考變數來傳遞,在函數中的程式碼就可以直接更改其參考的變數值,也就是呼叫時傳入的變數值。函數swap()的完整程式碼,如下所示: void swap(int &x, int &y) { int temp; temp = x; x = y; y = temp; }

39 預設的參數值與空參數列 在C++函數可以指定預設參數值,換句話說,如果函數在呼叫時,沒有指定參數值,就可以使用預設參數值。例如:預設參數值volume()函數的原型宣告,如下所示: int volume(int, int = 2, int = 3); int volume(int length, int width = 2, int height = 3);


Download ppt "第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入"

Similar presentations


Ads by Google