版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-C + +語言

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

C++語言的由來

C++語言起源于C語言。在1973~1979年間,C語言迅速成為應(yīng)用最廣泛的系統(tǒng)程序設(shè)計(jì)語言。然而,由于C語言也存在一些缺陷,例如類型檢查機(jī)制相對較弱、缺少支持代碼重用的語言結(jié)構(gòu)等,造成用C語言開發(fā)大程序比較困難。為了克服C語言存在的缺點(diǎn),在1980年,由美國貝爾實(shí)驗(yàn)室在C語言的基礎(chǔ)上,開始對C語言進(jìn)行改進(jìn)和擴(kuò)充,并將“類”的概念引入了C語言,構(gòu)成了最早的C++語言(1983年)。

后來C++中又引進(jìn)了運(yùn)算符重載、引用、虛函數(shù)等許多特性,并使之更加精煉。由貝爾實(shí)驗(yàn)室開發(fā)出的這種過程性與對象性相結(jié)合的程序設(shè)計(jì)語言,直到1983年正式取名為C++。以后又經(jīng)過不斷的完善和發(fā)展,由美國國家標(biāo)準(zhǔn)化協(xié)會ANSI和國際標(biāo)準(zhǔn)化組織ISO一起進(jìn)行了標(biāo)準(zhǔn)化工作,并于1998年正式發(fā)布了C++語言的國際標(biāo)準(zhǔn)(ISO/IEC:98-14882)成為目前的C++語言。

簡單地說,C++語言是在C語言的基礎(chǔ)上引入了面向?qū)ο蟮臋C(jī)制而形成的一門計(jì)算機(jī)編程語言。C++繼承了C語言的大部分特點(diǎn):一方面,C++語言將C語言作為其子集,使其能與C語言相兼容;另一方面,C++語言支持面向?qū)ο蟮某绦蛟O(shè)計(jì),如類的概念和性質(zhì)。這就是對C語言的重要改進(jìn)1。

C++語言的特點(diǎn)C++語言的特點(diǎn)大致有如下3點(diǎn):
1.C++語言是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。其模仿了人們建立現(xiàn)實(shí)世界模型的方
法。C++語言的基礎(chǔ)是對象和類。現(xiàn)實(shí)世界中客觀存在的事物都被稱為對象。例如,一輛汽車、一家百貨商場等。C++中的一個對象就是描述客觀事物的一個實(shí)體,其是構(gòu)成信息系統(tǒng)的基本單位。類(class)是對一組性質(zhì)相同對象的描述,是用戶定義的一種新的數(shù)據(jù)類型,也是C++語言程序設(shè)計(jì)的核心。
2. C++是C語言的超集。其不僅包含了C語言的大部分特性,例如指針、數(shù)組、函數(shù)、語法等。其還包含面向?qū)ο蟮奶攸c(diǎn),例如封裝、繼承、多態(tài)等。

3.C++是程序員和軟件開發(fā)者在實(shí)踐中創(chuàng)造的。

C++支持的編程類型面向?qū)ο缶幊谭庋b:將數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起;避免受到外界的干擾和誤用,確保了安全;

數(shù)據(jù)隱藏:由封裝引申出來的另一個重要的 OOP 概念;

繼承:繼承是 OOP 中一個重要的概念,代表了一種 isa 的關(guān)系;提高了代碼重用率和執(zhí)行效率;

多態(tài):基于繼承和虛函數(shù)實(shí)現(xiàn),是一種動態(tài)綁定技術(shù);調(diào)用成員函數(shù)期間,根據(jù)調(diào)用函數(shù)的對象的類型動態(tài)的決定最終調(diào)用的函數(shù)(虛函數(shù))實(shí)現(xiàn)。

過程化編程派生自結(jié)構(gòu)化編程,使用程序調(diào)用或函數(shù)調(diào)用的方式來進(jìn)行流程控制

流程則由包涵一系列運(yùn)算步驟的程序(Procedures)、例程(routines)、子程序(subroutines)、 方法(methods)、或函數(shù)(functions)來控制;

在程序運(yùn)行的任何一個時間點(diǎn),都可以調(diào)用某個特定的程序;任何一個特定的程序,也能被任意一個程序或是它自己本身調(diào)用

泛型編程在程序編碼中一些包含類型參數(shù)的類型,也就是說泛型的參數(shù)只可以代表類,不能代表個別對象。(這是當(dāng)今較常見的定義);

在程序編碼中一些包含參數(shù)的類。其參數(shù)可以代表類或?qū)ο蟮鹊?。(現(xiàn)在人們大多把這稱作模板);

允許程序員在強(qiáng)類型程序設(shè)計(jì)語言中編寫代碼時使用一些以后才指定的類型,在實(shí)例化時(instantiate)作為參數(shù)指明這些類型;

泛型定義的種類。

C++的使用場景編寫設(shè)備驅(qū)動程序和其他要求實(shí)時性的直接操作硬件的軟件;

編寫蘋果電腦或 Windows PC 機(jī)系統(tǒng)的主要用戶接口2。

C++中的各種字符標(biāo)識符與關(guān)鍵字在C++中,有一套用來表示程序中的變量、常量、數(shù)據(jù)類型及語法關(guān)鍵字的符號,這些符號被統(tǒng)稱為標(biāo)識符。

標(biāo)識符的命名有如下幾點(diǎn)規(guī)則需要遵循:

標(biāo)識符的第一個字符必須是字母或者下劃線。

標(biāo)識符中不應(yīng)有除字母、數(shù)字和下劃線以外的字符。

標(biāo)識符的長度一般不超過31個字符。

C++中的標(biāo)識符可以大寫,也可以小寫。不過大寫和小寫是有區(qū)別的,即對應(yīng)的大小寫字母會被當(dāng)作不同的標(biāo)識符。例如Good和good是被當(dāng)作不同的標(biāo)識符,Hello和HELLO也是不同的標(biāo)識符。

在C++的標(biāo)識符中,有些單詞組合是不能由用戶聲明的,其是由C++編程語言本身保留使用,具有特殊的含義。一般用于表示固定語句、預(yù)定義類型說明、預(yù)定義函數(shù)等。這種標(biāo)識符被統(tǒng)稱為關(guān)鍵字或者保留字。
有了這些關(guān)鍵字,C++編譯器才能正確識別輸入的程序代碼是如何分隔的,這就好像寫應(yīng)用文時為了突出重點(diǎn),常常把關(guān)鍵字或者詞進(jìn)行標(biāo)注一樣1。

分隔符與注釋符C++中除了標(biāo)識符外,還有兩種起特殊作用的符號。一種是用來分隔代碼語句的,被稱為分隔符;另一種是起說明作用的,被稱為注釋符。

一、劃分語句的分隔符
其中分隔符又被稱為C++中的標(biāo)點(diǎn)符號。用來將單詞或者程序分隔,其表示某個程序的結(jié)束和另一個程序的開始。C++中包括如下幾種分隔符。
1.空格符:用來作為單詞與單詞之間的分隔符。

2.逗號:用來作為說明多個變量的分隔符,或者多個參數(shù)之間的分隔符。

3.分號:用來作為C++中語句的結(jié)束分隔符。

4.花括號:用來構(gòu)造程序?qū)嶓w的分隔。

二、使語句無效的注釋符

注釋在程序代碼中起到對程序語句注解和說明的作用。其目的是為了代碼設(shè)計(jì)者或?qū)彶檎叻奖汩喿x程序代碼。對計(jì)算機(jī)而言其是無效的,在程序編譯時,注釋會被自動從程序代碼中忽略掉。換句話說,這就好比大家在讀書時所做的讀書筆記,可以標(biāo)記在書上,也可以標(biāo)記在筆記本上,但對書的內(nèi)容(代碼)并沒有任何影響,只是起一個輔助說明的作用。
在C++中采用如下兩種注釋方法。
1.使用/*和*/括起來進(jìn)行注釋,在/*和*/之間的字符都被作為注釋符處理,適用于多行注釋信息。

2.使用“//”,從“//”開始直到所在行的行尾,所有字符都被當(dāng)作注釋處理。適用于單行注釋信息3。

