版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、Welcome to C+ world !C+面向?qū)ο蟪绦蛟O計軟件學院軟件工程系任課教師: 田琳琳從C到C+C+起源主要過渡特性面向?qū)ο笈c面向過程1.由C到C+的演化1978年,Kernighan & Ritchie ?The C Programming Language ?1990年,C的標準化 優(yōu)點 高效靈活,功能和表達豐富,可移植性好; 操作系統(tǒng)的開發(fā)工具局限 類型檢查機制較弱 不支持代碼重用面向過程程序設計 設計思想 procedural programming 將復雜過程簡單的按功能分層,從而解決問題。 標準的過程化程序過程的功能劃分與過程內(nèi)部的編寫1.由C到C+的演化inputou
2、tputFunctionfun1fun2fun3fun4fun5fun6fun7main C程序的結(jié)構(gòu)圖面向過程的C程序1.由C到C+的演化1980年,Bell的Bjarne Stroustrup推出C+。 C+是C的改進和擴充C+語言包括過程性語言和類兩局部。 保持了C的簡潔性和高效性。支持面向?qū)ο蟮某绦蛟O計 ( OOP, Object Oriented Programming)C+程序由類(class)和函數(shù)(function)組成。C+的歷史Bjarne Stroustrup-C+之父主頁: :/ research.att /bs/ :/經(jīng)典巨作:?The C+ Programming
3、Language?The Design and Evolution of C+? 中文版:?C+程序語言設計?C+語言的設計和演化?C+程序設計 程序控制結(jié)構(gòu)函數(shù)數(shù)組與指針結(jié)構(gòu)面向?qū)ο蟪绦蛟O計方法設計和實現(xiàn)C+語言時,既保存了C語言的有效性、靈活性、便于移植等全部精華和特點,又添加了面向?qū)ο缶幊痰闹С郑哂袕姶蟮木幊坦δ?,編寫出的程序具有結(jié)構(gòu)清晰、易于擴充等優(yōu)良特性,適合于各種應用軟件、系統(tǒng)軟件的程序設計。 C+語言由C語言擴展而來,同時它又對C語言的開展產(chǎn)生了一定的影響,ANSI C語言在標準化過程中吸收了C+語言中某些語言成分。From C to C+ C語言與C+的關系2. C+對C語言
4、的擴展C+語言對C語言在結(jié)構(gòu)化方面相應的擴展: 頭文件與庫函數(shù)輸入輸出語句關鍵字常量與變量根本類型函數(shù)按引用傳遞數(shù)據(jù)函數(shù)重載1頭文件與流對象 #include : 包含的頭文件 using namespace std; : 名字空間 提取運算符2. C+對C語言的擴展stdio.h printf() scanf() iostream.h cout 2程序塊中的變量聲明 將幾個語句用大括號 組合起來就構(gòu)成了一個程序塊。 在C語言中,變量的聲明只允許出現(xiàn)在程序塊的開始; 而在C+語言中變量聲明可以出現(xiàn)在任何位置。2. C+對C語言的擴展如下面的程序片斷:for( int i=0; i10; i+)
5、 sum+=i; 2. C+對C語言的擴展3常量 C+語言中增加了常量類型用標識符const聲明,其值在作用域內(nèi)保持不變 const int maxSize=128; const int iArray =1,2,3,4,5,6; char * const str1= Hello world! ; const char *str2 = Hello, C+;#define / const2. C+對C語言的擴展4根本類型布爾型: bool flag = true ; flag = false;枚舉型: enum WeekDay = Sun,Mon,Tue,Wed,Thu,Fri,Sat ; Wee
6、kDay today = Wed ; 結(jié)構(gòu)體 struct Student ; Student stu;類類型 class Person ; Person teacher 4 ;2. C+對C語言的擴展5作用域標識符增加了作用域標識符:名字解析運算符,以解決局部變量名與全局變量的同名重復問題。在局部變量的作用域內(nèi)可用作用域標識符:對被其隱藏的同名全局變量進行訪問。int x=0;void test(int x)x=5; /此處引用局部變量:x=9;/此處引用全局變量2. C+對C語言的擴展6動態(tài)空間申請new 與delete的用法int *p1 = (int *)malloc(sizeof(i
7、nt) * length); free(p1);int *p2 = new int length ;delete p2;/ 釋放數(shù)組用法delete p2; / 釋放單個元素new Vs malloc1、new 是c+中的操作符, malloc是c 中的一個函數(shù)2、new 不止是分配內(nèi)存,而且會調(diào)用類的構(gòu)造函數(shù),同理delete會調(diào)用類的析構(gòu)函數(shù); 而malloc那么只分配內(nèi)存,不會進行初始化類成員的工作,同樣free也不會調(diào)用析構(gòu)函數(shù)3、內(nèi)存泄漏Memory leak 2. C+對C語言的擴展C+程序中的函數(shù)函數(shù)的聲明函數(shù)的定義函數(shù)參數(shù)傳遞和返回值 參數(shù)的按值/ 按地址/ 按引用傳遞函數(shù)的調(diào)
8、用 遞歸與迭代內(nèi)聯(lián)函數(shù) 默認參數(shù) 函數(shù)重載與函數(shù)模板例如程序 swap.cpp課堂練習 將swap2.c按要求改成能夠正確運行的CPP程序 C+函數(shù)調(diào)用中的數(shù)據(jù)傳遞1。 參數(shù)的按值傳遞 數(shù)按值調(diào)用傳遞時,生成實際參數(shù)值副本并傳給被調(diào)用 函數(shù)的形式參數(shù)。 副本(行參)的改變并不影響調(diào)用者的原始變量值 (實參). 函數(shù)內(nèi)對形參的訪問、修改,都在形參的標識對象進 函數(shù)返回時,形參對象被撤消,不影響實參的值 防止意外的副作用影響開發(fā)正確、可靠的軟件系統(tǒng)。 值傳送的實參可以是常量、有確定值的變量或表達式 函數(shù)返回值通過匿名對象傳遞/ 例 交換對象的值# include void swap ( int ,
9、 int ) ;void main ( ) int a = 3 , b = 8 ; cout a = a , b = b endl ; swap ( a , b ) ; cout after swapping. n ; cout a = a , b = b endl ;void swap ( int x , int y ) int temp = x ; x = y ; y = temp ;3a8b x y3x8y83 通過地址傳遞實參數(shù)據(jù)形參指針對應的實際參數(shù)是地址表達式,即對象的指針;實際參數(shù)把對象的地址值賦給形式參數(shù)名標識的指針變量;被調(diào)用函數(shù)通過形參指針間接訪問實參所指對象; 2。 參數(shù)
10、的按地址傳遞/ 例 交換對象的值# include void swap ( int * , int * ) ;void main ( ) int a = 3 , b = 8 ; cout a = a , b = b endl ; swap ( &a , &b ) ; cout after swapping. n ; cout a = a , b = b endl ;void swap ( int * x , int * y ) int temp = * x ; * x = * y ; * y = temp ;3a8bxy3a8b&ax&by *x *y/ 例 交換對象的值# include v
11、oid swap ( int * , int * ) ;void main ( ) int a = 3 , b = 8 ; cout a = a , b = b endl ; swap ( &a , &b ) ; cout after swapping. n ; cout a = a , b = b endl ;void swap ( int * x , int * y ) int temp = * x ; * x = * y ; * y = temp ;8a3b3. 按引用傳遞參數(shù)對一個數(shù)據(jù)可以使用“引用(reference)的方式聲明, 引用的作用是為一個變量起一個別名 這是C+對C的一個
12、重要擴充,引用是一種新的變量類型。 一般形式: Type & varible2 = varible1 ;Eg int a ; int &b = a; / 聲明b是int a的引用 b = 20; / a = 20 聲明變量b為引用類型,并不需要另外開辟內(nèi)存單元來存放b的值。 b和a占內(nèi)存中的同一個存儲單元,它們具有同一地址。20ab使用引用的常見錯誤在一條語句中聲明多個引用時應逐一聲明 int& x=a, y = b,z = c ; /error int &x=a, &y=b, &z=c; 聲明引用變量必須進行初始化,引用未定義變量稱懸掛引用。 int x , &y, *p ; / Erroz
13、: y must be initialized 將前面聲明的引用重新變?yōu)榱硪蛔兞康膭e名是個邏輯錯誤. int y =5, z = 3; int &x = z, &x = y;3. 按引用傳遞參數(shù)void main ( ) int number=20; . cout change_it(number); cout number; int change_it (int& value) value+10; return value;引用參數(shù)int&value=number直接引用number返回value值的副本給調(diào)用函數(shù)3。參數(shù)的按引用傳遞形參為實參的引用形式,擴充函數(shù)傳遞數(shù)據(jù)的功能引用參數(shù)即函數(shù)
14、的參數(shù)是按引用傳遞, 引用參數(shù)為調(diào)用函數(shù)中實參的別名。引用參數(shù)形式 在函數(shù)原型中該參數(shù)類型后面加上&,fuc( int &count) 在函數(shù)調(diào)用中,只指定變量名,該變量通過引用傳遞。被調(diào)用函數(shù)可直接修改原始變量實參 在被調(diào)用函數(shù)體中,通過參數(shù)名指定的變量實際上就是 引用調(diào)用函數(shù)中的原始變量。3. 按引用傳遞參數(shù)引用傳遞的特點消除了復制大量數(shù)據(jù)的開銷,有利提高執(zhí)行效率;在被調(diào)用函數(shù)中直接使用形參變量,提高可讀性;平安性較差,被調(diào)用函數(shù)能直接訪問和修改調(diào)用者的數(shù)據(jù)。 假設要傳遞較大的對象,用常量引用參數(shù)模擬按值調(diào)用 要指定引用常量,在參數(shù)聲明的類型說明符前面加上const。int change_
15、it ( const int& value);3。參數(shù)的按引用傳遞7引用引用的目的是為了消除指針引用顧名思義就是引用這個變量引用必須初始化。引用總是指向在初始化時被指定的對象,以后不能改變。不存在指向空值的引用。所以在使用引用之前不需要測試它的合法性。int a;int &b=a;C+對C語言的擴展C+特性:引用 內(nèi)聯(lián)函數(shù)inline C+為降低小程序調(diào)用開銷的一種機制。默認參數(shù)值 default parameter value 函數(shù)參數(shù)的默認值使得在函數(shù)調(diào)用時可不指定參數(shù)。重載函數(shù) overloaded function 函數(shù)重載是以同一個名字命名多個函數(shù)實現(xiàn)版本 。8函數(shù)重載C+語言可實現(xiàn)
16、函數(shù)重載,即多個函數(shù)在同一作用域可以用相同的函數(shù)名,編譯器在編譯時可以根據(jù)實參的類型來選擇應該調(diào)用的函數(shù)。在C+中,對相同功能但參數(shù)類型不同的函數(shù)可以使用相同的函數(shù)名,在調(diào)用時無需記憶多個函數(shù)名,而由編譯器根據(jù)參數(shù)類型選擇。2. C+對C語言的擴展int iNum1=5,y=iNum2;double dNum1=1.2, dNum2=2.3;float fNum1=1.1f, fNum2=2.2f;cout compare(iNum1,iNum2) compare(dNum1,dNum2) y) return 1; else return 0;int compare( float x, flo
17、at y) if(xy) return 0; else return 1; int compare( double x, double y) if(xy) return 0; return 1; int compare(char c1, char c2) return c1c2? 0 : 1; 重載函數(shù)9 缺省參數(shù) 在C+語言中,函數(shù)參數(shù)允許使用缺省值。當函數(shù)調(diào)用時,假設給出的參數(shù)個數(shù)少于函數(shù)表中參數(shù)的總數(shù)時,那么所缺參數(shù)自動取函數(shù)參數(shù)表中設置的缺省值。 void f(int x, int y=10)。 f(2);/f(2,10)。 函數(shù)可以有多個缺省參數(shù),但應注意只能從右往左缺省,例如: i
18、nt f1(int x, int y=0, int z=0); /正確 int f2(int x, int y=0, int z); /錯誤2. C+對C語言的擴展3.面向?qū)ο笏枷敫攀雒嫦驅(qū)ο蟮木幊趟枷肓D使在計算機語言中對事物的的描述與現(xiàn)實世界中該事物的本來面目盡可能的一致。 類(class)和對象(object)是面向?qū)ο蠓椒ǖ暮诵母拍睢?類是對一類事物描述,是抽象的、概念上的定義; 對象是實際存在的該類事物的每個個體,也稱實例(instance)。 面向過程程序設計設計思想 procedural programming 將復雜過程簡單的按功能分層,從而解決問題。 過程化編程是面向操作的(
19、action-oriented)結(jié)構(gòu)化: 描述任何實體的操作的序列只需三種根本控制結(jié)構(gòu)模塊化設計: 程序設計中各個過程體和組成局部用模塊表示過程化設計方法: 自頂向下,逐步細化函數(shù)對象 = 算法 數(shù)據(jù)結(jié)構(gòu)程序 = (對象+對象+對象+) + 消息 程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu) + 程序設計方法 + 語言工具和開發(fā)環(huán)境發(fā)送消息面向?qū)ο蟪绦蛟O計類 class類封裝了一組數(shù)據(jù)結(jié)構(gòu)和作用于該數(shù)據(jù)結(jié)構(gòu)的一組方法.面向?qū)ο笳Z言必需提供的用戶定義的數(shù)據(jù)類型 把具有相同屬性的事物劃分為一類,它將具有相同狀態(tài)、操作和訪問機制的多個對象抽象成為一個對象類。面向?qū)ο蟪绦蛟O計對象 object 構(gòu)成世界的一個獨立單位
20、,它具有自己的靜態(tài)特征狀態(tài)和動態(tài)特征操作。靜態(tài)特征即可以用某種數(shù)據(jù)來描述的特征動態(tài)特征即對象所表現(xiàn)的行為或?qū)ο笏哂械墓δ?。類給出了屬于該類的全部對象的抽象定義,對象那么是符合這種定義的一個實體。一個對象又稱類的一個實例。Class & ObjectTeacher 姓名 性別 課程 教課; 研究; 說話; 屬性數(shù)據(jù)行為方法實例化CppTeacher 姓名:Linda 性別: F 課程:CPP 教課; 研究; 說話; Class & Object抽象Student char name10 int age char sex int no float grade void study( ); int
21、 play(char*); .問題:輸入圓的半徑,求圓的周長和面積 數(shù)據(jù)描述:半徑,周長,面積均用實型數(shù)表示數(shù)據(jù)處理:輸入半徑 r;計算周長 = 2*r ;計算面積 = pi * r2 ;輸出周長,面積;結(jié)構(gòu)化編程的方法 一個簡單的C+程序 用面向?qū)ο蠓椒ň幊?分析“圓是抽象的類類型建立具體的圓對象半徑?圓的周長 ?圓的面積 ? 實例化問題:輸入圓的半徑,求圓的周長和面積 用面向?qū)ο蠓椒ň幊?,求圓的周長和面積 分析圓類 數(shù)據(jù)成員 半徑 成員函數(shù) 置半徑值 求圓的半徑 求周長 求面積實例化面向?qū)ο?vs 面向過程設計 面向過程面向?qū)ο蟪绦驁?zhí)行步驟通常按順序執(zhí)行在對象內(nèi)執(zhí)行獨立其他對象數(shù)據(jù)項變量;
22、獨立;位于程序中屬性;屬于一個對象;隨對象而變,具有某種行為激活方式調(diào)用函數(shù)發(fā)消息給對象數(shù)據(jù)與函數(shù)保持分離結(jié)合成對象事件發(fā)生函數(shù)執(zhí)行時方法執(zhí)行時活動涉及函數(shù)和參數(shù)對象,消息和參數(shù) 1. 抽象(abstraction) 抽象的過程是將有關事物的共性歸納、 集中的過程。 抽象的作用是表示同一類事物的本質(zhì)。 C+中的數(shù)據(jù)類型就是對一批具體的數(shù) 的抽象。 對象是具體存在的,可以將其抽象為一 種類型。 類是對象的抽象,而對象那么是 類的特例,或者說是類的具體表現(xiàn)形式。2. 封裝(encapsulate)把全部屬性和全部行為封裝在一起,形成一個不可分割的獨立單位即對象。 信息隱蔽(information
23、hiding) 對象的外部不能直接地存取對象屬性,只能通過幾個允許外部使用的效勞與對象發(fā)生聯(lián)系。對象間通過發(fā)送消息進行交互.接受消息的對象發(fā)送消息的對象 發(fā)送消息效勞器 客戶3. 繼承 (inheritance)軟件重用(software reusability) 采用繼承的方法可以很方便地利用一個已有的類建立一個新的類。 類與類之間可以組成繼承層次 一個類的定義派生類可以定義在另一個已定義類基類 的根底上。派生類可以繼承基類中的屬性和操作,也可以定義自己的屬性和操作。4. 多態(tài)性(polymorphism) 由繼承而產(chǎn)生的相關的不同的類,其對象 對同一消息會作出不同的響應。 對象的多態(tài)性是指在一般類中定義的屬性 或操作被特殊類繼承之后,可以具有不同 的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得 同一個屬性或操作名在一般類及其各個特 殊類中具有不同的語義。多態(tài)性增加程序的靈活性。 自學內(nèi)容:根本輸入輸出方法常量const的定義與使用帶默認參數(shù)的函數(shù)的聲明與調(diào)用重載函數(shù)的定義與調(diào)用內(nèi)聯(lián)函數(shù)的使用程序設計題目上機實驗課后作業(yè) 課后試驗1. 實驗目的 目的: 快速掌握C+語言編程的方法,在小范圍內(nèi)增強C+的功能, 標準編程,復習常用調(diào)式技巧 主要內(nèi)容有:1輸入流、輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肇慶學院《管理會計模擬實驗》2023-2024學年第一學期期末試卷
- 企業(yè)員工績效質(zhì)量個人貢獻度評價體系
- 保險行業(yè)投資分析模板
- 20XX年度績效總結(jié)模板
- 房地產(chǎn)經(jīng)紀操作實務-2019年房地產(chǎn)經(jīng)紀人協(xié)理《房地產(chǎn)經(jīng)紀操作實務》真題匯編
- 人資行政崗位述職報告模板
- 有關保護環(huán)境的調(diào)查報告
- 二零二五版帶利息支付的商業(yè)匯票貼現(xiàn)合同樣本3篇
- 陜西省西安市部分學校2024-2025學年高一上學期第四次階段性檢測化學試卷(含答案)
- 二零二五年度高速公路鋼筋材料供應協(xié)議3篇
- 2023年海南省公務員錄用考試《行測》真題卷及答案解析
- 橋梁監(jiān)測監(jiān)控實施方案
- 消防控制室值班人員崗位職責-五項制度
- 鋼結(jié)構(gòu)安裝施工培訓
- 2024至2030年中國抗菌藥數(shù)據(jù)監(jiān)測研究報告
- 藝術(shù)哲學:美是如何誕生的學習通超星期末考試答案章節(jié)答案2024年
- 太平洋保險在線測評題
- 珠寶玉石居間合同范本
- 青少年人工智能編程水平測試二級-模擬真題01含答案
- 仁愛英語八年級下冊Unit-5-Topic-2單元測試
- DZ∕T 0291-2015 飾面石材礦產(chǎn)地質(zhì)勘查規(guī)范
評論
0/150
提交評論