版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第3章C/C++語言C和C++都是程序設計語言。C語言是面向過程的程序設計語言,而C++既支持面向過程的程序設計,又支持面向對象的程序設計。學習掌握C/C++語言是使用VC6.0開發(fā)程序的最基本的要求。在前面章節(jié)中介紹了VC6.0的基本概念、程序組成、常用工具,而無論VC6.0提供多么強大的用戶界面、輔助工具,都是用來編寫、編譯、調(diào)試C/C++程序的。3.1基本術語
作為一種語言,都有其自己規(guī)定的語法規(guī)則。符合一定語法規(guī)則的程序,稱為某種語言程序。但是,通常情況下,無論程序還是編譯器都很難100%的符合語言的規(guī)定。例如,現(xiàn)在講解的VC6.0就支持80%的C++語法規(guī)則。因此,在學習一門語言時,一定要了解其開發(fā)、編譯、鏈接的環(huán)境,進而可以更好的兼容各個編譯器對語言的支持。本節(jié)介紹C++的基本語法規(guī)則。3.1.1標識符
任何一門語言,都使用標識符來惟一的標識使用的各種不同的元素。標識符是用來定義程序中不同元素的字符序列集合3.1.2關鍵字
在標識符中有一類標識符已經(jīng)被系統(tǒng)預留或使用,而不允許用戶再次使用這些標識符。這些標識符稱為關鍵字。關鍵字是用戶必須知道的,以免在程序編寫時,錯用關鍵字導致編譯運行錯誤。VC6.0為用戶提供了關鍵字亮顯的功能。即在VC6.0中,系統(tǒng)預定義的關鍵字會使用不同與用戶使用標識符的顏色來顯示。當然,VC6.0也提供了自定義標識符、關鍵字樣式的功能。3.1.3常量
常量,顧名思義就是在程序中保持不變的量,稱為常量。例如,在程序中定義星期一到星期天的英文顯示通常是固定不變的,因此可以將其定義為常量。C++中的常量分為四種類型,整型常量、字符常量、浮點常量和字符串常量。3.1.4變量
變量,顧名思義就是在程序運行過程中會發(fā)生改變的量,稱為變量。例如,當前用戶的購物車內(nèi)的購物總價,這個值對于每個用戶來說都不同,而對于同一用戶在不同的時間時取值也是不相同的。因此購物總價這個量需要存放在變量中。3.2數(shù)據(jù)類型
無論是常量還是變量,都是有對應的數(shù)據(jù)類型的。C++提供了三種數(shù)據(jù)類型:基本數(shù)據(jù)類型、擴展數(shù)據(jù)類型和復雜數(shù)據(jù)類型。本節(jié)介紹基本數(shù)據(jù)類型、數(shù)組、結構體、共用體、枚舉類型、指針和引用以及用戶自定義數(shù)據(jù)類型。本節(jié)最后將介紹數(shù)據(jù)類型間的轉換。3.2.1基本數(shù)據(jù)類型C++定義了基本數(shù)據(jù)類型,主要包括整型類型、浮點類型和空類型。整型類型用來處理數(shù)字。浮點型用來處理就有小數(shù)部分的數(shù)字??疹愋陀脕肀硎救≈档目占瑳]有對應的類型,主要用在函數(shù)聲明中,表示沒有返回值或者返回值是無類型的數(shù)據(jù)。任何表達式都可以顯示的轉換為void空類型。3.2.2數(shù)組
數(shù)組是存儲多個相同數(shù)據(jù)類型元素的數(shù)據(jù)類型。每一個數(shù)組都有一個名字,數(shù)組中的每一個元素通過下標(序號)來表示在數(shù)組中的位置。要尋找數(shù)組中的某個元素就需要給出數(shù)組名和其下標。數(shù)組有不同的維數(shù)和大小。數(shù)組可以是一維、二維或者多維,其大小也是不同的。下面分別介紹數(shù)組的定義和賦值的實現(xiàn)方法。3.2.3結構體
結構體是指具有相關意義的一組變量的集合。結構在聲明中定義了結構體的名稱、結構成員變量值,結構體的名稱稱為結構體名,其中的變量稱為結構體的成員或字段,結構體成員的類型可以是不相同的數(shù)據(jù)類型。結構體可以看作記錄集的定義。3.2.4共用體
共用體是一組結構體的組合,在共用體中包含的結構體共用同一段內(nèi)存空間,也可以將共用體看作變體記錄。用戶在訪問時,可以使用與結構變量一樣的訪問方式來訪問共用體成員,而且還可以在共用體中定義結構體。3.2.5枚舉類型
枚舉類型是包含一組命名常數(shù)的用戶定義類型,其中的常數(shù)稱為枚舉值。默認情況下,第一個枚舉值的取值為0,后面的枚舉值依次比前面的枚舉值大1,但是用戶也可以為枚舉值自定義取值。這樣使得枚舉值不一定有唯一的取值,兩個不同的枚舉值取值有可能相等。創(chuàng)建的每個枚舉值名稱都是一個常數(shù),并且這個枚舉名稱在枚舉類型定義的范圍內(nèi)必須是唯一的。而編譯器是將枚舉值作為整型值來處理的。當要將整型轉換為枚舉值時,需要使用顯式轉換,而且轉換的結果也根據(jù)整型值的不確定而有可能不確定。3.2.6指針和引用
指針就是指向對象存儲在內(nèi)存中的地址的數(shù)據(jù)類型。指針是分類型的,指針所指向的對象的類型決定了指針類型。簡單的講,指針就是內(nèi)存地址,只是指向的內(nèi)存中存放的對象類型不同,從而產(chǎn)生了不同類型的指針。3.2.7自定義數(shù)據(jù)類型C++中除了系統(tǒng)提供的數(shù)據(jù)類型外,用戶還可以根據(jù)自己的需要使用typedef關鍵字自定義數(shù)據(jù)類型。使用typedef關鍵字可以定義指定名稱的數(shù)據(jù)類型,但是不能在函數(shù)內(nèi)部使用typedef來定義數(shù)據(jù)類型。定義了自定義數(shù)據(jù)類型后,新定義的數(shù)據(jù)類型就是此類型的同義詞,可以像使用系統(tǒng)定義的數(shù)據(jù)類型一樣使用自定義數(shù)據(jù)類型。3.2.8數(shù)據(jù)類型轉換C++定義了基本數(shù)據(jù)類型間數(shù)據(jù)類型轉換的實現(xiàn),也定義了指針、引用和指針成員派生類型之間的轉換實現(xiàn)。這些轉換統(tǒng)稱為數(shù)據(jù)類型轉換。3.3運算符和表達式
在C++語言中運算符是進行各種運算的符號。C++兼容了C語言的所有運算符,同時還加入了一些新的運算符。運算符分為一元運算符、二元運算符和三元運算符。運算符在進行運算時,要嚴格的遵守運算符優(yōu)先級。本節(jié)具體介紹各種運算符的使用方法。3.3.1算術運算符
算術運算符是進行算術運算的運算符,它們與現(xiàn)實生活中的算術運算的含義是相同的。C++中包括了常用的算術運算符。3.3.2賦值運算符
賦值運算符將表達式運算結果賦值給左操作數(shù)。C++中有兩種賦值運算符,一種是簡單賦值運算符,它將運算符右邊表達式的運算結果直接賦值給左操作數(shù)。另一種賦值運算符是組合運算符,這種運算符會將左邊操作數(shù)加入運算,并將最終運算結果賦值給左操作數(shù),一般組合賦值運算符可以進行算術、轉移和位運算。3.3.3關系運算符
關系運算符用來實現(xiàn)判斷操作數(shù)相等、不相等、取值關系的運算。3.3.4邏輯運算符C++中定義了兩個邏輯運算符:邏輯與和邏輯或。使用這兩個運算符可以將多個關系表達式組合在一起,形成更復雜的條件。3.3.5位運算符
為了對數(shù)據(jù)進行位操作,C++提供了位運算符,包括按位與(&)、按位異或(^)、按位或。位運算符會將操作數(shù)的每個比特位按照規(guī)則進行運算,并將運算后的比特位組合返回。3.3.6三目運算符
三目運算符就是一個運算中有三個操作數(shù)。C++中提供了一個三目運算符,即條件運算符。條件運算符的運算規(guī)則是,首先計算第一個表達式,如果表達式的取值為true,則結果會返回第二個表達式的值,否則,結果會返回第三個表達式的值。3.3.7增1和減1運算符
為了簡化運算符,C++提供了每次增加一的增1運算符和每次減少一的減1運算符。增一運算符分為前增一運算符和后增一運算符。前增一運算符會先執(zhí)行增加一的運算,然后將運算后的值賦值給左運算符。后增一運算符會先將右操作數(shù)的值賦值給左操作數(shù),然后再進行增一運算符。同理,減一運算符分為前減一運算符和后減一運算符。3.3.8逗號運算符
逗號運算符允許將要選擇的兩個表達式組織在一起。逗號運算符遵守從左到右的運算順序。逗號運算符分隔開的兩個表達式會按照從左到右的順序執(zhí)行。先執(zhí)行左表達式,并且在執(zhí)行右表達式之前,前面所有的表達式都會被執(zhí)行。逗號運算符的典型應用有函數(shù)調(diào)用時參數(shù)輸入時使用逗號運算符和for循環(huán)指定多個條件時使用逗號運算符。3.3.9sizeof運算符C++提供了計算操作數(shù)占用空間大小的函數(shù)sizeof函數(shù)。sizeof函數(shù)會計算指定操作數(shù)占用空間的大小,單位是char類型,表示輸入的對象占用的空間大小,其結果類型是定義在STDDEF.H文件中的size_t類型。3.3.10new和delete
操作符new用來動態(tài)的分配指定名稱的對象或數(shù)組對象,new操作符不能用來分配函數(shù),但是可以申請函數(shù)指針。如果new操作符分配單個對象時,則結果指向分配的對象類型的指針。當new操作符分配對象數(shù)組時,new操作符返回指向對象數(shù)組中的第一個元素的指針。3.4控制語句C++中執(zhí)行程序指令的是語句。語句是以順序執(zhí)行的方式來運行。當遇到表達式、選擇語句、循環(huán)語句或跳轉語句時,程序會按照語句的含義修改執(zhí)行順序,因此稱這些語句為控制語句。本節(jié)介紹控制語句的使用方法。3.4.1基本語句和復合語句C++中從執(zhí)行的語句復雜程度可以分為基本語句和復合語句。復合語句由多條基本語句組成。而基本語句是由表達式語句組合而成的。表達式語句是計算表達式的語句。3.4.2空語句
除了常用的基本語句外,C++還提供了空語句??照Z句是沒有任何表達式的語句??照Z句一般用在語言語法上需要執(zhí)行一條語句,而程序邏輯上又不需要執(zhí)行任何計算時使用??照Z句的語法就是由C++語句結束符分號組成??照Z句的典型用法是放在循環(huán)語句中或組合語句或函數(shù)中作為占位符來使用。3.4.3選擇語句
選擇語句是指用來提供根據(jù)條件取值來執(zhí)行不同的代碼段的語句。C++提供了兩種選擇語句:if語句和switch語句。3.4.4循環(huán)語句
循環(huán)語句是指使語句重復執(zhí)行0次或多次的語句,使用中斷語句可以終止循環(huán)。當循環(huán)執(zhí)行的語句是復合語句時,會按照順序執(zhí)行復合語句中的語句。在循環(huán)語句中遇到break語句或continue語句時,會打斷循環(huán)語句的執(zhí)行順序。C++中提供了三種循環(huán)語句,while、do和for語句。每種循環(huán)語句都會重復執(zhí)行復合語句,直到循環(huán)表達式計算的結果為0,或者遇到break語句要求強制退出循環(huán)語句。3.4.5跳轉語句C++提供了各種不同的跳轉語句來實現(xiàn)程序執(zhí)行流程的轉移。3.5函數(shù)
函數(shù)是編程語言中非常重要的元素,程序通過函數(shù)可以將完成指定功能的代碼段放在一起,為其命名,可以供不同程序重復使用。包括程序開始執(zhí)行的地方也是從主函數(shù)開始的。因此,函數(shù)的概念非常重要,本節(jié)介紹有關函數(shù)的概念和使用方法。3.5.1函數(shù)的定義和調(diào)用
在程序中要調(diào)用函數(shù),則需要先聲明函數(shù)并定義函數(shù),然后在代碼中才可以調(diào)用函數(shù)。函數(shù)聲明的作用是向編譯器聲明要定義的函數(shù)名稱、函數(shù)參數(shù)、函數(shù)返回值、函數(shù)的一些特性。而函數(shù)定義則與函數(shù)聲明不同,函數(shù)定義是包含函數(shù)體的聲明,用來告訴編譯器指定函數(shù)聲明的函數(shù)實際執(zhí)行的函數(shù)代碼是什么。3.5.2帶默認形參值的函數(shù)
函數(shù)參數(shù)是指傳入函數(shù)的值的名稱,一般稱這樣的參數(shù)為形參值。形參值是函數(shù)要接收處理的值的名稱。在函數(shù)原型中,函數(shù)參數(shù)在函數(shù)名稱后的括號中括起來,一個函數(shù)可以包含一個或多個參數(shù),并且每個參數(shù)都有自己的類型。在參數(shù)聲明中可以指定參數(shù)的類型、大小和參數(shù)中存儲的值的標識符。同時,也可以為參數(shù)指定默認值,當調(diào)用函數(shù)而又沒有指定參數(shù)值時,則函數(shù)中則使用這個默認值作為參數(shù)值。3.5.3函數(shù)的遞歸調(diào)用
在C++中任何函數(shù)都可以實現(xiàn)遞歸調(diào)用,遞歸調(diào)用就是指函數(shù)自己調(diào)用自己,而遞歸調(diào)用的次數(shù)是受堆棧大小的限制的。每次函數(shù)調(diào)用時,系統(tǒng)會為函數(shù)參數(shù)分配新的存儲空間,并保存函數(shù)調(diào)用前的各個變量和寄存器變量的值,函數(shù)如果沒有執(zhí)行成功,則不會覆蓋這些值。而參數(shù)值只能在創(chuàng)建它們的函數(shù)中被訪問。而遞歸調(diào)用時,前面調(diào)用時的參數(shù)在后面調(diào)用時是不可以訪問的。但是對于使用static定義的靜態(tài)變量,則在每次遞歸調(diào)用時都可以訪問,系統(tǒng)不會為靜態(tài)變量再分配新的存儲空間。3.5.4內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)告訴編譯器在函數(shù)調(diào)用中調(diào)用內(nèi)聯(lián)函數(shù)的地方使用內(nèi)聯(lián)函數(shù)的代碼來代替內(nèi)聯(lián)函數(shù)的調(diào)用,換句話說,內(nèi)聯(lián)函數(shù)就是在函數(shù)調(diào)用它時,會使用內(nèi)聯(lián)函數(shù)自身的代碼來替換其他函數(shù)對它的調(diào)用,也就可以理解為內(nèi)聯(lián)函數(shù)是一個調(diào)用時展開的代碼段。但是對于長函數(shù)來說,編譯器不會對其進行內(nèi)聯(lián)。內(nèi)聯(lián)函數(shù)使用inline作為關鍵字。3.5.5函數(shù)的重載C++允許在同一范圍內(nèi)指定相同函數(shù)名的多個不同的函數(shù)原型,這種情況稱為函數(shù)重載。重載函數(shù)允許程序為相同函數(shù)名提供不同含義的功能,而具體的實現(xiàn)根據(jù)參數(shù)類型和數(shù)量不同而不同。例如,經(jīng)常使用的print函數(shù),對于傳入的參數(shù)是char*類型的和傳入的參數(shù)是double類型的執(zhí)行的功能是不同的。3.6類及其成員特性
類是指包含數(shù)據(jù)和函數(shù)的類型,使用類用戶可以將自定義類型傳入程序中。在傳統(tǒng)編程語言中用戶自定義類型是指數(shù)據(jù)的集合,這些數(shù)據(jù)用來描述對象的屬性和狀態(tài)。C++中的類可以用來描述類對象的屬性和狀態(tài)以及定義類對象的行為。本節(jié)會介紹類的構造函數(shù)、析構函數(shù)、類對象成員的初始化、常類型、this指針、類的作用域和對象的生存周期、靜態(tài)成員以及友元的使用。3.6.1類的定義類可以使用class、struct和union關鍵字來定義。通常情況下,使用這三個關鍵字定義的類型都稱為類聲明,而在此處討論的類定義,專指使用class關鍵字定義的類型。類定義中可以包含數(shù)據(jù)成員和成員函數(shù),并且在類中可以嵌套定義其他類,這種情況稱為嵌套類。3.6.2構造函數(shù)在類定義中,有一個與類名稱同名的成員函數(shù),就是類的構造函數(shù)。構造函數(shù)沒有返回值,即使在其中使用了return函數(shù),構造函數(shù)也沒有實際的返回值。而在構造函數(shù)的定義中也不能指定函數(shù)返回類型。構造函數(shù)的主用工作就是初始化類對象的成員變量。如果類具有構造函數(shù),則這個類的每個對象在程序中使用前會調(diào)用類的構造函數(shù)先進行初始化。3.6.3析構函數(shù)析構函數(shù)是構造函數(shù)的逆函數(shù)。析構函數(shù)是在對象被銷毀時調(diào)用的函數(shù)。析構函數(shù)的定義是在類名稱前加上~符號作為函數(shù)名的函數(shù),例如MyBuffer類的析構函數(shù)需要定義為~MyBuffer()。當對象不再使用時,通常使用析構函數(shù)來清理。3.6.4對象成員初始化通常情況下,在使用類對象之前都會對其成員進行初始化。對象成員初始化有兩種方式,一種是通過初始化集合來初始化對象,這種方式主要用于非類類型的成員中,如數(shù)組的初始化。一種方式是在構造函數(shù)中對對象成員進行初始化,這種方式用于類對象的成員初始化。3.6.5常類型(const)const關鍵字可以指定常類型。指定對象或變量是不可以修改的,稱為常類型。當成員函數(shù)指定參數(shù)列表,并且使用const關鍵字修飾時,則表示函數(shù)執(zhí)行時不能修改對象的值,成為常函數(shù)。常類型的聲明語法為:const成員聲明成員函數(shù)const3.6.6this指針this指針用來表示函數(shù)調(diào)用者的對象指針,它是一個常指針,所有的非靜態(tài)成員函數(shù)都可以使用this指針。使用this->成員變量名的形式可以訪問對象的數(shù)據(jù)成員或函數(shù)成員。但是為了簡化起見,編譯器支持在對象內(nèi)部,不需要輸入this->,而直接使用數(shù)據(jù)成員或函數(shù)成員名來調(diào)用數(shù)據(jù)成員和函數(shù)成員。但是在有些情況下,需要顯式指定要調(diào)用的成員函數(shù)所屬的對象時,就需要使用this指針來確定成員所屬的范圍。對于類的非靜態(tài)成員函數(shù)和靜態(tài)成員函數(shù)的處理情況是不同的。3.6.7類的作用域和對象的生存期C++類名都是在一定的程序范圍內(nèi)有效的,稱為類的作用域,作用域決定了除了靜態(tài)對象外的其他對象的生存期。作用域也決定了類的構造函數(shù)和析構函數(shù)調(diào)用時成員的可見性以及本地變量的初始化值。C++中有五種作用域。3.6.8靜態(tài)成員類中可以包含靜態(tài)成員數(shù)據(jù)和成員函數(shù)。當數(shù)據(jù)成員聲明為靜態(tài)成員時,則此類的所有對象的這個數(shù)據(jù)成員都使用同一個副本。靜態(tài)數(shù)據(jù)成員不是類對象的一部分,它們是獨立的對象。因此,靜態(tài)數(shù)據(jù)成員的聲明不是定義。數(shù)據(jù)成員是在類范圍內(nèi)聲明,而定義則是在文件范圍內(nèi)定義。這些靜態(tài)成員具有外部鏈接。靜態(tài)成員在聲明時使用static關鍵字來聲明。3.6.9友元在有些情況下,允許成員級別的訪問函數(shù)可以訪問其他類的私有成員和函數(shù)比較方便。這時可以使用friend關鍵字聲明友元。開發(fā)人員可以為指定函數(shù)或類定義友元,使它的函數(shù)不僅public成員可以被其他函數(shù)或類調(diào)用,而且它的protected和private成員也可以被指定函數(shù)或類調(diào)用。這就是友元的含義,可以理解為“朋友”,也就是說,除了公共成員可以被別人訪問外,它的某些成員允許“朋友”對象訪問。3.7類的高級特性類之所以有別于結構體和共用體等其他類對象,是因為類除了具有基本的對象概念的實現(xiàn)外,還具有很多高級特性,正是這些高級特性使C++語言得到了長足的發(fā)展。本節(jié)就介紹類的部分高級特性。本節(jié)主要介紹了繼承、多重繼承、虛函數(shù)、函數(shù)重載和運算符重載的知識。3.7.1繼承語法在C++中定義新類時,可以從已經(jīng)存在的類中派生而來,這種機制稱為繼承。已經(jīng)存在的用于派生的類稱為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度個人信用貸款合同標準版本2篇
- 出國留學銷售代表銷售總結報告
- 二零二五版牙科診所綠色環(huán)保材料使用協(xié)議3篇
- 二零二五年度公租房買賣合同模板及注意事項3篇
- 二零二五年度新能源項目居間合作協(xié)議4篇
- 二零二五年度個人商鋪買賣合同示范4篇
- 2025版贖樓擔保與房地產(chǎn)抵押貸款合同6篇
- 2025版物業(yè)管理公司人力資源外包合作協(xié)議書范本3篇
- 二零二五年度移動支付解決方案個人定制開發(fā)合同4篇
- 二零二五年度高空作業(yè)施工圍板租賃與安裝服務合同2篇
- 人教版六年級數(shù)學上冊《應用題》專項練習題(含答案)
- 第三單元 嘆錦繡中華書傳統(tǒng)佳話(教學設計) 三年級語文下冊大單元教學(部編版)
- 洛奇化石復原腳本
- 人教版三年級上冊豎式計算練習300題及答案
- 【“凡爾賽”網(wǎng)絡流行語的形成及傳播研究11000字(論文)】
- 建筑工程施工安全管理思路及措施
- 領導干部的情緒管理教學課件
- 初中英語-Unit2 My dream job(writing)教學課件設計
- 供貨方案及時間計劃安排
- 唐山動物園景觀規(guī)劃設計方案
- 中國版梅尼埃病診斷指南解讀
評論
0/150
提交評論