C++中的常用數(shù)據(jù)類整數(shù)型數(shù)據(jù)所謂的整數(shù)型數(shù)據(jù)類是指數(shù)據(jù)是沒有小數(shù)部分的,其值可以是正,也可以是負(fù),簡稱為整數(shù)型。例如日常生活中用到的12、–22、1234、2009、–999、–2009、0等都是整數(shù)型的。其中12、1234、2009等又被稱為正整數(shù),0一般也被當(dāng)作正整數(shù)處理。而–22、–999,–2009等被稱為負(fù)整數(shù)。在C++中用int這個關(guān)鍵字來聲明一個存放整數(shù)型數(shù)據(jù)的變量。例如:

int nCount; //聲明一個整數(shù)型變量nCount int nNum; //聲明一個整數(shù)型變量nNum int abc;. //聲明一個整數(shù)型變量abc聲明整數(shù)型時要進(jìn)行初始化,其方法如下:

int nCount=100; 一個整數(shù)型在計(jì)算機(jī)中可以表示的數(shù)值的大小范圍是多少呢?如下表所示。

|| ||

雖然整數(shù)型能表示的數(shù)已經(jīng)比較大,但也有不夠用的情況。例如,在有的游戲中表示銀河系兩個星球之間的距離是多少千米,或者太陽系的直徑是多少米等數(shù)據(jù)時,整數(shù)型變量就不夠了。為此C++中就引入了長整數(shù)類型。用long這個關(guān)鍵字來聲明一個長整數(shù)型變量。例如:

long lLen; //聲明長整數(shù)型變量 iLenlong lCount; //聲明長整數(shù)型變量iCount long lTime; //聲明長整數(shù)型變量 iTime 長整數(shù)型變量,其存儲數(shù)值的范圍如下表所示。

|| ||

計(jì)算機(jī)中長整數(shù)可能會降低程序執(zhí)行的速度,所以有時候?yàn)榱斯?jié)約空間和提高程序執(zhí)行速度,C++中又引入了短整數(shù)。在C++中用short這個關(guān)鍵字來聲明一個短整數(shù)型變量,其數(shù)值的范圍在16位和32位計(jì)算機(jī)上都是一樣的,為32 767~–32 768。例如:

short sCount; //聲明短整數(shù)型變量 sCount short sNum; //聲明短整數(shù)型變量 sNum short sLen; //聲明短整數(shù)型變量 sLen計(jì)算機(jī)為了在不增加存儲空間和不影響執(zhí)行速度的前提下,在存儲數(shù)據(jù)時,直接把存儲數(shù)據(jù)的符號去掉,這樣變量能表示的最大值就擴(kuò)大了,這種存儲的數(shù)據(jù)在C++中就被稱為無符號數(shù)據(jù)類型。
C++中聲明無符號整數(shù)型變量,是在int關(guān)鍵字前加上unsigned關(guān)鍵字。例如:

unsigned int unCount; //聲明無符號整數(shù)型變量 unCount unsigned int unNum; //聲明無符號整數(shù)型變量 unNum unsigned int abc; //聲明無符號整數(shù)型變量 abc 無符號整數(shù)型變量存放的數(shù)值范圍如表所示。

|| ||

然有無符號的整數(shù)型變量,那么也就有無符號的長整數(shù)和短整數(shù)型變量,其聲明都是在原關(guān)鍵字前加上unsigned關(guān)鍵字。例如:

unsigned long ulCount; //聲明無符號的長整數(shù)型變量 uiCount unsigned long ulNum; //聲明無符號的長整數(shù)型變量 uiNum unsigned short usLen; //聲明無符號的短整數(shù)型變量 usLen unsigned short usCount; //聲明無符號的短整數(shù)型變量 usCount 無符號短整數(shù)其數(shù)值范圍在16位和32位計(jì)算機(jī)上都是65 535~0。而無符號的長整數(shù)其數(shù)值范圍如表所示。

|| ||

