1.C++簡單程序設(shè)計_第1頁
1.C++簡單程序設(shè)計_第2頁
1.C++簡單程序設(shè)計_第3頁
1.C++簡單程序設(shè)計_第4頁
1.C++簡單程序設(shè)計_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C+ Programming Language Dr. Zheng XiaojuanAssociate ProfessorSoftware College of Northeast Normal UniversityAugust. 20101主講教師:鄭曉娟 教授 博士研究方向:軟件形式化方法及其應(yīng)用移動代碼及其安全各種程序設(shè)計語言及其實現(xiàn)技術(shù)面向方面的文檔驅(qū)動需求工程技術(shù)面向?qū)ο蟪绦蛟O(shè)計方法嵌入系統(tǒng)聯(lián)系方式:辦公室:309室辦公室電話:84536268-mail:自我介紹2本課程與其它后續(xù)課程的關(guān)系C+程序設(shè)計語言(前導(dǎo)課程: C程序設(shè)計語言)項目拉動教學(xué)(課程項目

2、) C+實戰(zhàn) 解釋程序的面向?qū)ο笤O(shè)計與實現(xiàn) (C+語言、Visual C+6.0、面向?qū)ο蟪绦蛟O(shè)計)Compiler Construction Principles & Implementation Techniques (雙語教學(xué)) (前導(dǎo)課程: 離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、 C及C+程序設(shè)計語言、操作系統(tǒng))4. 項目拉動教學(xué)(綜合設(shè)計與開發(fā)) 編譯程序的面向?qū)ο笤O(shè)計與實現(xiàn) (編譯原理、C+語言、Visual C+6.0-MFC、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O(shè)計)3與本課程相關(guān)的內(nèi)容面向?qū)ο蟪绦蛟O(shè)計方法UMLVisical C+6.0(MFC)4閱讀原版教材或者中英文對照。1 Bjarne Stroust

3、rup. The C+ Programming Language 3rd ed. Addison-Wesley, 1997, ISBN 0-201-88954-4.2Ira Pohl.Object-Oriented Programming Using C+ 電子工業(yè)出版社3 Harvey M.Deitel. C+ How to Program.4 D.S.Malik.C+ Programming:Program Design Including Data Structures.5 D.S.Malik.C+ Programming:From Problem Analysis to Program

4、 Design.6 Grady Booch.Object-Oriented Analysis and Design.本課程參考書目5要求: 保持課堂秩序 避免閑談和手機干擾 鼓勵課程內(nèi)容討論 (教學(xué)互動) 歡迎教學(xué)反饋6教學(xué)方式: 授課,上機練習(xí);學(xué)習(xí)方法(建議): 看書自主學(xué)習(xí)與聽課(C+基本語法,面向?qū)ο蟪绦蛟O(shè)計OOP) 上機操作(應(yīng)用C+解決實際問題) 強調(diào)全局思維,鼓勵實踐和自主擴展知識; 不知 知; 不理解 會應(yīng)用。7課程結(jié)構(gòu)C+簡單程序設(shè)計類與對象函數(shù)、指針與字符串繼承與派生多態(tài)性流類庫與輸入/輸出C+項目拉動教學(xué)8第一章 C+簡單程序設(shè)計 9一 C+語言概述二 基本數(shù)據(jù)類型和表達

5、式三 數(shù)據(jù)的輸入與輸出四 程序的基本控制結(jié)構(gòu)本章內(nèi)容10一 C+語言概述C/C+的歷史匯編語言、FORTRAN、ALGOL-60、Pascal、CSmalltalk、帶類的C、C+C+語言的特點支持OOP的最主要代表語言代碼簡潔高效率是C語言的超集11C與C+關(guān)系C語言缺點:不支持代碼重用 應(yīng)用場合:中小型應(yīng)用程序設(shè)計(1萬行以內(nèi))差別:編程方法: C:面向過程 C+:面向?qū)ο?程序格式: C:源程序=主模塊+若干子模塊 =main( )+若干子函數(shù) =數(shù)據(jù)+算法 C+:源程序 =main( )+若干個類定義 =對象+消息12兼容性:源代碼(語法) 系統(tǒng)資源(庫函數(shù))改良:改進了C中易出錯的語

