第1章 C++語(yǔ)言概述
1.1 C+ +語(yǔ)言的發(fā)展
C+ +起源于C語(yǔ)言。1980年貝爾實(shí)驗(yàn)室的Bjarne Stroustrup和他的同事們開始對(duì)C語(yǔ)言進(jìn)行改進(jìn)和擴(kuò)充,把Simula 67(一種早期的面向?qū)ο笳Z(yǔ)言)中類的概念引入到C語(yǔ)言,并將改進(jìn)后的C語(yǔ)言稱為“帶類的C”(C with class)。1983年夏,“帶類的C”被正式命名為“C+ +”,并于同年7月首次對(duì)外發(fā)表。
1.2 C+ +語(yǔ)言的特點(diǎn)
1C+ +是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言
(1)抽象數(shù)據(jù)類型。
(2)封裝和信息隱藏。
(3)以繼承和派生方式實(shí)現(xiàn)程序的重用。
(4)以運(yùn)算符重載和虛函數(shù)來實(shí)現(xiàn)多態(tài)性。
(5)以模板來實(shí)現(xiàn)類型的參數(shù)化。
2C+ +是程序員和軟件開發(fā)者在實(shí)踐中創(chuàng)造的
C+ +往往從編寫實(shí)際程序的角度出發(fā),為程序員提供了各種實(shí)用、靈活、高效的語(yǔ)言特性。
3C+ +是C語(yǔ)言的超集
能夠很好地兼容C語(yǔ)言正是C+ +取得成功的原因之一,這是因?yàn)椋?/P>
(1)C+ +繼承了C語(yǔ)言簡(jiǎn)明、高效、靈活等眾多優(yōu)點(diǎn)。
(2)以前使用C語(yǔ)言編寫的大批軟件可以不加任何修改,直接在C+ +開發(fā)環(huán)境下維護(hù)。
(3)C語(yǔ)言程序員只需要學(xué)習(xí)C+ +擴(kuò)充的新特性,就可以很快地使用C+ +編寫程序。
1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)
C+ +是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它充分支持面向?qū)ο笏枷胫械娜齻(gè)主要特征是:
1封裝性
封裝性是指將數(shù)據(jù)和算法捆綁成一個(gè)整體,這個(gè)整體就是對(duì)象,描述對(duì)象的數(shù)據(jù)被封裝在其內(nèi)部。如果需要存取數(shù)據(jù),可以通過對(duì)象提供的算法來進(jìn)行操作,而無需知道對(duì)象內(nèi)部的數(shù)據(jù)是如何表示和存儲(chǔ)的。這種思想被稱為信息隱藏。
2繼承性
繼承性是指一種事物保留了另一種事物的全部特征,并且具有自身的獨(dú)有特征。
C+ +語(yǔ)言采用繼承來支持重用,程序可以在現(xiàn)有類型的基礎(chǔ)上擴(kuò)展功能來定義新類型。新類型是從現(xiàn)有類型中派生出來的,因此被稱為派生類。
3多態(tài)性
多態(tài)性是指當(dāng)多種事物繼承自一種事物時(shí),同一種操作在它們之間表現(xiàn)出不同的行為。
C+ +語(yǔ)言中使用函數(shù)重載、模板、虛函數(shù)等概念來支持多態(tài)性。
C+ +語(yǔ)言主要包括面向過程和面向?qū)ο髢刹糠謨?nèi)容。學(xué)習(xí)C+ +語(yǔ)言時(shí),應(yīng)該先學(xué)習(xí)其面向過程部分,再學(xué)習(xí)面向?qū)ο蟛糠帧?/P>
1.4 C+ +語(yǔ)言的基本符號(hào)
C+ +語(yǔ)言中的基本符號(hào)可以分為3類:
1字母。包括大寫英文字母和小寫英文字母共52個(gè)符號(hào)。
2數(shù)字
3特殊符號(hào)。包括:
+ - * / = , _ : ; ? \〓″〓′~ | ! # % & () [ ] { } ^ < >和“空格”共30個(gè)符號(hào)。
這三類符號(hào)共計(jì)92個(gè),它們組成了C+ +語(yǔ)言的基本符號(hào)集合。
1.5 C+ +語(yǔ)言的詞匯
1關(guān)鍵字
關(guān)鍵字也稱為保留字,它是由C+ +語(yǔ)言本身預(yù)先定義好的一類單詞。
表1ANSI C 標(biāo)準(zhǔn)規(guī)定的關(guān)鍵字
auto break case char
const continue default do
double else enum extern
float for goto if
int long register return
short signed sizeof static
struct switch typedef union
unsigned void volatile while
表2ANSI C+ + 標(biāo)準(zhǔn)補(bǔ)充的關(guān)鍵字
bool catch class const_cast
delete dynamic_cast explicit false
friend inline mutable namespace
new operator private protected
public reinterpret_case static_cast template
this throw true try
typeid typename using virtual
wchar_t2標(biāo)識(shí)符
標(biāo)識(shí)符是用戶為程序中各種需要命名的“元素”所起的名字。標(biāo)識(shí)符的組成要符合一定的規(guī)則:
(1)標(biāo)識(shí)符是一個(gè)以字母或下劃線開頭的,由字母、數(shù)字、下劃線組成的字符串。
(2)標(biāo)識(shí)符不能與任意一個(gè)關(guān)鍵字同名。
(3)標(biāo)識(shí)符中的字母區(qū)分大小寫。
(4)標(biāo)識(shí)符不宜過長(zhǎng)。C+ +語(yǔ)言一般設(shè)定一個(gè)標(biāo)識(shí)符的有效長(zhǎng)度為32個(gè)字符。
3字面常量
常量是指在程序中固定不變的值。常量一般有兩種表示形式,即符號(hào)常量和字面常量。C+ +語(yǔ)言中符號(hào)常量的名字就是一個(gè)標(biāo)識(shí)符,而字面常量卻是一類特殊的單詞。字面常量分為整型、浮點(diǎn)型、字符型和字符串型四類。
4運(yùn)算符
運(yùn)算符是對(duì)程序中的數(shù)據(jù)進(jìn)行操作的一類單詞。C+ +語(yǔ)言中運(yùn)算符的種類非常豐富,其中有:
(1)單字符組成的運(yùn)算符。
(2)雙字符組成的運(yùn)算符。
(3)三個(gè)字符組成的運(yùn)算符。
(4)關(guān)鍵字運(yùn)算符。
5標(biāo)點(diǎn)符號(hào)
標(biāo)點(diǎn)符號(hào)是在程序中起分割內(nèi)容和界定范圍作用的一類單詞。
表3C+ +語(yǔ)言的標(biāo)點(diǎn)符號(hào)
標(biāo) 點(diǎn) 符 號(hào) 描 述
(空格) 語(yǔ)句中各成分之間的分割符
; (分號(hào)) 語(yǔ)句的結(jié)束符
′ (單引號(hào)) 字符常量的起止標(biāo)記符
″ (雙引號(hào)) 字符串常量的起止標(biāo)記符
# (井字號(hào)) 預(yù)處理命令的開始標(biāo)記符
{ (左花括號(hào)) 復(fù)合語(yǔ)句的開始標(biāo)記符
。 (右花括號(hào)) 復(fù)合語(yǔ)句的結(jié)束標(biāo)記符
∥ (雙斜杠) 行注釋的開始標(biāo)記符
/* (斜杠和星號(hào)) 塊注釋的開始標(biāo)記符
*/ (星號(hào)和斜杠) 塊注釋的結(jié)束標(biāo)記符
1.6 C+ +程序的基本框架
由于C+ +語(yǔ)言既支持結(jié)構(gòu)化程序設(shè)計(jì),又支持面向?qū)ο蟪绦蛟O(shè)計(jì),所以它同時(shí)具有結(jié)構(gòu)化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)兩種基本框架。
1結(jié)構(gòu)化程序設(shè)計(jì)框架
在C+ +的結(jié)構(gòu)化程序設(shè)計(jì)框架中,函數(shù)是程序的基本組成單元。程序的主體通常由若干函數(shù)定義構(gòu)成。
函數(shù)是程序中完成一定功能的模塊。各個(gè)函數(shù)之間通過參數(shù)、返回值和全局變量來進(jìn)行數(shù)據(jù)通信。
當(dāng)編寫一個(gè)較大的程序時(shí),可以把它按照功能逐級(jí)劃分成許多相對(duì)獨(dú)立的小模塊。每個(gè)小模塊的功能由一個(gè)函數(shù)實(shí)現(xiàn),再通過適當(dāng)?shù)姆椒▽⑦@些函數(shù)組織在一起協(xié)同工作,就能夠完成整個(gè)程序所規(guī)定的任務(wù)。這種方法體現(xiàn)出了結(jié)構(gòu)化程序設(shè)計(jì)中“功能分解,逐步求精”的思想。
使用結(jié)構(gòu)化程序設(shè)計(jì)方法編寫出的C+ +程序包括一個(gè)主函數(shù)和若干用戶定義函數(shù)。主函數(shù)由操作系統(tǒng)調(diào)用,它是整個(gè)程序的入口。在主函數(shù)中調(diào)用其他函數(shù),其他函數(shù)之間也可以相互調(diào)用,并且同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次。在C+ +中一個(gè)函數(shù)被調(diào)用之前必須先被聲明。函數(shù)聲明和函數(shù)體放在一起組成函數(shù)定義;函數(shù)體是用花括號(hào)括起來的若干語(yǔ)句,它們完成了一個(gè)函數(shù)的具體功能。
一般地,一個(gè)C+ +程序的結(jié)構(gòu)化程序設(shè)計(jì)框架可以表示為:
<函數(shù)1的聲明>
<函數(shù)2的聲明>
…
<函數(shù)n的聲明>
<主函數(shù)main()>
<函數(shù)1的定義>
<函數(shù)2的定義>
…
<函數(shù)n的定義>
2面向?qū)ο蟪绦蛟O(shè)計(jì)框架
在C+ +的面向?qū)ο蟪绦蛟O(shè)計(jì)框架中,類成為程序的基本組成單元。程序的主體通常由若干類的定義構(gòu)成。
類可以把數(shù)據(jù)和函數(shù)封裝在一起,用以描述事物的屬性和對(duì)事物的操作。類與類之間一方面通過封裝而具有明確的獨(dú)立性;另一方面又通過成員、友元、參數(shù)、繼承和派生等關(guān)系,達(dá)到相互通信和聯(lián)絡(luò)的目的,從而形成一個(gè)有機(jī)的整體。
在結(jié)構(gòu)化程序設(shè)計(jì)中,除了主函數(shù)之外,所有函數(shù)之間一律“平等”,沒有層次關(guān)系可言,當(dāng)程序規(guī)模稍大時(shí),就會(huì)使整體結(jié)構(gòu)變得相當(dāng)混亂。相反,在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類與類之間能夠按照邏輯關(guān)系組成有條理的層次結(jié)構(gòu),從而使一個(gè)復(fù)雜程序變得有“綱”可循。這正體現(xiàn)出面向?qū)ο笏枷氲膬?yōu)越性。
一般地,一個(gè)C+ +程序的面向?qū)ο蟪绦蛟O(shè)計(jì)框架可以表示為:
<類1的定義>
<類2的定義>
…
<類n的定義>
<主函數(shù)main()>
<類1的成員函數(shù)定義>
<類2的成員函數(shù)定義>
…
<類n的成員函數(shù)定義>
1.7 C+ +程序的開發(fā)過程
開發(fā)一個(gè)C++程序的過程通常包括編輯、編譯、鏈接、運(yùn)行和調(diào)試等步驟。
1編輯
在VC6集成開發(fā)環(huán)境中,用戶可以使用編輯窗口來進(jìn)行C+ +程序的編輯工作。VC6的編輯窗口是專門為編輯C+ +程序而設(shè)計(jì)的,它提供了包括語(yǔ)法亮色、調(diào)用提示、自動(dòng)縮進(jìn)、查找和替換等在內(nèi)的一系列功能,使用起來十分方便。
當(dāng)用戶完成了C+ +程序的編輯時(shí),應(yīng)將輸入的程序文本保存為以cpp為擴(kuò)展名的文件(保存C+ +頭文時(shí)應(yīng)以h為擴(kuò)展名)。
2編譯
在VC6集成開發(fā)環(huán)境中,用戶可以使用編譯(Compile)命令將一個(gè)以cpp為擴(kuò)展名的C+ +源程序文件轉(zhuǎn)換成一個(gè)以obj為擴(kuò)展名的目標(biāo)文件。如果一個(gè)C+ +程序由多個(gè)源程序文件組成,應(yīng)將它們分別進(jìn)行編譯形成多個(gè)目標(biāo)文件。
3鏈接
在VC6集成開發(fā)環(huán)境中,用戶可以使用生成(Build)命令來進(jìn)行目標(biāo)文件的鏈接工作。另外,在源程序文件沒有被編譯的情況下直接使用此命令,可以使編譯和鏈接工作一起完成。
4運(yùn)行和調(diào)試
在編譯和鏈接工作成功地完成之后可以運(yùn)行得到的可執(zhí)行程序,觀察程序是否符合我們所期望的運(yùn)行結(jié)果。在VC6集成開發(fā)環(huán)境中,用戶可以使用執(zhí)行(Execute)命令來運(yùn)行程序。
如果程序的運(yùn)行結(jié)果不是我們所期望的,說明源程序文件中存在著語(yǔ)義錯(cuò)誤。這時(shí),需要使用調(diào)試器對(duì)可執(zhí)行程序進(jìn)行跟蹤調(diào)試來查找錯(cuò)誤發(fā)生的原因。在VC6集成開發(fā)環(huán)境中,用戶可以很方便地進(jìn)入調(diào)試狀態(tài),對(duì)程序進(jìn)行設(shè)置斷點(diǎn)、單步執(zhí)行、觀察變量等操作。
編輯推薦:
權(quán)威預(yù)測(cè):2013年全國(guó)計(jì)算機(jī)等級(jí)考試時(shí)間
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |