C++語言基礎(chǔ)知識全集.ppt_第1頁
C++語言基礎(chǔ)知識全集.ppt_第2頁
C++語言基礎(chǔ)知識全集.ppt_第3頁
C++語言基礎(chǔ)知識全集.ppt_第4頁
C++語言基礎(chǔ)知識全集.ppt_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第1章 C+語言基礎(chǔ),C+是一種以C語言為基礎(chǔ)開發(fā)的高級語言,一般認(rèn)為C是C+的一個(gè)子集或基礎(chǔ)語言,但二者又是完全獨(dú)立的。 C+適合大型程序的開發(fā)與設(shè)計(jì) C則適合于更底層的項(xiàng)目開發(fā),1.1 C+語言概述,1.1.1 標(biāo)準(zhǔn)C+,C+發(fā)明者:Bell實(shí)驗(yàn)室Bjarne Stroustrup博士 C+第一定義:“帶類的C” C+保留了C作為一個(gè)子集 C+從Simula語言引入了類的概念,包括派生類和虛函數(shù);借鑒了Algol語言的運(yùn)算符重載等特性。,1.1.1 標(biāo)準(zhǔn)C+(續(xù)),起初,C+編譯系統(tǒng)只是一個(gè)預(yù)編譯系統(tǒng)。 1988年,出現(xiàn)一個(gè)真正的C+編譯系統(tǒng)。 1998年,ISO/ANSI C+標(biāo)準(zhǔn)正式通

2、過并發(fā)布。 總體上,C+是一種混合語言,是集過程化設(shè)計(jì)、面向?qū)ο?、基于對象和泛型算法等多種技術(shù)于一體的編程語言。 學(xué)習(xí)C+最重要的是集中關(guān)注概念,不要迷失在語言的技術(shù)細(xì)節(jié)中。,1.1.2 C+語言的簡單程序,#include using namespace std; int main( ) int x = 10, y = 20; int z = x+y; cout “sum is ” z endl; return 0; 輸出結(jié)果:sum is 30,1.1.2 C+語言的簡單程序(續(xù)),1 main函數(shù)與程序結(jié)構(gòu) 一個(gè)完整的程序有且只能有一個(gè)main()主函數(shù)或入口函數(shù) 標(biāo)準(zhǔn)C+要求main函

3、數(shù)的聲明類型為int,只要在末尾加上return 0;,1.1.2 C+語言的簡單程序(續(xù)),C+的程序結(jié)構(gòu) 預(yù)處理命令部分 函數(shù)聲明部分 類型定義部分 main函數(shù)定義 其它函數(shù)定義 函數(shù)由函數(shù)體構(gòu)成,一般包括變量定義、輸入、運(yùn)算和輸出等內(nèi)容。,1.1.2 C+語言的簡單程序(續(xù)),2 頭文件包含與名字空間 固定寫法: #include /頭文件包含 using namespace std; /名字空間聲明 可以將一個(gè)名字空間理解成包含若干定義的一個(gè)區(qū)域的名字。 標(biāo)準(zhǔn)C+所有定義都屬于名字空間std。,1.1.2 C+語言的簡單程序(續(xù)),3 注釋 +的“塊注釋”:*和*為分界符號,與中的用

4、法一致。 +的“行注釋”:以/符號開始到一行的結(jié)束。 使用注釋符時(shí)的注意事項(xiàng): 標(biāo)志符/和*,/和/之間不可以分開。 注釋符對“/*”和“*/”不可以嵌套。 注釋符/之后的注釋結(jié)束于本行。 /和/*與*/可以嵌套使用。,1.1.2 C+語言的簡單程序(續(xù)),思考題:下列程序是否正確?,#include using namespace std; int main() /*下面程序?qū)⒃诮K端上輸出/*你好*/的字樣*/ cout “你好!” endl;/*/輸出字符*/ return 0 ;/*/正常返回 ,1.1.2 C+語言的簡單程序(續(xù)),4 輸入輸出對象 使用I/O流必須要包含“iostre

5、am”頭文件?!?include ”告訴C+編譯器,將文件iostream內(nèi)容插到此程序中。 iostream中定義了一組標(biāo)準(zhǔn)類輸入輸出流(I/O stream)類。 流八位的字節(jié)序列。 cout是標(biāo)準(zhǔn)輸出流類的一個(gè)預(yù)定義的對象,代表控制臺輸出設(shè)備(console out)如:顯示器。 cin是cout的反義詞,控制臺輸入,如鍵盤。,1.1.2 C+語言的簡單程序(續(xù)),cin與cout說明 用來取代scanf和printf,更安全、更方便。,1 格式控制符與輸出數(shù)據(jù)的類型不一致 2 scanf()的第二個(gè)參數(shù)應(yīng)是一個(gè)指針參數(shù),以上錯(cuò)誤C編譯器不能檢查出來。,#include void mai

