c++課件,學(xué)計(jì)算機(jī)的必看!_第1頁(yè)
c++課件,學(xué)計(jì)算機(jī)的必看!_第2頁(yè)
c++課件,學(xué)計(jì)算機(jī)的必看!_第3頁(yè)
c++課件,學(xué)計(jì)算機(jī)的必看!_第4頁(yè)
c++課件,學(xué)計(jì)算機(jī)的必看!_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Welcome to C+ world !C+面向?qū)ο蟪绦蛟O(shè)計(jì)軟件學(xué)院軟件工程系任課教師: 田琳琳從C到C+C+起源主要過(guò)渡特性面向?qū)ο笈c面向過(guò)程1.由C到C+的演化1978年,Kernighan & Ritchie ?The C Programming Language ?1990年,C的標(biāo)準(zhǔn)化 優(yōu)點(diǎn) 高效靈活,功能和表達(dá)豐富,可移植性好; 操作系統(tǒng)的開(kāi)發(fā)工具局限 類型檢查機(jī)制較弱 不支持代碼重用面向過(guò)程程序設(shè)計(jì) 設(shè)計(jì)思想 procedural programming 將復(fù)雜過(guò)程簡(jiǎn)單的按功能分層,從而解決問(wèn)題。 標(biāo)準(zhǔn)的過(guò)程化程序過(guò)程的功能劃分與過(guò)程內(nèi)部的編寫(xiě)1.由C到C+的演化inputou

2、tputFunctionfun1fun2fun3fun4fun5fun6fun7main C程序的結(jié)構(gòu)圖面向過(guò)程的C程序1.由C到C+的演化1980年,Bell的Bjarne Stroustrup推出C+。 C+是C的改進(jìn)和擴(kuò)充C+語(yǔ)言包括過(guò)程性語(yǔ)言和類兩局部。 保持了C的簡(jiǎn)潔性和高效性。支持面向?qū)ο蟮某绦蛟O(shè)計(jì) ( OOP, Object Oriented Programming)C+程序由類(class)和函數(shù)(function)組成。C+的歷史Bjarne Stroustrup-C+之父主頁(yè): :/ research.att /bs/ :/經(jīng)典巨作:?The C+ Programming

3、Language?The Design and Evolution of C+? 中文版:?C+程序語(yǔ)言設(shè)計(jì)?C+語(yǔ)言的設(shè)計(jì)和演化?C+程序設(shè)計(jì) 程序控制結(jié)構(gòu)函數(shù)數(shù)組與指針結(jié)構(gòu)面向?qū)ο蟪绦蛟O(shè)計(jì)方法設(shè)計(jì)和實(shí)現(xiàn)C+語(yǔ)言時(shí),既保存了C語(yǔ)言的有效性、靈活性、便于移植等全部精華和特點(diǎn),又添加了面向?qū)ο缶幊痰闹С郑哂袕?qiáng)大的編程功能,編寫(xiě)出的程序具有結(jié)構(gòu)清晰、易于擴(kuò)充等優(yōu)良特性,適合于各種應(yīng)用軟件、系統(tǒng)軟件的程序設(shè)計(jì)。 C+語(yǔ)言由C語(yǔ)言擴(kuò)展而來(lái),同時(shí)它又對(duì)C語(yǔ)言的開(kāi)展產(chǎn)生了一定的影響,ANSI C語(yǔ)言在標(biāo)準(zhǔn)化過(guò)程中吸收了C+語(yǔ)言中某些語(yǔ)言成分。From C to C+ C語(yǔ)言與C+的關(guān)系2. C+對(duì)C語(yǔ)言

4、的擴(kuò)展C+語(yǔ)言對(duì)C語(yǔ)言在結(jié)構(gòu)化方面相應(yīng)的擴(kuò)展: 頭文件與庫(kù)函數(shù)輸入輸出語(yǔ)句關(guān)鍵字常量與變量根本類型函數(shù)按引用傳遞數(shù)據(jù)函數(shù)重載1頭文件與流對(duì)象 #include : 包含的頭文件 using namespace std; : 名字空間 提取運(yùn)算符2. C+對(duì)C語(yǔ)言的擴(kuò)展stdio.h printf() scanf() iostream.h cout 2程序塊中的變量聲明 將幾個(gè)語(yǔ)句用大括號(hào) 組合起來(lái)就構(gòu)成了一個(gè)程序塊。 在C語(yǔ)言中,變量的聲明只允許出現(xiàn)在程序塊的開(kāi)始; 而在C+語(yǔ)言中變量聲明可以出現(xiàn)在任何位置。2. C+對(duì)C語(yǔ)言的擴(kuò)展如下面的程序片斷:for( int i=0; i10; i+)