6、法規(guī)則擴充:與類有關(guān)的性能擴充 抽象、封裝、繼承、多態(tài) 與類無關(guān)的性能擴充 const new delete 重載 13 4. 一個簡單的C+程序 #includeusing namespace std; void main() couthello!n; coutI am a student.n; 14主函數(shù):應(yīng)用程序入口。任何應(yīng)用程序必須有(也只能有)一個名為main( )的函數(shù),程序從main( )開始執(zhí)行。輸出流對象cout:是C+系統(tǒng)預(yù)定義的對象,輸出操作由操作符“”來表達,功能:將緊隨其后的雙引號中的字符串輸出到標準輸出設(shè)備(顯示器)上。頭文件:供程序文件共享的含有函數(shù)說明和其他說明

7、的文本文件,擴展名為.h??捎胕nclude 命令插入到程序文件中。iostream.h文件中聲明了程序所需要的輸入和輸出操作的有關(guān)信息。15 每個以符號“”開頭的行,稱為編譯預(yù)處理語句。編譯預(yù)處理是C+組織程序的工具。 一個C+程序可以由一個或多個函數(shù)組成。任何一個完整的C+程序,都必須包含一個且只能包含一個名為main( )的函數(shù)。 函數(shù)體應(yīng)由“”括起來。函數(shù)體一般包括變量的定義部分和執(zhí)行部分。所有的變量要先定義后使用。 16 C+的注釋為“/”之后的內(nèi)容,直到換行。注釋僅供閱讀程序使用。在生成可執(zhí)行程序之前,C+忽略注釋。C+兼容C語言注釋。 每個語句和數(shù)據(jù)定義的后面都要有一個分號。 m

8、ain函數(shù)名和關(guān)鍵字(如void、int、float等)都是小 寫字母構(gòu)成。C+程序中的標識符大小寫“敏感”。17字符集 C+語言的字符集由下述字符構(gòu)成: 英文字母:AZ,az 數(shù)字字符:09 特殊字符:空格!#%&*_(下劃線)+=:- / ? ;. ( ) 18詞法記號 詞法記號是構(gòu)成語句的最小單元。標識符 標識符是程序員聲明的字符序列,它命名程序正文中的一些實體,如函數(shù)名、變量名、類名、對象名等。C+標識符的構(gòu)成規(guī)則如下: 以大寫字母、小寫字母或下劃線(_)開始。 可以由大寫字母、小寫字母、下劃線(_)或數(shù)字09組成。19 大寫字母和小寫字母代表不同的標識符。 不能是C+關(guān)鍵字。例如,R

9、ichad、red_line、_Nol:合法 No.1、1st:不合法。特別注意:C+大小寫敏感。例如,標識符something、Something、SOMETHING、SomeThing都被視為不同的名字。 20關(guān)鍵字 關(guān)鍵字是C+預(yù)定義好的標識符。如void,int、float、long及double等等。 文字 文字是在程序中直接使用符號表示的數(shù)據(jù),包括數(shù)字、字符、字符串和布爾文字。操作符(運算符) 操作符是用于實現(xiàn)各種運算的符號,例如、*、等。21分隔符 分隔符用于分隔各個詞法記號或程序正文。 ( ) ,:; 分隔符不表示任何實際的操作,僅用于構(gòu)造程序??瞻追?在程序編譯時的詞法分析階

10、段將程序正文分解為詞法記號和空白。空白符用于指示詞法記號的開始和結(jié)束位置??瞻资强崭?、制表符(TAB鍵產(chǎn)生的字符)、換行符(Enter鍵所產(chǎn)生的字符)和注釋的總稱。 22編輯:輸入、修改源程序; 輸入:鍵盤等 輸出:源程序文件(擴展名為.cpp) (源程序文件:存儲程序的文本文件)編譯:分析源程序,生成目標程序; 輸入:源程序文件 輸出:目標程序文件(擴展名為.obj)應(yīng)用程序開發(fā)的基本步驟 23連接:為所有的函數(shù)、變量等分配具體地址,生成可執(zhí)行程序 輸入:目標程序文件、程序庫文件等 輸出:可執(zhí)行程序(擴展名為.exe)運行:即執(zhí)行程序,包括 應(yīng)用運行:正式投入使用后的運行; 測試運行:為驗證