6、n() int i; float f; scanf(“%f”,i); printf(“%d”,f); ,#include using namespace std; void main() int i; float f; cini; coutf; ,1.1.2 C+語言的簡單程序(續(xù)),cin中運(yùn)算符“”在C+中仍保持C中“右移”功能,但用于輸入時(shí)擴(kuò)充了其功能,表示將從標(biāo)準(zhǔn)輸入流(鍵盤)讀取的數(shù)值傳送給右方指定的變量。 如:cinx; /鍵盤輸入的數(shù)據(jù)自動轉(zhuǎn)換為變量X的類型,并存入變量X內(nèi)。 可以連續(xù)輸,如cinabc;不用顧忌類型。 它按書寫順序從鍵盤上提取所要求的數(shù)據(jù),并存入對應(yīng)的變量中。

7、用cin輸入時(shí),要注意使用間隔符 (空格、回車、Tab鍵)。,1.1.2 C+語言的簡單程序(續(xù)),cout中運(yùn)算符“”在C+中保持C中“左移”功能,表示將右方變量的值寫到標(biāo)準(zhǔn)輸出流cout(即屏幕)中。 “”允許用戶連續(xù)輸出一串?dāng)?shù)據(jù)或表達(dá)式。 可以使用格式控制(與C兼容),默認(rèn)的轉(zhuǎn)換基數(shù)是十進(jìn)制。 如:dec(十進(jìn)制), hex(十六進(jìn)制), oct(八進(jìn)制), endl, t, n等。,1.1.2 C+語言的簡單程序(續(xù)),C中換行用n; C+中換行用endl; 如:coutxendl; coutyn;等價(jià)于printf(“%dn”,x);,#include using namespace

8、 std; void main() int x=25; couthexxdecxoctxn; 輸出結(jié)果:19 25 31,1.1.2 C+語言的簡單程序(續(xù)),5 靈活的局部變量聲明,下面局部變量聲明是否正確?為什么? f ( ) int i; i=10; int j; j=25; / ,1.1.2 C+語言的簡單程序(續(xù)),6 編碼習(xí)慣 盡量保持好的書寫風(fēng)格是必須養(yǎng)成的習(xí)慣。 要注意程序的書寫格式,如縮進(jìn)格式和成對符號的對齊排列等。,1.2 面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,C向C+過渡的實(shí)質(zhì)是由過程化程序設(shè)計(jì)思想向面向?qū)ο蟪绦蛟O(shè)計(jì)的思想的轉(zhuǎn)變。,程序設(shè)計(jì)語言的發(fā)展 硬件發(fā)展軟件危機(jī)結(jié)構(gòu)化程序設(shè)計(jì) 軟

9、件工程面向?qū)ο蠹夹g(shù) 機(jī)器碼低級高級;,1.2.1 過程化的程序設(shè)計(jì),面向過程編程 它是早期的程序設(shè)計(jì)范型,它考察整個(gè)設(shè)計(jì)過程,以功能分解為中心。 面向過程的特征 早期程序設(shè)計(jì)者認(rèn)為: 程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法 這個(gè)公式貫穿于整個(gè)程序設(shè)計(jì)的始終,無論程序是系統(tǒng)程序還是模塊程序。,1.2.1 過程化的程序設(shè)計(jì)(續(xù)),過程化的問題處理思路形成了一套有效的程序設(shè)計(jì)方法,稱為結(jié)構(gòu)化方法。 程序設(shè)計(jì)采用自頂向下,逐步細(xì)分的方法展開。 模塊化 使用三種基本控制結(jié)構(gòu):順序、選擇、循環(huán)。 三種結(jié)構(gòu)的共同點(diǎn):每種結(jié)構(gòu)只有一個(gè)入口和一個(gè)出口。,1.2.1 過程化的程序設(shè)計(jì)(續(xù)),過程化方法應(yīng)用舉例:,int m

10、ain( ) 開始函數(shù)(); 繪制畫面函數(shù)(初始棋局); 重復(fù)下述步驟 走棋函數(shù)(黑子); 如果(判斷輸贏(棋局)已定出輸贏)停止重復(fù); 走棋函數(shù)(白子); 繪制畫面函數(shù)(棋局); 如果(判斷輸贏(棋局)已定出輸贏)停止重復(fù); 輸出結(jié)果函數(shù)(棋局); 結(jié)束函數(shù)(); ,1.2.1 過程化的程序設(shè)計(jì)(續(xù)),面向過程的不足 強(qiáng)調(diào)功能分解,為了實(shí)現(xiàn)功能,有時(shí)數(shù)據(jù)結(jié)構(gòu)屈從于算法,結(jié)果造成數(shù)據(jù)結(jié)構(gòu)和過程的分離。 由于過程化設(shè)計(jì)中的數(shù)據(jù)與過程是相互獨(dú)立的,一個(gè)過程完全可以作用到并不相關(guān)的數(shù)據(jù)上,也不能保證對數(shù)據(jù)操作的合理性,數(shù)據(jù)對于算法完全是被動的。 此種操作是一種“謂語賓語”結(jié)構(gòu)。 對于龐大、復(fù)雜的程序