5、 sum+=i; 2. C+對(duì)C語(yǔ)言的擴(kuò)展3常量 C+語(yǔ)言中增加了常量類型用標(biāo)識(shí)符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+對(duì)C語(yǔ)言的擴(kuò)展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+對(duì)C語(yǔ)言的擴(kuò)展5作用域標(biāo)識(shí)符增加了作用域標(biāo)識(shí)符:名字解析運(yùn)算符,以解決局部變量名與全局變量的同名重復(fù)問(wèn)題。在局部變量的作用域內(nèi)可用作用域標(biāo)識(shí)符:對(duì)被其隱藏的同名全局變量進(jìn)行訪問(wèn)。int x=0;void test(int x)x=5; /此處引用局部變量:x=9;/此處引用全局變量2. C+對(duì)C語(yǔ)言的擴(kuò)展6動(dòng)態(tài)空間申請(qǐng)new 與delete的用法int *p1 = (int *)malloc(sizeof(i

7、nt) * length); free(p1);int *p2 = new int length ;delete p2;/ 釋放數(shù)組用法delete p2; / 釋放單個(gè)元素new Vs malloc1、new 是c+中的操作符, malloc是c 中的一個(gè)函數(shù)2、new 不止是分配內(nèi)存,而且會(huì)調(diào)用類的構(gòu)造函數(shù),同理delete會(huì)調(diào)用類的析構(gòu)函數(shù); 而malloc那么只分配內(nèi)存,不會(huì)進(jìn)行初始化類成員的工作,同樣free也不會(huì)調(diào)用析構(gòu)函數(shù)3、內(nèi)存泄漏Memory leak 2. C+對(duì)C語(yǔ)言的擴(kuò)展C+程序中的函數(shù)函數(shù)的聲明函數(shù)的定義函數(shù)參數(shù)傳遞和返回值 參數(shù)的按值/ 按地址/ 按引用傳遞函數(shù)的調(diào)

8、用 遞歸與迭代內(nèi)聯(lián)函數(shù) 默認(rèn)參數(shù) 函數(shù)重載與函數(shù)模板例如程序 swap.cpp課堂練習(xí) 將swap2.c按要求改成能夠正確運(yùn)行的CPP程序 C+函數(shù)調(diào)用中的數(shù)據(jù)傳遞1。 參數(shù)的按值傳遞 數(shù)按值調(diào)用傳遞時(shí),生成實(shí)際參數(shù)值副本并傳給被調(diào)用 函數(shù)的形式參數(shù)。 副本(行參)的改變并不影響調(diào)用者的原始變量值 (實(shí)參). 函數(shù)內(nèi)對(duì)形參的訪問(wèn)、修改,都在形參的標(biāo)識(shí)對(duì)象進(jìn) 函數(shù)返回時(shí),形參對(duì)象被撤消,不影響實(shí)參的值 防止意外的副作用影響開(kāi)發(fā)正確、可靠的軟件系統(tǒng)。 值傳送的實(shí)參可以是常量、有確定值的變量或表達(dá)式 函數(shù)返回值通過(guò)匿名對(duì)象傳遞/ 例 交換對(duì)象的值# 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 通過(guò)地址傳遞實(shí)參數(shù)據(jù)形參指針對(duì)應(yīng)的實(shí)際參數(shù)是地址表達(dá)式,即對(duì)象的指針;實(shí)際參數(shù)把對(duì)象的地址值賦給形式參數(shù)名標(biāo)識(shí)的指針變量;被調(diào)用函數(shù)通過(guò)形參指針間接訪問(wèn)實(shí)參所指對(duì)象; 2。 參數(shù)