11、整個系統(tǒng)的正確性的試運行。 調(diào)試運行:為驗證某些函數(shù)的正確性的試運行。24基本術(shù)語源程序:用源語言寫的,有待翻譯的程序目標程序:也稱為結(jié)果程序,是源程序通過翻譯程序加工以后所生成的程序。翻譯程序:是指一個把源程序翻譯成等價的目標程序的程序。25基本術(shù)語 三種不同類型的翻譯程序匯編程序:其任務(wù)是把用匯編語言寫成的源程序,翻譯成機器語言形式的目標程序。編譯程序:若源程序是用高級程序設(shè)計語言所寫,經(jīng)翻譯程序加工生成目標程序,那么,該翻譯程序就稱為編譯程序。26基本術(shù)語 三種不同類型的翻譯程序解釋程序:這也是一種翻譯程序,同樣是將高級語言源程序翻譯成機器指令。它與編譯程序不同點就在于:它是邊翻譯邊執(zhí)行

12、的,即輸入一句、翻譯一句、 執(zhí)行一句,直至將整個源程序翻譯并執(zhí)行完畢。27應(yīng)用程序的集成化開發(fā)環(huán)境指集編輯、編譯、連接、項目管理、程序排誤等多功能為一體的軟件開發(fā)工具,最常用: Visual C+: Microsoft 公司產(chǎn)品,應(yīng)用廣泛與Windows及Microsoft 公司的其它軟件產(chǎn)品配合很好。 C+ Builder28Visual C+6.0界面(IDE) Visual C+6.0的用戶界面通常被稱為集成開發(fā)環(huán)境(IDE),具有包括創(chuàng)建源碼、編輯代碼、編譯、鏈接和調(diào)試等功能。29 Visual C+ 6.0用戶界面劃分成四個主要區(qū)域:菜單工具欄工作區(qū)窗口代碼編輯窗口輸出窗口,30 8

13、.數(shù)據(jù)類型 常量與變量#include using namespace std;int main(void) const int PRICE=30; int num,total; float v ,r,h; num=10; total=num*PRICE; couttotal endl; r=2.5; h=3.2; v=3.14159*r*r*h; coutv endl;常量變量變量先聲明后使用符號常量Page 3131#include using namespace std;int main(void) const int PRICE=30; int num,total; float v ,

14、r,h; num=10; total=num*PRICE; couttotal endl; r=2.5; h=3.2; v=3.14159*r*r*h; coutv endl; 數(shù)據(jù)類型 整型數(shù)據(jù)整型常量shortunsigned short 2字節(jié)int、unsigned int 4字節(jié)longunsigned long 4字節(jié)整型變量整型變量聲明32數(shù)據(jù)類型 整型數(shù)據(jù)及取值范圍類型說明符 位數(shù)數(shù)值范圍短整short16-3276832767基本 int32 -231(231-1)長整long32-231(231-1)無符號unsigned short16065535 unsigned in

15、t320(232-1)unsigned long320(232-1)33#include using namespace std;int main(void) const int PRICE=30; int num,total; float v ,r,h; num=10; total=num*PRICE; couttotalendl; r=2.5; h=3.2; v=3.14159*r*r*h; coutvendl; 數(shù)據(jù)類型 實型數(shù)據(jù)實型常量float 4字節(jié) 3.41038 7位有效數(shù)字double 8字節(jié) 1.710308 15位有效數(shù)字long double 8字節(jié) 1.710308

16、15位有效數(shù)字實型變量缺省為double型后綴 F(或 f)為 float型后綴 L(或 l)為 long double型34 數(shù)據(jù)類型 字符型數(shù)據(jù)(一)字符常量單引號括起來的一個字符,如:a, D, ?, $字符變量用來存放字符常量例:char c1,c2; c1=a; c2=A;字符數(shù)據(jù)在內(nèi)存中的存儲形式以ASCII碼存儲,占1字節(jié),用7個二進制位Page 3535字符數(shù)據(jù)的使用方法字符數(shù)據(jù)和整型數(shù)據(jù)之間可以運算。字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。字符串常量例:CHINA a a所以:char c; c=a; C H I N A 0a 0aPage 36 數(shù)據(jù)類型 字符型數(shù)據(jù)(二)36 數(shù)據(jù)