11、難以開發(fā)和維護(hù),1.2.2 面向?qū)ο蟮某绦蛟O(shè)計(jì),面向?qū)ο缶幊?是一種以對象為中心的程序設(shè)計(jì)范型。也可以說是一套概念和想法,它與面向過程程序設(shè)計(jì)相對應(yīng),是一種用計(jì)算機(jī)程序來描述實(shí)際問題的思路。 面向?qū)ο蟮奶卣?OO(Object-Oriented)程序設(shè)計(jì)者認(rèn)為: 程序 = 對象 + 消息 這個(gè)公式表明面向?qū)ο蟮某绦蛞詫ο鬄槌绦蚪M成單位,以消息為動力(驅(qū)動)。,1.2.2 面向?qū)ο蟮某绦蛟O(shè)計(jì)(續(xù)),面向?qū)ο蠓椒☉?yīng)用舉例:,int main() 定義對象,包括黑棋選手,白棋選手,裁判,組織者; 裁判確定比賽開始(); 組織者繪制畫面(); 重復(fù)下述步驟 黑棋選手.走棋(); 如果(裁判.判斷輸贏(

12、)已定出輸贏)停止重復(fù); 白棋選手.走棋(); 組織者.繪制畫面(); 如果(裁判.判斷輸贏()已定出輸贏)停止重復(fù); 組織者.輸出結(jié)果(); 裁判.確定比賽結(jié)束(); ,1.2.2 面向?qū)ο蟮某绦蛟O(shè)計(jì)(續(xù)),面向?qū)ο蟮暮锰?以對象為單位組織程序,更接近人思維方式,OO借鑒了認(rèn)知論的觀點(diǎn)。 不同對象各司其職,對象自身行為的實(shí)現(xiàn)方式的改變不會影響到其它對象,對象間通過互通消息實(shí)現(xiàn)合作。 從實(shí)現(xiàn)上看,對象的每次操作都是在該對象接收到一定消息后的自主行為(用“對象.函數(shù)名”形式表示),具有“主語謂語”的形式。,1.2.2 面向?qū)ο蟮某绦蛟O(shè)計(jì)(續(xù)),面向?qū)ο蠛兔嫦蜻^程 兩者不是對立的,面向?qū)ο笫敲嫦蜻^

13、程發(fā)展到一定階段的產(chǎn)物,是程序設(shè)計(jì)的高級階段,面向?qū)ο笠悦嫦蜻^程為基礎(chǔ)。 二者的適合情況 對于一些簡單的問題,基于過程的解決方法是十分有效的。 對于大型、復(fù)雜的系統(tǒng),采用面向?qū)ο蟮姆椒ǜ茱@示出優(yōu)勢,有利于利用對象構(gòu)成軟件“積木插件”,進(jìn)而在一定的程度上解決軟件重用的難題。,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn),面向?qū)ο笙到y(tǒng)最突出的特征 封裝性、繼承性、多態(tài)性(三個(gè)特性) 封裝的概念和數(shù)據(jù)抽象(類)密切相關(guān) 現(xiàn)實(shí)中的例子 人們使用錄音機(jī),只要知道鍵的功能即可(放音、錄音、停止、倒帶等),不需要知道這些功能是如何實(shí)現(xiàn)的,也不需要知道其內(nèi)部電路或構(gòu)造。,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),1

14、類與封裝 類的概念 類是一組具有相同屬性和行為特征的對象的抽象描述。 類和對象的關(guān)系 抽象和具體的關(guān)系,類是多個(gè)對象的歸納和總結(jié)(分類的結(jié)果),對象又是類的個(gè)體實(shí)物,一個(gè)對象就是類的一個(gè)實(shí)例。,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),類和對象類型和變量 類和對象實(shí)際上就是C的數(shù)據(jù)類型和變量,只不過在C+中,統(tǒng)稱為類和對象。 對象的狀態(tài) 類沒有具體的值,對象才有,對象的這些具體的值稱為對象的狀態(tài)。,類 對象,實(shí)例化,聲明,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),對象狀態(tài)舉例:,Teacher LiMing; LiMing.age = 30; LiMing.degree = “doctor”;