10、的按地址傳遞/ 例 交換對(duì)象的值# 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/ 例 交換對(duì)象的值# 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ù)對(duì)一個(gè)數(shù)據(jù)可以使用“引用(reference)的方式聲明, 引用的作用是為一個(gè)變量起一個(gè)別名 這是C+對(duì)C的一個(gè)

12、重要擴(kuò)充,引用是一種新的變量類型。 一般形式: Type & varible2 = varible1 ;Eg int a ; int &b = a; / 聲明b是int a的引用 b = 20; / a = 20 聲明變量b為引用類型,并不需要另外開(kāi)辟內(nèi)存單元來(lái)存放b的值。 b和a占內(nèi)存中的同一個(gè)存儲(chǔ)單元,它們具有同一地址。20ab使用引用的常見(jiàn)錯(cuò)誤在一條語(yǔ)句中聲明多個(gè)引用時(shí)應(yīng)逐一聲明 int& x=a, y = b,z = c ; /error int &x=a, &y=b, &z=c; 聲明引用變量必須進(jìn)行初始化,引用未定義變量稱懸掛引用。 int x , &y, *p ; / Erroz

13、: y must be initialized 將前面聲明的引用重新變?yōu)榱硪蛔兞康膭e名是個(gè)邏輯錯(cuò)誤. 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í)參的引用形式,擴(kuò)充函數(shù)傳遞數(shù)據(jù)的功能引用參數(shù)即函數(shù)

14、的參數(shù)是按引用傳遞, 引用參數(shù)為調(diào)用函數(shù)中實(shí)參的別名。引用參數(shù)形式 在函數(shù)原型中該參數(shù)類型后面加上&,fuc( int &count) 在函數(shù)調(diào)用中,只指定變量名,該變量通過(guò)引用傳遞。被調(diào)用函數(shù)可直接修改原始變量實(shí)參 在被調(diào)用函數(shù)體中,通過(guò)參數(shù)名指定的變量實(shí)際上就是 引用調(diào)用函數(shù)中的原始變量。3. 按引用傳遞參數(shù)引用傳遞的特點(diǎn)消除了復(fù)制大量數(shù)據(jù)的開(kāi)銷,有利提高執(zhí)行效率;在被調(diào)用函數(shù)中直接使用形參變量,提高可讀性;平安性較差,被調(diào)用函數(shù)能直接訪問(wèn)和修改調(diào)用者的數(shù)據(jù)。 假設(shè)要傳遞較大的對(duì)象,用常量引用參數(shù)模擬按值調(diào)用 要指定引用常量,在參數(shù)聲明的類型說(shuō)明符前面加上const。int change_

15、it ( const int& value);3。參數(shù)的按引用傳遞7引用引用的目的是為了消除指針引用顧名思義就是引用這個(gè)變量引用必須初始化。引用總是指向在初始化時(shí)被指定的對(duì)象,以后不能改變。不存在指向空值的引用。所以在使用引用之前不需要測(cè)試它的合法性。int a;int &b=a;C+對(duì)C語(yǔ)言的擴(kuò)展C+特性:引用 內(nèi)聯(lián)函數(shù)inline C+為降低小程序調(diào)用開(kāi)銷的一種機(jī)制。默認(rèn)參數(shù)值 default parameter value 函數(shù)參數(shù)的默認(rèn)值使得在函數(shù)調(diào)用時(shí)可不指定參數(shù)。重載函數(shù) overloaded function 函數(shù)重載是以同一個(gè)名字命名多個(gè)函數(shù)實(shí)現(xiàn)版本 。8函數(shù)重載C+語(yǔ)言可實(shí)現(xiàn)

16、函數(shù)重載,即多個(gè)函數(shù)在同一作用域可以用相同的函數(shù)名,編譯器在編譯時(shí)可以根據(jù)實(shí)參的類型來(lái)選擇應(yīng)該調(diào)用的函數(shù)。在C+中,對(duì)相同功能但參數(shù)類型不同的函數(shù)可以使用相同的函數(shù)名,在調(diào)用時(shí)無(wú)需記憶多個(gè)函數(shù)名,而由編譯器根據(jù)參數(shù)類型選擇。2. C+對(duì)C語(yǔ)言的擴(kuò)展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+語(yǔ)言中,函數(shù)參數(shù)允許使用缺省值。當(dāng)函數(shù)調(diào)用時(shí),假設(shè)給出的參數(shù)個(gè)數(shù)少于函數(shù)表中參數(shù)的總數(shù)時(shí),那么所缺參數(shù)自動(dòng)取函數(shù)參數(shù)表中設(shè)置的缺省值。 void f(int x, int y=10)。 f(2);/f(2,10)。 函數(shù)可以有多個(gè)缺省參數(shù),但應(yīng)注意只能從右往左缺省,例如: i