17、類型 布爾型數(shù)據(jù)布爾型變量的說明:例:bool flag;布爾型數(shù)據(jù)的取值:只有 false 和 true 兩個值37 數(shù)據(jù)類型 變量初始化例: int a=3; double f=3.56; char c=a; int c(5);Page 3838數(shù)據(jù)類型 混合運算時的類型轉(zhuǎn)換不同類型數(shù)據(jù)進行混合運算時,C+編譯器會自動進行類型轉(zhuǎn)換。為了避免不同的數(shù)據(jù)類型在運算中出現(xiàn)類型問題,應(yīng)盡量使用同種類型數(shù)據(jù)??梢圆捎脧娭祁愋娃D(zhuǎn)換:例如:float c;int a,b;c=float(a)/float(b); 或 c= (float)a/(float)b; 39變量的存儲類型auto屬于一時性存儲,其

18、存儲空間可以被若干變量多次覆蓋使用。register存放在通用寄存器中。extern在所有函數(shù)和程序段中都可引用。static在內(nèi)存中是以固定地址存放的,在整個程序運行期間都有效。40算術(shù)運算符與算術(shù)表達式基本算術(shù)運算符 + - * / (若整數(shù)相除,結(jié)果取整) %(取余,操作數(shù)為整數(shù))優(yōu)先級與結(jié)合性先乘除,后加減,同級自左至右+, -(自增、自減)例:i+; - j;Page 4141賦值運算符和賦值表達式 簡單的賦值運算符=舉例n=n+5表達式的類型等號左邊對象的類型表達式的值等號左邊對象被賦值后的值Page 4242賦值運算符和賦值表達式 復(fù)合的賦值運算符有10種復(fù)合運算符:+=, -=

19、, *=, /=, %=,=,&=,=,|= 例a+=3 等價于 a=a+3x*=y+8 等價于 x=x*(y+8)43賦值運算符和賦值表達式 賦值表達式舉例a=5表達式值為5a=b=c=5表達式值為5,a,b,c均為5a=5+(c=6)表達式值為11,a為11,c為6a=(b=4)+(c=6) 表達式值為10,a為10,b為4,c為6a=(b=10)/(c=2) 表達式值為5,a為5,b為10,c為2a+=a-=a*a 相當于 a=a+(a=a-a*a)44逗號運算和逗號表達式格式表達式1,表達式2求解順序及結(jié)果先求解1,再求解2,最終結(jié)果為表達式2的值例a=3*5 , a*4 最終結(jié)果為6

20、0Page 4545關(guān)系運算與關(guān)系表達式關(guān)系運算是比較簡單的一種邏輯運算,優(yōu)先次序: = = != 優(yōu)先級相同(高) 優(yōu)先級相同(低) 關(guān)系表達式是一種最簡單的邏輯表達式其結(jié)果類型為 bool,值只能為 true 或 false。例如:ab,cb)&(xy) 其結(jié)果類型為 bool,值只能為 true 或 false47條件運算符與條件表達式一般形式表達式1?表達式2:表達式3表達式1 必須是 bool 類型執(zhí)行順序先求解表達式1,若表達式1的值為true,則求解表達式2,表達式2的值為最終結(jié)果若表達式1的值為false,則求解表達式3,表達式3的值為最終結(jié)果例: x=ab? a:b;48條件

21、運算符與條件表達式注意:條件運算符優(yōu)級高于賦值運算符,低于邏輯運算符表達式2、3的類型可以不同,條件表達式的最終類型為 2 和 3 中較高的類型。例: x=ab? a:b;49sizeof 運算符語法形式sizeof (類型名)或 sizeof (表達式)結(jié)果值:“類型名”所指定的類型或“表達式”的結(jié)果類型所占的字節(jié)數(shù)。例:sizeof(short)sizeof(x)50位運算按位與(&)運算規(guī)則將兩個運算量的每一個位進行邏輯與操作舉例:計算 3 & 5 3: 0 0 0 0 0 0 1 1 5:(&) 0 0 0 0 0 1 0 13 & 5: 0 0 0 0 0 0 0 1用途:將某一位置

22、0,其它位不變。例如:將 char 型變量 a 的最低位置 0: a = a & 0376;取指定位。例如:有 char c; int a; 取出 a 的低字節(jié),置于 c 中:c = a & 0377;51位運算按位或(|)運算規(guī)則將兩個運算量的每一個位進行邏輯或操作舉例:計算 3 | 5 3: 0 0 0 0 0 0 1 1 5:(|) 0 0 0 0 0 1 0 13 | 5: 0 0 0 0 0 1 1 1用途:將某些位置1,其它位不變。例如:將 int 型變量 a 的低字節(jié)置 1 : a = a | 0 xff;52位運算按位異或()運算規(guī)則兩個操作數(shù)進行異或:若對應(yīng)位相同,則結(jié)果該位