15、 LiMing.title = “professor”;,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),類的結(jié)構(gòu) 類的結(jié)構(gòu)和對象的組成是嚴(yán)格對應(yīng)的! 類中的成分有兩種:數(shù)據(jù)成員和成員函數(shù)。,類,數(shù)據(jù)成員對應(yīng)對象的屬性,也叫做成員變量。 成員函數(shù)對應(yīng)對象的方法,是類功能的載體。,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),類的結(jié)構(gòu)實(shí)例 數(shù)據(jù)成員 成員函數(shù),class Teacher int age; char* degree; char* title; public: void Study( ); void Teach( ); int TellAge( ); ;,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)

16、),*類和對象的作用周期 類只在源程序的代碼中出現(xiàn),它是編譯器生成對象的說明書,并不會在運(yùn)行的程序中出現(xiàn) ,即類只在編譯時(shí)存在; 對象作為類的實(shí)例是在運(yùn)行的程序中出現(xiàn),并占有內(nèi)存空間,它是程序運(yùn)行時(shí)存在的實(shí)體,是機(jī)器指令操作的內(nèi)容。,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),對象的特性 對象是面向?qū)ο蟪绦蛟O(shè)計(jì)的最重要的細(xì)胞和基石,它有如下的特性: 1 封裝性隱藏內(nèi)部細(xì)節(jié) 2 模塊獨(dú)立性實(shí)體的抽象(類) 3 動態(tài)連接性消息機(jī)制 4 易維護(hù)性更新在邊界內(nèi),1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),對象的交互 現(xiàn)實(shí)世界的對象并非孤立的實(shí)體,它們間存在著聯(lián)系,從而構(gòu)成不同的系統(tǒng)。 面向?qū)ο蟪绦蛟O(shè)計(jì)中,

17、對象之間的聯(lián)系我們稱之為對象的交互。 對象交互的實(shí)現(xiàn) 在OOP中,對象交互的實(shí)現(xiàn)要用到一個(gè)重要的工具:消息。,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),對象交互圖示 消息 對象的交互中介(請求或通知) 消息傳遞 面向?qū)ο蟮某绦蛟O(shè)計(jì)中對象協(xié)作機(jī)制,對象1,對象2,消息,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),消息傳遞與調(diào)用 實(shí)際上,對象的消息傳遞對應(yīng)于程序設(shè)計(jì)中的過程(函數(shù))調(diào)用。 比如:鍵盤對象的按鍵消息傳給顯示對象 消息的發(fā)送和接收 發(fā)送消息的對象為發(fā)送者或請求者,接收消息的目標(biāo)對象為接收者或服務(wù)者(有處理消息的能力)。,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),消息的處理簡單模型 消息的

18、處理就是過程(函數(shù))的執(zhí)行。,某過程 Teacher t; / t.Study(實(shí)參); / return 0; ;,對象t的內(nèi)容, /執(zhí)行代碼 ,Study(參數(shù)),1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),消息的內(nèi)容組成 包含有接收者的名字,請求的方法,一個(gè)或多個(gè)參數(shù)。 消息機(jī)制可以擴(kuò)充的很復(fù)雜 消息的性質(zhì) 1、一消息可以發(fā)給多個(gè)對象 2、一對象可以接受多個(gè)消息 3、對象可以響應(yīng)消息,也可不響應(yīng),1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),2 繼承 類間的承襲關(guān)系 繼承所表達(dá)的是對象類之間的相互關(guān)系,這種關(guān)系讓某類對象可以使用另外一類對象的特征和能力。,父母,孩子,繼承,1.3 面向?qū)ο蟪绦?/p>

19、設(shè)計(jì)的主要特點(diǎn)(續(xù)),繼承類之間的幾個(gè)特性 1 類間具有共享的特征(數(shù)據(jù)和代碼共享) 2 類間具有差別和新增部分(非共享內(nèi)容) 3 類間具有層次結(jié)構(gòu) 假如有類B繼承類A,則類B 的對象具有類A的一切特征, 此時(shí),類A為基類或父類或 超類,類B為派生類或子類,基類,派生類,繼承,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),繼承機(jī)制的優(yōu)點(diǎn) 1 代碼重用,避免重復(fù)開發(fā) 2 增強(qiáng)一致性,統(tǒng)一的處理接口和界面 3 代碼進(jìn)化,高效的擴(kuò)充功能 為程序員提供了一種組織、構(gòu)造和重用類的方法。,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),繼承的分類 從繼承源上分,繼承分為單繼承和多繼承,窗口,對話框,玩具,車,玩具車,單繼承 多繼承,1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特點(diǎn)(續(xù)),繼承的分類 從繼承內(nèi)容上分,繼承分為取代繼承、包含繼承 、受限繼承和特化繼承 1 取代繼承子類覆蓋了父類的內(nèi)容 2 包含繼承子類含有父類(的內(nèi)容) 3 受限繼承子類退化父類的

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論