實(shí)數(shù)型數(shù)據(jù)實(shí)數(shù)型數(shù)據(jù)是由一個整數(shù)部分、一個小數(shù)部分以及可選的后綴組成的。例如,3.1415、0.5、0.875等都是實(shí)數(shù)型數(shù)據(jù)。在C++中把實(shí)數(shù)型數(shù)據(jù)按照其表示的數(shù)值范圍進(jìn)行分類,可分為單精度、雙精度和長雙精度3種數(shù)據(jù)類型。
1.聲明一個單精度的實(shí)數(shù)變量使用float關(guān)鍵字,所以單精度的實(shí)數(shù)型又被稱為浮點(diǎn)型。例如:

float half; //聲明單精度的實(shí)數(shù)變量 half float pi; //聲明單精度的實(shí)數(shù)變量 pi float num; //聲明單精度的實(shí)數(shù)變量 num單精度實(shí)數(shù)類型一般是以32位進(jìn)行存儲表示的,其數(shù)值表示范圍為3.4e+38~3.4e–38,最多只提供7位有效數(shù)字。
2.雙精度數(shù)據(jù)類型和單精度數(shù)據(jù)類似,因?yàn)槠湟紦?jù)的存儲空間是單精度數(shù)據(jù)類型的兩倍,所以被稱為雙精度數(shù)據(jù)類型。聲明一個雙精度類型的實(shí)數(shù)變量,使用double關(guān)鍵字。例如:

double dbNum1; //聲明雙精度的實(shí)數(shù)變量dbNum1 double dbNum2; //聲明雙精度的實(shí)數(shù)變量dbNum2 double dbNum3; //聲明雙精度的實(shí)數(shù)變量dbNum3 精度實(shí)數(shù)類型是以64位進(jìn)行存儲表示的,其數(shù)值范圍為1.7E–308~1.7E+308,最多可提供16位的有效數(shù)字。
3.長雙精度數(shù)據(jù)類型,理論上是雙精度占用存儲空間的兩倍,但在實(shí)際中還是只占用64位的存儲空間。聲明一個長雙精度實(shí)數(shù)變量,使用long double關(guān)鍵字。例如:

long double dbNum1; //聲明長雙精度的實(shí)數(shù)變量dbNum1 long double dbNum2; //聲明長雙精度的實(shí)數(shù)變量dbNum2 long double dbNum3; //聲明長雙精度的實(shí)數(shù)變量dbNum3 長雙精度因?yàn)槠湔加玫拇鎯臻g和雙精度相同,所以其實(shí)數(shù)類型的數(shù)值表示范圍還是為1.7E–308~1.7E+308,最多可提供16位有效數(shù)字。
實(shí)數(shù)在C++中也可以包含一個指數(shù)形式的數(shù)值,其類似于數(shù)字的科學(xué)計(jì)數(shù)表示法。

所有的實(shí)數(shù)型變量在聲明時,對其進(jìn)行初始化方法如下:

float half = 11111.511; double dwSize = 11111.105;由于float型的變量只能存儲4個字節(jié),有效數(shù)字為7位。所以其中half中的最后一位小數(shù)是不起作用的,即其值為11111.51。但如果是double型的,則dwSize中是能夠存儲全部11111.105這個數(shù)的。

字符型數(shù)據(jù)通常字符型數(shù)據(jù)變量是用來存儲計(jì)算機(jī)中的字符的。例如:‘A’,‘#’,‘z’,‘1’等都是字符型的數(shù)據(jù)。在計(jì)算機(jī)中,字符型變量并不是直接存儲字符,而是存儲字符的ASCII(American Standard Code for Information Interchange,美國標(biāo)準(zhǔn)信息交換碼)碼值。
ASCII碼是目前計(jì)算機(jī)中用得最廣泛的字符集及編碼,是由美國國家標(biāo)準(zhǔn)局(即ANSI)制定的,其已被國際標(biāo)準(zhǔn)化組織(ISO)定為國際標(biāo)準(zhǔn),稱為ISO 646標(biāo)準(zhǔn)。適用于所有拉丁文字字母。
根據(jù)ASCII碼標(biāo)準(zhǔn),數(shù)值65代表大寫的‘A’,而97則代表小寫字母‘a(chǎn)’,表中列出了ASCII碼表中前128個編碼的十進(jìn)制表示,讀者可以不必記住這些代碼值,但必須理解每個ASCII碼都與一個特定的數(shù)值相對應(yīng)的這個概念,ASCII碼表如表所示。

|| ||