23、為 0,若對應(yīng)位不同,則結(jié)果該位為 1,舉例:計算 071052 071: 0 0 1 1 1 0 0 1 052:() 0 0 1 0 1 0 1 0 071052 : 0 0 0 1 0 0 1 153位運算按位異或()用途:使特定位翻轉(zhuǎn)(與0異或保持原值,與1異或取反) 例如:要使 01111010 低四位翻轉(zhuǎn): 0 1 1 1 1 0 1 0()0 0 0 0 1 1 1 10 1 1 1 0 1 0 154位運算取反()單目運算符,對一個二進制數(shù)按位取反。例: 025:0000000000010101 025:111111111110101055位運算移位左移運算()右移后,低位:舍

24、棄 高位:無符號數(shù):補0 有符號數(shù):補“符號位”56運算符優(yōu)先級括號+,-,sizeof*, /, %+, -=, !=位運算&|?:賦值運算逗號運算低高57混合運算時數(shù)據(jù)類型的轉(zhuǎn)換 隱含轉(zhuǎn)換一些二元運算符(算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符和賦值運算符)要求兩個操作數(shù)的類型一致。在算術(shù)運算和關(guān)系運算中如果參與運算的操作數(shù)類型不一致,編譯系統(tǒng)會自動對數(shù)據(jù)進行轉(zhuǎn)換(即隱含轉(zhuǎn)換),基本原則是將低類型數(shù)據(jù)轉(zhuǎn)換為高類型數(shù)據(jù)。char short int unsigned long unsigned long float doub低 高58混合運算時數(shù)據(jù)類型的轉(zhuǎn)換 隱含轉(zhuǎn)換當參與運算的操作數(shù)必

25、須是bool型時,如果操作數(shù)是其它類型,編譯系統(tǒng)會自動將非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false。位運算的操作數(shù)必須是整數(shù),當二元位運算的操作數(shù)是不同類型的整數(shù)時,也會自動進行類型轉(zhuǎn)換,賦值運算要求左值與右值的類型相同,若類型不同,編譯系統(tǒng)會自動將右值轉(zhuǎn)換為左值的類型。59混合運算時數(shù)據(jù)類型的轉(zhuǎn)換 強制類型轉(zhuǎn)換語法形式:類型說明符(表達式)或(類型說明符)表達式強制類型轉(zhuǎn)換的作用是將表達式的結(jié)果類型轉(zhuǎn)換為類型說明符所指定的類型。60語句聲明語句表達式語句選擇語句循環(huán)語句跳轉(zhuǎn)語句復(fù)合語句標號語句 61表達式語句格式:表達式;表達式語句與表達式的區(qū)別:表達式可以包含在其它表達式中,而語句不可。例

26、:if (a=b)0) t=a;不可寫為:if (a=b;)0) t=a;62復(fù)合語句(塊)將多個語句用一對大括號包圍,便構(gòu)成一個復(fù)合語句例如sum=sum+i;i+;63簡單的輸入、輸出向標準輸出設(shè)備(顯示器)輸出例:int x; cout“x=“x; 64順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)算法的基本控制結(jié)構(gòu)65if (表達式) 語句例:if (xy) couty) coutx; else couty;if (表達式1) 語句1else if (表達式2) 語句2else if (表達式3) 語句3 else 語句 n if 語句 三種形式66一般形式if ( ) if ( ) 語句 1 else 語

27、句 2else if ( ) 語句 3 else 語句 4注意語句 1、2、3、4 可以是復(fù)合語句,每層的 if 與 else 配對,或用 來確定層次關(guān)系。if 語句 嵌套67一般形式switch (表達式) case 常量表達式 1:語句1 case 常量表達式 2:語句2 case 常量表達式 n:語句n default : 語句n+1 switch 語句執(zhí)行順序以case中的常量表達式值為入口標號,由此開始順序執(zhí)行。因此,每個case分支最后應(yīng)該加break語句。每個常量表達式的值不能相同,次序不影響執(zhí)行結(jié)果。可以是多個語句,但不必用 ??梢允钦?、字符型、枚舉型68使用switch語句

