- C++程序設計基礎教程
- 張曉如 華偉
- 2649字
- 2020-06-12 16:21:25
1.2 C++程序設計語言
1.2.1 C++程序設計語言簡介
C++語言是目前應用最為廣泛的計算機程序設計語言之一。C++是由C語言擴充、改進而來的。C語言之所以要起名為C,是因為它主要參考B語言,C語言是B語言的進步,所以就起名為C語言。但是B語言并不是因為之前還有個A語言,而是B語言的設計者為了紀念其妻子,設計者妻子名字的第一個字母是B。當C語言發展到頂峰時,出現了一個版本叫C with Class,那就是C++最初的版本,在C語言中增加class關鍵字和類,那時有很多版本的C都希望在C語言中增加類的概念。后來C標準委員會決定為這個版本的C起個新的名字,在征集了很多名字后,最后以C語言中的++運算符來體現它是C語言的進步,故而叫C++,并成立了C++標準委員會。雖然C++是作為C語言的增強版出現的,就目前學習C++而言,它是一門獨立的語言。讀者可以完全不學C語言,而直接學習C++。
C++程序設計語言具有下列特點。
(1)C++完全兼容C,具有C語言的“簡潔、緊湊、運算符豐富,可直接訪問機器的物理地址,使用靈活方便,程序書寫形式自由”等特點。大多數的C語言程序代碼略做修改或不做修改就可在C++集成環境下運行。
(2)C++作為一種面向對象的程序設計語言,程序的各個模塊間更具獨立性,可讀性更好,代碼結構更加合理,設計和編制大型軟件更為方便。
(3)用C++語言設計的程序可擴充性更強。
與其他高級程序設計語言一樣,C++程序從開始編碼到運行需要經過以下步驟。
(1)編輯源程序。可以在普通的文本編輯器(如Windows記事本)或一些專業開發軟件(Dev C++、C-Free等)提供的編輯器中對程序進行編碼。由高級語言編寫的程序稱為源程序。C++源程序默認的擴展名為.cpp。
(2)編譯源程序。使用編譯程序對源程序進行編譯,目的是將高級語言編寫的源程序翻譯成計算機硬件可以識別的二進制機器指令。源程序經編譯后生成擴展名為.obj的目標程序文件。
(3)鏈接目標程序。用鏈接器將編譯成功的目標程序文件與相應的系統模塊鏈接成擴展名為.exe的可執行程序。
1.2.2 簡單的C++程序框架結構
下面通過一個簡單程序來了解C++程序的構成。這個程序的功能只是告知計算機顯示“Hello World”。
【例1-1】一個簡單的C++程序示例。
/* ========================= C++程序示例 ========================= */ #include<iostream> //A,包含文件 using namespace std; //B,使用命名空間std int main() { //C,主函數 cout<<"Hello World "<<endl; return 0; }
結合上述程序示例,從以下幾點粗略地介紹C++程序。
(1)程序注釋。注釋是程序員為程序所做的說明,是提高程序可讀性的一種手段。注釋并不是程序的必要部分,與其他高級語言一樣,C++編譯器在編譯時將跳過注釋語句,不對其進行處理。因此,無論源程序中有多少注釋語句,均不會影響程序編譯結果。
C++語言提供了兩種程序注釋方式:一種是界于符號“/*”和“*/”之間的內容均作為注釋信息(如程序中的前三行),另一種是由符號“//”開始直至本行結束的全部內容(例如,程序中的A行、B行和C行)。
(2)文件包含。每個以符號“#”開始的行稱為編譯預處理指令。例1-1中的A行指令稱為文件包含預處理指令。編譯預處理是C++組織程序的工具。#include<iostream>的作用是在編譯之前將文件iostream的內容插入程序中。iostream是系統提供的一個頭文件,其中定義了C++程序輸入/輸出操作的有關信息,程序必須包含此文件才能進行輸入/輸出操作。
(3)命名空間。C++標準庫中的類和函數是在std中聲明的,如需要使用到其中的有關內容,就需要使用命名空間std編譯。程序中的B行表示本程序使用系統提供的標準命名空間中的名稱標識符。
(4)主函數。程序中的C行定義了一個函數,該函數描述程序的功能。main是函數名,其后緊跟一對圓括號。所有的C++程序有且只有一個main函數,通常稱該函數為主函數。main函數是整個程序的入口,任何一個C++程序通常是從其主函數的第一條語句開始執行,執行完主函數的所有語句后,程序將自然結束。實現函數功能的語句序列必須用一對花括號括起來形成一個邏輯整體。
main前面的int表示該函數運行結束后將得到一個整數值,該整數值應該在函數執行結束前用return語句給出。在例1-1程序中,主函數最后一條語句表明,如果程序正常運行結束,將返回一個整數值0。main后的一對圓括號說明main函數運行所需的參數。例1-1中main函數后是一對空圓括號,說明本程序運行時無需提供參數。此時,也可以在圓括號中加void。
(5)信息輸入/輸出。在C++程序中,標準的輸入/輸出操作使用關鍵字cin或cout。
(6)程序語句。基本的C++功能語句都必須以分號結束。
(7)程序編寫風格。從語法上講,C++程序代碼編寫格式自由,甚至可以將多個語句寫在同一行。但為了增加程序的可讀性,建議在編寫程序時遵守下列規則。
① 每行寫一條語句,同一層次的代碼左對齊。
② 配對的花括號中,上花括號“{”緊跟在上一行末尾,下花括號“}”單獨另起一行,并且縮進層次同配對的上花括號“{”。花括號內的內容縮進在下一層次。
(8)源程序編譯運行。編寫完源程序后,將源程序文件存儲為擴展名為.cpp的文件(如果在C++編譯環境提供的編輯器中編輯源程序,則編譯時自動存盤)。
編輯完源程序,還需要通過編譯環境進行編譯和鏈接后才能運行程序。上述示例程序運行后輸出如下。
Hello World Press any key to continue. . .
程序執行結果在最后增加一行輸出“Press any key to continue. . .”,這是系統自動添加的,目的是讓用戶看清屏幕輸出內容,并提醒用戶按任意鍵后程序將退出并返回到原編程環境。有些漢化的編譯系統會以中文提示用戶“按任意鍵繼續. . .”。
通過上面的例子可以看出,一個簡單的C++程序結構如下。
#include<iostream> using namespace std; int main(void) { …… return 0; }
讀者只需要將上面框架結構中的“……”替換為自己需要的功能語句,就可以改寫為自己的C++程序了。
需要特別提出的是,因為C++程序代碼是大小寫敏感的,所以在書寫程序時要注意其大小寫,如函數名main不能寫成Main。同時,程序中語法部分不能出現中文字符(含標點符號)。
1.2.3 標準命名空間
命名空間(又稱名字空間、名稱空間或名域)的關鍵字為namespace。
在C++中,名稱(標識符)可以是符號常量、變量、宏、函數、結構體、枚舉類型、類和對象等。為了避免標識符的命名相互沖突,標準C++引入了命名空間來控制標識符的作用域,不同的命名空間中可以有同名的標識符而不相沖突。
標準C++庫提供的標識符都放在標準命名空間std中,使用命名空間std有以下幾種方法。
(1)利用using namespace聲明所使用的命名空間。如例1-1所示,程序頭部使用以下語句。
using namespace std;
這是最常用的一種聲明命名空間的方法,它表明此后程序中的所有系統標識符如果沒有特別說明,均來自命名空間std。
(2)用作用域運算符“::”標明標識符所屬的命名空間。例如,例1-1程序代碼可以改寫成下列形式。
#include<iostream> int main(void) { std::cout<<"Hello World "<<std::endl; return 0; }
由于程序中沒有用語句“using namespace std;”聲明使用的命名空間,所以程序中使用的每一個系統標識符都必須用std::說明。例如,程序中的cout應改寫為std::cout,endl應改寫為std::endl。
(3)用using聲明某個標識符的命名空間。例如,例1-1程序代碼也可以改寫成下列形式。
#include<iostream> using std::cout; //A using std::endl; //B int main(void) { cout<<"Hello World "<<endl; return 0; }
上述程序中A行和B行分別聲明了標識符cout和endl的命名空間,表示程序中使用的標識符cout和endl均默認為來自命名空間std。
早期的C++標準不支持命名空間,因此程序中不需要聲明使用的命名空間。C++早期的頭文件都帶擴展名“.h”,新版本為了與老版本兼容,也附帶了這些頭文件。如果用早期的頭文件,例1-1也可以寫成如下形式。
#include<iostream.h> int main(void) { cout<<"Hello World "<<endl; return 0; }
上述程序中使用了老版本帶擴展名的頭文件,因而不需要再聲明命名空間。
- Learning Real-time Processing with Spark Streaming
- Power Up Your PowToon Studio Project
- 大學計算機基礎實驗教程
- Java深入解析:透析Java本質的36個話題
- 深入理解Elasticsearch(原書第3版)
- Swift細致入門與最佳實踐
- Cocos2d-x by Example:Beginner's Guide(Second Edition)
- 微課學人工智能Python編程
- 征服C指針(第2版)
- 軟件測試技術
- Vue.js 3.x高效前端開發(視頻教學版)
- 你好!Python
- Scala編程(第4版)
- Azure for Architects
- Python3從入門到實戰