18、nt f1(int x, int y=0, int z=0); /正確 int f2(int x, int y=0, int z); /錯(cuò)誤2. C+對(duì)C語(yǔ)言的擴(kuò)展3.面向?qū)ο笏枷敫攀雒嫦驅(qū)ο蟮木幊趟枷肓D使在計(jì)算機(jī)語(yǔ)言中對(duì)事物的的描述與現(xiàn)實(shí)世界中該事物的本來(lái)面目盡可能的一致。 類(class)和對(duì)象(object)是面向?qū)ο蠓椒ǖ暮诵母拍睢?類是對(duì)一類事物描述,是抽象的、概念上的定義; 對(duì)象是實(shí)際存在的該類事物的每個(gè)個(gè)體,也稱實(shí)例(instance)。 面向過(guò)程程序設(shè)計(jì)設(shè)計(jì)思想 procedural programming 將復(fù)雜過(guò)程簡(jiǎn)單的按功能分層,從而解決問(wèn)題。 過(guò)程化編程是面向操作的(

19、action-oriented)結(jié)構(gòu)化: 描述任何實(shí)體的操作的序列只需三種根本控制結(jié)構(gòu)模塊化設(shè)計(jì): 程序設(shè)計(jì)中各個(gè)過(guò)程體和組成局部用模塊表示過(guò)程化設(shè)計(jì)方法: 自頂向下,逐步細(xì)化函數(shù)對(duì)象 = 算法 數(shù)據(jù)結(jié)構(gòu)程序 = (對(duì)象+對(duì)象+對(duì)象+) + 消息 程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu) + 程序設(shè)計(jì)方法 + 語(yǔ)言工具和開(kāi)發(fā)環(huán)境發(fā)送消息面向?qū)ο蟪绦蛟O(shè)計(jì)類 class類封裝了一組數(shù)據(jù)結(jié)構(gòu)和作用于該數(shù)據(jù)結(jié)構(gòu)的一組方法.面向?qū)ο笳Z(yǔ)言必需提供的用戶定義的數(shù)據(jù)類型 把具有相同屬性的事物劃分為一類,它將具有相同狀態(tài)、操作和訪問(wèn)機(jī)制的多個(gè)對(duì)象抽象成為一個(gè)對(duì)象類。面向?qū)ο蟪绦蛟O(shè)計(jì)對(duì)象 object 構(gòu)成世界的一個(gè)獨(dú)立單位

20、,它具有自己的靜態(tài)特征狀態(tài)和動(dòng)態(tài)特征操作。靜態(tài)特征即可以用某種數(shù)據(jù)來(lái)描述的特征動(dòng)態(tài)特征即對(duì)象所表現(xiàn)的行為或?qū)ο笏哂械墓δ?。類給出了屬于該類的全部對(duì)象的抽象定義,對(duì)象那么是符合這種定義的一個(gè)實(shí)體。一個(gè)對(duì)象又稱類的一個(gè)實(shí)例。Class & ObjectTeacher 姓名 性別 課程 教課; 研究; 說(shuō)話; 屬性數(shù)據(jù)行為方法實(shí)例化CppTeacher 姓名:Linda 性別: F 課程:CPP 教課; 研究; 說(shuō)話; Class & Object抽象Student char name10 int age char sex int no float grade void study( ); int