28、應(yīng)注意的問題case分支可包含多個語句,且不用 。表達式、判斷值都是int型或char型。若干分支執(zhí)行內(nèi)容相同可共用一組語句。69while 語句形式while (表達式) 語句可以是復(fù)合語句,其中必須含有改變條件表達式值的語句。執(zhí)行順序先判斷表達式的值,為 true 時,再執(zhí)行語句。70do-while 語句一般形式do 語句while (表達式)可以是復(fù)合語句,其中必須含有改變條件表達式值的語句。執(zhí)行順序先執(zhí)行循環(huán)體語句,后判斷條件。表達式為 true 時,繼續(xù)執(zhí)行循環(huán)體與while 語句的比較:While 語句執(zhí)行順序 先判斷表達式的值,為true 時,再執(zhí)行語句71for 語句語法形式

29、for (表達式1;表達式2;表達式3) 語句 循環(huán)前先求解為true時執(zhí)行循環(huán)體每次執(zhí)行完循環(huán)體后求解72break 和 continue 語句break語句使程序從循環(huán)體和switch語句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語句。不宜用在別處。continue 語句結(jié)束本次循環(huán),接著判斷是否執(zhí)行下一次循環(huán)。73typedef語句為一個已有的數(shù)據(jù)類型另外命名語法形式typedef 已有類型名 新類型名表;例如typedef double area,volume;typedef int natural;natural i1,i2;area a;volume v;74枚舉類型enum只要將需要的變量值

30、一一列舉出來,便構(gòu)成了一個枚舉類型。枚舉類型的聲明形式如下:enum 枚舉類型名 變量值列表;例如:enum weekday sun,mon,tue,wed,thu,fri,sat;75枚舉類型enum枚舉類型應(yīng)用說明: 對枚舉元素按常量處理,不能對它們賦值。例如,不能寫:sun=0; 枚舉元素具有缺省值,它們依次為: 0,1,2,。 也可以在聲明時另行指定枚舉元素的值,如:enum weekday sun=7,mon=1,tue,wed,thu,fri,sat;枚舉值可以進行關(guān)系運算。 整數(shù)值不能直接賦給枚舉變量,如需要將整數(shù)賦值給枚舉變量,應(yīng)進行強制類型轉(zhuǎn)換。76結(jié)構(gòu)體結(jié)構(gòu)的聲明結(jié)構(gòu)的概念

31、結(jié)構(gòu)是由不同數(shù)據(jù)類型的數(shù)據(jù)組成的集合體。聲明結(jié)構(gòu)類型 struct 結(jié)構(gòu)名 數(shù)據(jù)類型 成員名 1; 數(shù)據(jù)類型 成員名 2; : 數(shù)據(jù)類型 成員名 n; ;77結(jié)構(gòu)體結(jié)構(gòu)變量說明變量說明形式 結(jié)構(gòu)名 結(jié)構(gòu)變量名;注意:結(jié)構(gòu)變量的存儲類型概念、它的壽命、可見性及使用范圍與普通變量完全一致。結(jié)構(gòu)變量說明在結(jié)構(gòu)類型聲明之后,二者也可同時進行。結(jié)構(gòu)變量占內(nèi)存大小可用 sizeof 運算求出: sizeof(運算量)78結(jié)構(gòu)體結(jié)構(gòu)變量的初始化和使用初始化說明結(jié)構(gòu)變量的同時可以直接設(shè)置初值。使用結(jié)構(gòu)體成員的引用形式: 結(jié)構(gòu)變量名.成員名79例結(jié)構(gòu)體變量的初始化和使用#include #include usi

32、ng namespace std;struct student /學(xué)生信息結(jié)構(gòu)體 int num; /學(xué)號 char name20; /姓名 char gender; /性別 int age; /年齡stu=97001,Lin Lin,F,19;int main() coutsetw(7)stu.numsetw(20) setw(3)stu.sexsetw(3)stu.age;運行結(jié)果: 97001 Lin Lin F 1980聯(lián)合體聲明形式:union 聯(lián)合名 數(shù)據(jù)類型 成員名 1; 數(shù)據(jù)類型 成員名 2; : 數(shù)據(jù)類型 成員名 n; ;聯(lián)合體類型變量說明的語法形式聯(lián)合名 聯(lián)

33、合變量名;引用形式:聯(lián)合名.成員名81例: union uarea char c_data; short s_data; long l_data;uareac_datal_datas_data聯(lián)合體82無名聯(lián)合無名聯(lián)合沒有標記名,只是聲明一個成員項的集合,這些成員項具有相同的內(nèi)存地址,可以由成員項的名字直接訪問。例:union int i; float f;在程序中可以這樣使用:i=10;f=2.2;83引用是個別名,當建立引用時,程序用另一個變量或?qū)ο螅繕耍┑拿謥韺ζ溥M行初始化。對引用的改動實際是對目標的改動。引用的聲明形式: &引用名=目標名 或 & 引用名=目標名 9.引用84 引用

34、名是為引用型變量所起的名字,它必須遵循變量的命名規(guī)則。 前面的數(shù)據(jù)類型就是它所引用目標的數(shù)據(jù)類型。特別說明:引用在聲明時必須進行初始化,即指出該引用是哪一個對象的別名。這里的目標名可以是變量名,也可以對象名。而且引用一旦聲明,就以對應(yīng)目標的內(nèi)存單元地址作為自己的地址,并且不再改變,從一而終。85 例, 引用一個整型變量: int someInt; int& rInt=someInt; 聲明rInt是對整數(shù)的引用,初始化為引用someInt。要求someInt已經(jīng)聲明或定義。 引用不是值,不占存儲空間。聲明引用時,目標的存儲狀態(tài)不會改變。86例1 建立和使用引用。#includevoid mai

35、n( )int someInt;int& rInt=someInt;someInt=6;coutsomeInt:someIntendl;coutrInt:rIntendl; rInt=7;coutsomeInt:someIntendl;coutrInt:rIntendl;程序運行結(jié)果為someInt:6rInt:6someInt:7rInt:787 在上述程序中,引用rInt用someInt來初始化。無論改變someInt或rInt,實際上都是指someInt,兩個的值都一樣。 引用與變量的關(guān)系 6 someInt rInt8810. C+引用的應(yīng)用類型要保持一致 int x=1; int&

36、newx=x;(引用的目的)改進C中函數(shù)的形參為指針型的形參定義對函數(shù)體所帶來的不安全性(易出錯)。正確地應(yīng)用引用:一般變量進行引用,必須采用“=”加以初始化, int x=1; int& newx=x;對形參進行引用,不需要采用“=”加以指明原始的符號名 int add(int& x, int& y) . add(a,b);89形參為引用時調(diào)用要求實參不能為常量 int add(int& x, int& y) . add(1,2); X int a=1,b=2; add(a,b);d) 引用與指針的關(guān)系: 引用具有指針的威力,但是調(diào)用引用傳遞的函數(shù)時,可讀性卻比指針傳遞好。引用具有傳值方式函

37、數(shù)調(diào)用語法的簡單性與可讀性,但是威力卻比傳值方式強。90怎樣區(qū)別&a是聲明引用變量還是取變量地址操作: int &a引用聲明 cout&a取變量地址&a前面有無類型符91例2:使用引用作形參,實現(xiàn)兩個變量的值互換#include using namespace std;void Swap(int& a,int& b);int main( ) int x(5),y(10); Swap(x,y); cout“x=“xendl; cout“y=“yendl;Void Swap(int& a,int& b) int t; t=a;a=b;b=t;應(yīng)用1:用引用傳遞函數(shù)參數(shù)92例3:函數(shù)返回值時要生成一

38、個值的副本,而用引用返回值時不生成值的副本。#include using namespace std; float temp;float fn1(float r)temp=r*r*3.14; return temp;float& fn2(float r)temp=r*r*3.14; return temp; void main()float a=fn1(5.0);/1 float& b=fn1(5.0);/2 float c=fn2(5.0);/3 float& d=fn2(5.0);/4 coutaendl; coutbendl; coutcendl; coutdendl;應(yīng)用2:用引用返回值93程序的運行結(jié)果一樣(78.5),但他們在內(nèi)存中的活動情況各不相同(1)(2)stack5.0main()臨時變量fn1() r a 78.5float a=fn1(5.0);datatempstack5.0main()34:F124fn1() r b 78.5datatemp34:F124float& b=fn1(5.0)float fn1(float r)返回值方式的內(nèi)存布局返回值初始引用的情形94(3)(4)stack5.0main()臨時變量fn1()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論