21、 play(char*); .問(wèn)題:輸入圓的半徑,求圓的周長(zhǎng)和面積 數(shù)據(jù)描述:半徑,周長(zhǎng),面積均用實(shí)型數(shù)表示數(shù)據(jù)處理:輸入半徑 r;計(jì)算周長(zhǎng) = 2*r ;計(jì)算面積 = pi * r2 ;輸出周長(zhǎng),面積;結(jié)構(gòu)化編程的方法 一個(gè)簡(jiǎn)單的C+程序 用面向?qū)ο蠓椒ň幊?分析“圓是抽象的類類型建立具體的圓對(duì)象半徑?圓的周長(zhǎng) ?圓的面積 ? 實(shí)例化問(wèn)題:輸入圓的半徑,求圓的周長(zhǎng)和面積 用面向?qū)ο蠓椒ň幊?,求圓的周長(zhǎng)和面積 分析圓類 數(shù)據(jù)成員 半徑 成員函數(shù) 置半徑值 求圓的半徑 求周長(zhǎng) 求面積實(shí)例化面向?qū)ο?vs 面向過(guò)程設(shè)計(jì) 面向過(guò)程面向?qū)ο蟪绦驁?zhí)行步驟通常按順序執(zhí)行在對(duì)象內(nèi)執(zhí)行獨(dú)立其他對(duì)象數(shù)據(jù)項(xiàng)變量;

22、獨(dú)立;位于程序中屬性;屬于一個(gè)對(duì)象;隨對(duì)象而變,具有某種行為激活方式調(diào)用函數(shù)發(fā)消息給對(duì)象數(shù)據(jù)與函數(shù)保持分離結(jié)合成對(duì)象事件發(fā)生函數(shù)執(zhí)行時(shí)方法執(zhí)行時(shí)活動(dòng)涉及函數(shù)和參數(shù)對(duì)象,消息和參數(shù) 1. 抽象(abstraction) 抽象的過(guò)程是將有關(guān)事物的共性歸納、 集中的過(guò)程。 抽象的作用是表示同一類事物的本質(zhì)。 C+中的數(shù)據(jù)類型就是對(duì)一批具體的數(shù) 的抽象。 對(duì)象是具體存在的,可以將其抽象為一 種類型。 類是對(duì)象的抽象,而對(duì)象那么是 類的特例,或者說(shuō)是類的具體表現(xiàn)形式。2. 封裝(encapsulate)把全部屬性和全部行為封裝在一起,形成一個(gè)不可分割的獨(dú)立單位即對(duì)象。 信息隱蔽(information

23、hiding) 對(duì)象的外部不能直接地存取對(duì)象屬性,只能通過(guò)幾個(gè)允許外部使用的效勞與對(duì)象發(fā)生聯(lián)系。對(duì)象間通過(guò)發(fā)送消息進(jìn)行交互.接受消息的對(duì)象發(fā)送消息的對(duì)象 發(fā)送消息效勞器 客戶3. 繼承 (inheritance)軟件重用(software reusability) 采用繼承的方法可以很方便地利用一個(gè)已有的類建立一個(gè)新的類。 類與類之間可以組成繼承層次 一個(gè)類的定義派生類可以定義在另一個(gè)已定義類基類 的根底上。派生類可以繼承基類中的屬性和操作,也可以定義自己的屬性和操作。4. 多態(tài)性(polymorphism) 由繼承而產(chǎn)生的相關(guān)的不同的類,其對(duì)象 對(duì)同一消息會(huì)作出不同的響應(yīng)。 對(duì)象的多態(tài)性是指在一般類中定義的屬性 或操作被特殊類繼承之后,可以具有不同 的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得 同一個(gè)屬性或操作名在一般類及其各個(gè)特 殊類中具有不同的語(yǔ)義。多態(tài)性增加程序的靈活性。 自學(xué)內(nèi)容:根本輸入輸出方法常量const的定義與使用帶默認(rèn)參數(shù)的函數(shù)的聲明與調(diào)用重載函數(shù)的定義與調(diào)用內(nèi)聯(lián)函數(shù)的使用程序設(shè)計(jì)題目上機(jī)實(shí)驗(yàn)課后作業(yè) 課后試驗(yàn)1. 實(shí)驗(yàn)?zāi)康?目的: 快速掌握C+語(yǔ)言編程的方法,在小范圍內(nèi)增強(qiáng)C+的功能, 標(biāo)準(zhǔn)編程,復(fù)習(xí)常用調(diào)式技巧 主要內(nèi)容有:1輸入流、輸

溫馨提示

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

評(píng)論

0/150

提交評(píng)論