第1章 面向?qū)ο蟪绦蛟O(shè)計(jì)概述_第1頁
第1章 面向?qū)ο蟪绦蛟O(shè)計(jì)概述_第2頁
第1章 面向?qū)ο蟪绦蛟O(shè)計(jì)概述_第3頁
第1章 面向?qū)ο蟪绦蛟O(shè)計(jì)概述_第4頁
第1章 面向?qū)ο蟪绦蛟O(shè)計(jì)概述_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C++面向?qū)ο蟪绦蛟O(shè)計(jì)2024/2/261信息工程學(xué)院C++面向?qū)ο蟪绦蛟O(shè)計(jì)學(xué)分:4學(xué)時(shí):48+20任課教師:商書元2024/2/262信息工程學(xué)院學(xué)習(xí)體會(huì)學(xué)習(xí)C++編程技術(shù),必須了解和掌握C++制訂的各種規(guī)則,然后應(yīng)用這些規(guī)則寫程序,也就容易了。這與學(xué)習(xí)開車,首先要學(xué)習(xí)交通規(guī)則,然后才能驅(qū)車上路的道理相同。但與Basic和C等語言相比,C++的規(guī)則確實(shí)多出許多,掌握它必須付出努力!然而一旦掌握了這些規(guī)則,對(duì)于學(xué)習(xí)掌握面向?qū)ο缶幊碳夹g(shù),乃至于學(xué)習(xí)JAVA,C#及VB.net之類的編程語言,也就容易多了。千里之行,始于足下!2024/2/263信息工程學(xué)院參考書《C++程序設(shè)計(jì)教程》

--清華大學(xué)出版社,錢能《C++程序設(shè)計(jì)語》

--機(jī)械工業(yè)版社,Bjarne

Stroustrup

著,裘宗燕譯《VC++與面向?qū)ο蟪绦蛟O(shè)計(jì)教程》—高等教育出版社,劉路放《VC++面向?qū)ο笈c可視化程序設(shè)計(jì)》--清華大學(xué)出版社,黃維通《深度探索C++對(duì)象模型》--華中科技大學(xué)出版社,StanleyB.Lippman

著,侯俊杰譯《深入淺出MFC》華中科技大學(xué)出版社,侯俊杰2024/2/264信息工程學(xué)院第1章面向?qū)ο蟪绦蛟O(shè)計(jì)概述本章主要講述:計(jì)算機(jī)程序語言的發(fā)展演變過程面各對(duì)象程序技術(shù)的基本特征面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)C++程序的結(jié)構(gòu)及數(shù)據(jù)輸入與輸入VC++實(shí)例編程2024/2/265信息工程學(xué)院1.1 計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展

本節(jié)主要介紹計(jì)算機(jī)語言的發(fā)展過程:機(jī)器語言→匯編語言→高級(jí)語言→面向?qū)ο蟪绦蛟O(shè)計(jì)語言著重了解面向過程(即結(jié)構(gòu)化程序)和面向?qū)ο蟪绦蛟O(shè)計(jì)在程序結(jié)構(gòu)、程序思想上的差別。2024/2/266信息工程學(xué)院1.1.1機(jī)器語言

指令就是指計(jì)算機(jī)能夠識(shí)別的命令,它們是一些由0和1組合成的二進(jìn)制編碼。指令系統(tǒng)計(jì)算機(jī)硬件系統(tǒng)能夠識(shí)別的所有指令的集合。機(jī)器語言最早的程序設(shè)計(jì)語言,它由計(jì)算機(jī)能夠識(shí)別的二進(jìn)制指令系統(tǒng)構(gòu)成。2024/2/267信息工程學(xué)院1.1.2匯編語言

1、匯編語言用一些便于記憶的符號(hào)代替機(jī)器語言中的二進(jìn)制指令代碼,就將二進(jìn)制的機(jī)器語言轉(zhuǎn)換成了一種便于記憶的符號(hào)語言,這就是匯編語言。2、與機(jī)器語言的比較匯編語言編程比機(jī)器語言簡單。同機(jī)器語言一樣,它仍然是與機(jī)器相關(guān)的。不同機(jī)器系統(tǒng)的匯編語言并不相同,要在不同硬件系統(tǒng)(其指令系統(tǒng)不同)的計(jì)算機(jī)上完成相同的任務(wù),需要編寫不同的匯編程序。

2024/2/268信息工程學(xué)院1.1.3高級(jí)語言

1.高級(jí)語言的概念及特征高級(jí)語言屏蔽了與機(jī)器硬件相關(guān)的細(xì)節(jié),采用具有一定含義的命名符號(hào)和容易理解的程序語句進(jìn)行程序設(shè)計(jì),不僅大大降低了程序設(shè)計(jì)的難度,而且也使程序易被人們理解。

高級(jí)語言程序的通用性和可移植性更高與人們自然思維很接近,編程更容易、簡單2024/2/269信息工程學(xué)院1.1.3高級(jí)語言

2、結(jié)構(gòu)化程序設(shè)計(jì)的基本內(nèi)容結(jié)構(gòu)的類型順利、分支、循環(huán)結(jié)構(gòu)化程序設(shè)計(jì)思想利用過程或函數(shù)來抽象和模擬客觀現(xiàn)實(shí)。2024/2/2610信息工程學(xué)院1.1.3高級(jí)語言

2、結(jié)構(gòu)化程序設(shè)計(jì)方法重點(diǎn)放在如何實(shí)現(xiàn)細(xì)節(jié)過程方面,將數(shù)據(jù)與函數(shù)分開。形式:主模塊+若干個(gè)子模塊

(如C:main()+子函數(shù))。特點(diǎn):

自頂向下,逐步求精——功能分解。缺點(diǎn):效率低,是手工作坊式的編程。2024/2/2611信息工程學(xué)院1.1.3高級(jí)語言全局變量局部變量函數(shù)A局部變量函數(shù)B只有函數(shù)A才能訪問只有函數(shù)B才能訪問可被任何函數(shù)訪問全局變量3、結(jié)構(gòu)化程序的問題——數(shù)據(jù)也算法分離,程序數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)是分離的。2024/2/2612信息工程學(xué)院1.1.3高級(jí)語言structPerson{

charname[10]; charaddr[20]; charphone[11];}Personp[100]; intn=0;

voidInputData(){......} voidSearchAddr(char*name){……} voidSearchPhone(char*name){……} voidPrintData(){……}Voidmain(){ …… //調(diào)用前面編寫的函數(shù),完成通信錄數(shù)據(jù)處理 ……} 4、結(jié)構(gòu)化程序的案例——個(gè)人通信錄程序定義數(shù)據(jù)結(jié)構(gòu)定義全局?jǐn)?shù)據(jù)定義操作數(shù)據(jù)的函數(shù)主函數(shù)控制程序流程2024/2/2613信息工程學(xué)院1.1.3高級(jí)語言大型程序中,有很多全局?jǐn)?shù)據(jù)和全局函數(shù),這導(dǎo)致了函數(shù)和數(shù)據(jù)之間數(shù)目巨大的潛在連接!若全局?jǐn)?shù)據(jù)有所改動(dòng),可能會(huì)導(dǎo)致所有訪問這個(gè)數(shù)據(jù)若的全部函數(shù)的重寫.全局?jǐn)?shù)據(jù)全局?jǐn)?shù)據(jù)全局?jǐn)?shù)據(jù)函數(shù)函數(shù)函數(shù)函數(shù)5、結(jié)構(gòu)化程序設(shè)計(jì)范型2024/2/2614信息工程學(xué)院1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言1、面向?qū)ο蟪绦蛟O(shè)計(jì)觀點(diǎn)自然界是由各種各樣的實(shí)體(對(duì)象)所組成,每種對(duì)象都有自己的內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律,不同對(duì)象之間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系統(tǒng),進(jìn)而構(gòu)成整個(gè)客觀世界.2、程序設(shè)計(jì)方法:使用面向?qū)ο蟮挠^點(diǎn)來描述模仿并處理現(xiàn)實(shí)問題。要求:高度概括、分類和抽象。3、目的:實(shí)現(xiàn)軟件設(shè)計(jì)的產(chǎn)業(yè)化。2024/2/2615信息工程學(xué)院1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言4、基本概念對(duì)象客觀存在的實(shí)體稱為對(duì)象屬性描述對(duì)象的特征的數(shù)據(jù)行為對(duì)象自身的行為,對(duì)現(xiàn)實(shí)世界某些信息的應(yīng).對(duì)象之間通過傳遞消息相互影響屬性行為對(duì)象由屬性和行為構(gòu)成2024/2/2616信息工程學(xué)院1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言structPerson{ private:charname[10];charaddr[20];charphone[11];public:voidInitData(){……}voidSearchAddr(char*name){……}; voidSearchPhone(char*name){……}; };5、通信錄程序在C++中的類代碼形式在++中,struct的功能被擴(kuò)展了,在struct中不僅可以定義數(shù)據(jù),還可以定義函數(shù)。數(shù)據(jù)與函數(shù)構(gòu)成了一個(gè)整體。其中的private和public是訪問權(quán)限。2024/2/2617信息工程學(xué)院1.1 計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展將客觀事物的屬性和行為抽象成數(shù)據(jù)和操作數(shù)據(jù)的函數(shù),并把它們組合成一個(gè)不可分割的整體(即對(duì)象)的方法能夠?qū)崿F(xiàn)對(duì)客觀世界的真實(shí)模擬,反映出世界的本來面目。從客觀世界中抽象出一個(gè)個(gè)對(duì)象,對(duì)象之間能夠傳遞消息

.?dāng)?shù)據(jù)成員函數(shù)成員函數(shù)數(shù)據(jù)成員函數(shù)成員函數(shù)數(shù)據(jù)成員函數(shù)成員函數(shù)對(duì)象1對(duì)象2對(duì)象3消息消息消息6、面向?qū)ο蠓缎?024/2/2618信息工程學(xué)院1.2面向?qū)ο蟪绦蛘Z言的特征本節(jié)主要介紹類與對(duì)象的基本概念,以及面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特征

2024/2/2619信息工程學(xué)院1.2.1類與對(duì)象1.對(duì)象的基本概念對(duì)象:用來描述客觀事物的一個(gè)實(shí)體,它是構(gòu)成系統(tǒng)的一個(gè)基本單元。一個(gè)對(duì)象具有一組屬性和行。實(shí)體對(duì)象

一臺(tái)計(jì)算機(jī)抽象對(duì)象

一項(xiàng)計(jì)劃對(duì)象構(gòu)成要素:1.對(duì)象標(biāo)識(shí)符:是對(duì)象的名稱,用來區(qū)別與其他對(duì)象。2.屬性:是用來描述對(duì)象靜態(tài)特征的一個(gè)數(shù)據(jù)項(xiàng)。3.行為:是用來描述對(duì)象動(dòng)態(tài)特征和行為的一個(gè)操作。

2024/2/2620信息工程學(xué)院對(duì)象示例1:一個(gè)“學(xué)生”對(duì)象的例子對(duì)象名:學(xué)生對(duì)象的屬性:學(xué)號(hào):123456姓名:令狐沖年齡:18專業(yè):信管行為修改學(xué)號(hào)、姓名、專業(yè)、年齡等等1.2.1類與對(duì)象2024/2/2621信息工程學(xué)院對(duì)象示例2:一個(gè)“課程”對(duì)象的例子:對(duì)象名:課程對(duì)象的屬性:課程號(hào):123456課程名:程序設(shè)計(jì)任課教師:莫名選課要求:學(xué)時(shí):48行為獲取并修改課程名、課程號(hào)、學(xué)時(shí)數(shù)、選課要求、任課教師等1.2.1類與對(duì)象2024/2/2622信息工程學(xué)院2.類的基本概念類:是具有相同屬性和行為的一組對(duì)象的集合,它為屬于該類的全部對(duì)象提供統(tǒng)一的的抽象描述類和對(duì)象的關(guān)系:類

對(duì)象 抽象定義實(shí)例類對(duì)象舉例學(xué)生

學(xué)生王強(qiáng)課程

C++程序設(shè)計(jì)類型

變量,如

C語言中的int

和intx;類的實(shí)例——用類定義的類變量,即對(duì)象。類是對(duì)多個(gè)特性相同的對(duì)象實(shí)例的抽象,所以同一類的不同實(shí)例之間必有:相同的操作集合相同的屬性集合不同的對(duì)象名,分配有不同的存儲(chǔ)空間。1.2.1類與對(duì)象2024/2/2623信息工程學(xué)院3、類的確定與劃分類的確定——對(duì)所遇到的對(duì)象進(jìn)行分析、歸納,根據(jù)共同的特征來確定一個(gè)類。類的確定的方法:判斷是否有一個(gè)以上的實(shí)例判斷類的實(shí)例中是否有絕對(duì)的不同點(diǎn)類的劃分不是絕對(duì)的,可以根據(jù)不同的實(shí)際需要確定不同的類1.2.1類與對(duì)象2024/2/2624信息工程學(xué)院1.2.1類與對(duì)象4、類的描述類的描述——不同的OOP語言用不同的描述形式。在C++中用關(guān)鍵字class來定義描述一個(gè)類。classclassname{ public: //publicmembers //friendfunctionprototypes private: //privatemembers};2024/2/2625信息工程學(xué)院1.2.2抽象與封裝1、封裝性封裝encapsulation——將數(shù)據(jù)和與這個(gè)數(shù)據(jù)有關(guān)的操作集合在一起,形成一個(gè)實(shí)體——對(duì)象,且盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié).特點(diǎn):具有一個(gè)清楚的邊界,對(duì)象的所有私有數(shù)據(jù)、內(nèi)部程序(成員函數(shù))細(xì)節(jié)都被固定在這個(gè)邊界內(nèi)。具有一個(gè)接口,描述了對(duì)象之間的相互作用、請(qǐng)求和響應(yīng)——消息對(duì)象內(nèi)部的實(shí)現(xiàn)代碼受到封裝殼的保護(hù),其它對(duì)象不能直接修改本對(duì)象所擁有的數(shù)據(jù)和代碼。封裝的單位是對(duì)象。2024/2/2626信息工程學(xué)院1.2.2抽象與封裝1、抽象抽象(abstract)是指有意忽略問題的某些細(xì)節(jié)和與當(dāng)前目標(biāo)無關(guān)的方面,以便把問題的本質(zhì)表達(dá)得更清楚。

案例:VCD機(jī)器的抽象2024/2/2627信息工程學(xué)院2、封裝性從外面看只能看到對(duì)象的外部特性,即能夠受理哪些信息,具有哪些處理能力;對(duì)象的內(nèi)部,即處理能力的實(shí)行和內(nèi)部狀態(tài),對(duì)外是不可見的。從外面不能直接使用對(duì)象的處理能力,也不能直接修改其內(nèi)部狀態(tài),對(duì)象的內(nèi)部狀態(tài)只能由其自身改變。封裝的優(yōu)點(diǎn):1.降低部件間的耦合度,提高部件的獨(dú)立性2.具有隱藏性和安全性(如銀行的帳戶)3.易于維護(hù)(由于數(shù)據(jù)獨(dú)立,易于發(fā)現(xiàn)問題)4.封裝將對(duì)象的使用者與設(shè)計(jì)者分開,使用者只需要通過接口訪問對(duì)象,不必須了解對(duì)象的內(nèi)部細(xì)節(jié).提高了軟件復(fù)用.封裝的缺點(diǎn):需要更多的輸入輸出函數(shù)。1.2.2抽象與封裝2024/2/2628信息工程學(xué)院3、封裝的形式classclassname{ public:

//publicmembers //friendfunction private:

//privatemembers};Public成員1Public成員2Public成員nPrivate一個(gè)Class定義了一種抽象的數(shù)據(jù)類型,用戶只能訪問Public成員,不能直接訪問Private成員直接訪問private是禁止的邊界2024/2/2629信息工程學(xué)院1.2.2抽象與封裝4、抽象與封裝形成了程序接口與實(shí)現(xiàn)的分離2024/2/2630信息工程學(xué)院1、繼承的基本概念古語:龍生龍,鳳生鳳,老鼠生兒會(huì)打洞繼承:對(duì)象類之間的相交關(guān)系,使得某類對(duì)象可以繼承另外一類對(duì)象的特征和功能類間具有繼承關(guān)系的特性:類間具有共享特征(包括數(shù)據(jù)和程序代碼的共享):遺傳類間具有細(xì)微差別或新增部分(包括非共享的程序代碼和數(shù)據(jù)):變異類間具有層次結(jié)構(gòu)(如同人類通過繼承構(gòu)成了家簇關(guān)系一樣)1.2.3繼承2024/2/2631信息工程學(xué)院2、繼承分類從繼承源上劃分:單繼承(一個(gè)派生類只有一個(gè)基類)、多繼承(一個(gè)派生類有多個(gè)基類)從繼承內(nèi)容上劃分:取代繼承、包含繼承、受限繼承、特化繼承。3、繼承的作用:實(shí)現(xiàn)軟件的可重用性實(shí)現(xiàn)軟件的獨(dú)立性增加軟件的可維護(hù)性1.2.3繼承2024/2/2632信息工程學(xué)院4、繼承的層次結(jié)構(gòu)思考:B和C具有哪些成員?ABECD

a:int

getA():int

c:int

getC():int

setB():void

b:int

getB():int

setB():voidinheritance(“is-a”relation)

e:int

getE():intsetB():void

d:intgetD():int1.2.3繼承2024/2/2633信息工程學(xué)院5、繼承與封裝的關(guān)系封裝是指對(duì)象的的封裝,在對(duì)象中數(shù)據(jù)和操作總是包裹在一起的,繼承不會(huì)影響對(duì)象的這種封裝性,但無限制的派生繼承會(huì)在一定程度上損害對(duì)象中數(shù)據(jù)的隱蔽性。封裝使類定義中實(shí)現(xiàn)的代碼可以用于該類的各個(gè)實(shí)例(對(duì)象)中,實(shí)現(xiàn)了動(dòng)態(tài)共享代碼;繼承使用派生類能與基類共享基類中實(shí)現(xiàn)的代碼,實(shí)現(xiàn)了靜態(tài)共享代碼。6、類的層次由一個(gè)類可以派生出任意多個(gè)派生類,這樣就形成了類的層次關(guān)系,這是現(xiàn)實(shí)世界中事物的分類問題在計(jì)算機(jī)中的解形式。1.2.3繼承2024/2/2634信息工程學(xué)院7、繼承的優(yōu)勢(shì)能清晰體現(xiàn)相關(guān)類間的層次結(jié)構(gòu)關(guān)系。有效地址提高了程序的可重用性,減小了程序代碼的冗余度。增強(qiáng)了程序的一致性,減少了程序模塊間的接口和界面,使程序更易維護(hù)。繼承是自動(dòng)傳播程序代碼的有力工具。繼承是新類構(gòu)造、建立和擴(kuò)充的有效手段。繼承具有傳遞性 如果類C繼承類B,類B繼承類A,則類C繼承類A“站在巨人的肩頭上”。用戶在開發(fā)新系統(tǒng)時(shí)不必從零開始,可以繼承原有相似功能或者從類庫中選取需要的類,再派生新類。1.2.3繼承2024/2/2635信息工程學(xué)院例1:車輛的繼承關(guān)系車輛非機(jī)動(dòng)車客車卡車轎車機(jī)動(dòng)車?yán)?:人類按職業(yè)劃分的一種繼承關(guān)系人學(xué)生工人教師農(nóng)民中學(xué)生大學(xué)生研究生講師教授1.2.3繼承8、兩個(gè)繼承的案例2024/2/2636信息工程學(xué)院1、多態(tài)polymorphism對(duì)象根據(jù)所接受的消息而做出動(dòng)作,同樣的消息為不同的對(duì)象接受時(shí)可導(dǎo)致完全不同的行動(dòng),該現(xiàn)象稱為多態(tài)性。簡單的說:單接口,多實(shí)現(xiàn)舉例:

sqrt_i(inti),sqrt_f(floatf)

sqrt(inti),sqrt(floatf)作用:減輕程序員負(fù)擔(dān)降低程序員出錯(cuò)機(jī)率1.2.4

多態(tài)2024/2/2637信息工程學(xué)院2、多態(tài)性的實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性:虛函數(shù)編譯時(shí)多態(tài)性:重載重載函數(shù)重載:是指在同一作用域內(nèi)的若干個(gè)參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字。運(yùn)算符重載:是指同一個(gè)運(yùn)算符可以施加于不同類型的操作數(shù)上面。優(yōu)點(diǎn):重載進(jìn)一步提高了面向?qū)ο笙到y(tǒng)的靈活性和可讀性1.2.4

多態(tài)2024/2/2638信息工程學(xué)院3、多態(tài)的一個(gè)案例圖中同名函數(shù)area()作用在Circle、Triangle等不同類上時(shí),將執(zhí)行不同的操作,這就是多態(tài)。1.2.4

多態(tài)2024/2/2639信息工程學(xué)院1、面向過程程序設(shè)計(jì)的基本特點(diǎn)按層次組織模塊。每一模塊只有一個(gè)入口,一個(gè)出口。代碼和數(shù)據(jù)分離,即程序=數(shù)據(jù)結(jié)構(gòu)+算法。

方法:自頂向下,逐步求精,模塊化1.3 面向?qū)ο笈c面向過程程序設(shè)計(jì)2024/2/2640信息工程學(xué)院2、面向?qū)ο蟪绦蛟O(shè)計(jì)它將數(shù)據(jù)和操作數(shù)據(jù)的過程(函數(shù))綁在一起,形成一個(gè)相互依存、不可分離的整體(即對(duì)象),從同類對(duì)象中抽象出共性,形成類。同類對(duì)象中的數(shù)據(jù)原則上只能用本類提供的方法(成員函數(shù))進(jìn)行處理。類通過封裝將接口與實(shí)現(xiàn)分離開來,通過接口與外界聯(lián)系。對(duì)象之間通過消息進(jìn)行通信。1.3 面向?qū)ο笈c面向過程程序設(shè)計(jì)2024/2/2641信息工程學(xué)院3、兩種程序方法的對(duì)比1.3 面向?qū)ο笈c面向過程程序設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)將數(shù)據(jù)和操作數(shù)據(jù)的程序代碼綁在一起構(gòu)成對(duì)象具有更好的可維護(hù)性,因某類對(duì)象數(shù)據(jù)的改變只會(huì)引起該類對(duì)象操作代碼的改變,而與其他類型的對(duì)象無關(guān),這就把程序代碼的修改維護(hù)局限在一個(gè)很小的范圍內(nèi)。2024/2/2642信息工程學(xué)院1.4 C++與面向?qū)ο蟪绦蛟O(shè)計(jì)1、面向?qū)ο蟪绦蛟O(shè)計(jì)語言的基本情況最早最成熟的領(lǐng)域萌芽于60年代(Simula),成熟于80年代70年代,純面向?qū)ο笳Z言,smalltalk常見面向?qū)ο蟮恼Z言Java:純面向?qū)ο蟮恼Z言VB.Net:可視化程序設(shè)計(jì)早期的VB或許算不上真正的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,不具備面向?qū)ο蟪绦虻囊恍┨卣鳎玍B.NET已經(jīng)改變了這一切!C#:具有VB和VC++的特征C++,ObjectPascal,Efficl其它常用的具有面向?qū)ο筇卣鞯恼Z言BorlandDelphi、PowerBuilder、VisualFoxPro……2024/2/2643信息工程學(xué)院1.4 C++與面向?qū)ο蟪绦蛟O(shè)計(jì)2、C++起源20世紀(jì)80年代,AT&TBell實(shí)驗(yàn)室Bjarne

StroustrupC語言的擴(kuò)展3、C++常用領(lǐng)域系統(tǒng)軟件設(shè)備驅(qū)動(dòng)程序圖形學(xué)用戶界面……2024/2/2644信息工程學(xué)院1.4 C++與面向?qū)ο蟪绦蛟O(shè)計(jì)4、C++特征兼容C語言,支持面向過程的程序設(shè)計(jì)具有高效性、靈活性、可移植性豐富的數(shù)據(jù)類型支持面向?qū)ο蟪绦蛟O(shè)計(jì)5、常見C++編譯系統(tǒng)C++BuilderVC++VC++.net2024/2/2645信息工程學(xué)院1.5C++程序的結(jié)構(gòu)1、C++程序的構(gòu)成聲明部分主函數(shù)部分函數(shù)定義2、C++程序文件頭文件:.h.hpp源文件:.cpp3、程序結(jié)構(gòu)的一個(gè)例程如下2024/2/2646信息工程學(xué)院1.5C++程序的結(jié)構(gòu)3、C++程序的一個(gè)例程聲明部分0 //Eg1-1.cpp1 #include<iostream.h>2 #defineN103 voidsort(int

a[],intn);4 voidprint(int

a[],int);52024/2/2647信息工程學(xué)院1.5C++程序的結(jié)構(gòu)對(duì)例程的補(bǔ)充:C++的注釋///*……*/C++的函數(shù)需要先聲明,然后才能調(diào)用2024/2/2648信息工程學(xué)院1.6數(shù)據(jù)的輸入與輸出本節(jié)主要介紹C++程序中數(shù)據(jù)輸入輸出的方法,是C++程序設(shè)計(jì)的基礎(chǔ)。應(yīng)該掌握流的概念iostream.hcincoutendl講授方法:在VC++集成環(huán)境中演示2024/2/2649信息工程學(xué)院1.6.1流的概念1、C及C++中的流概念I(lǐng)/O(input/ouput,輸入/輸出)數(shù)據(jù)是一些從源設(shè)備到目標(biāo)設(shè)備的字節(jié)序列,稱為字節(jié)流。除了圖像、聲音數(shù)據(jù)外,字節(jié)流通常代表的都是字符,因此在多數(shù)情況下的流(stream)是從源設(shè)備到目標(biāo)設(shè)備的字符序列,A8bctyx1234源設(shè)備目標(biāo)設(shè)備字符序列從源設(shè)備連續(xù)不斷地流向目標(biāo)設(shè)備,最后按先流出先到達(dá)的有序方式匯聚在目標(biāo)設(shè)備中,如同河流一樣,故此叫流。2024/2/2650信息工程學(xué)院1.6.1流的概念輸入流輸入流(inputstream)是指從輸入設(shè)備流向內(nèi)存的字節(jié)序列。輸出流輸出流(outputstream)是指從內(nèi)存流向輸出設(shè)備的字節(jié)序列。C++中的輸入輸入流iostreamcin

輸入流對(duì)象,C++已將其與鍵盤關(guān)聯(lián)cout

輸出流對(duì)象,C++已將其與顯示器關(guān)聯(lián)2024/2/2651信息工程學(xué)院1.6.2cin和析取運(yùn)符1、cin的用途cin讀作(see-in)是一個(gè)輸入流對(duì)象,用于從鍵盤輸入數(shù)據(jù)。在C++程序中,也可以使用c語言中常用的scanf函數(shù)輸入數(shù)據(jù),但cin更簡單。2、cin的用法輸入單個(gè)變量的值cin>>x;輸入多個(gè)變量的值cin>>x1>>x2>>x3>>x4……>>xn

其中x,x1……x2可是以內(nèi)置數(shù)據(jù)類型如int,char,float,double等。2024/2/2652信息工程學(xué)院1.6.2cin和析取運(yùn)符3、用cin時(shí)的注意事項(xiàng)在一條cin語句中同時(shí)為多個(gè)變量輸入數(shù)據(jù)。在輸入數(shù)據(jù)的個(gè)數(shù)應(yīng)當(dāng)與cin語句中變量個(gè)數(shù)相同,各輸入數(shù)據(jù)之間用一個(gè)或多個(gè)空白(包括空格、回車、Tab)作為間隔符,全部數(shù)據(jù)輸入完成后,按Enter鍵結(jié)束。

在>>后面只能出現(xiàn)變量名,下面的語句是錯(cuò)誤的。cin>>"x=">>x; //錯(cuò)誤,>>后面含有字符串"x="cin>>12>>x; //錯(cuò)誤,>>后面含有常數(shù)12cin>>'x'>>x; 2024/2/2653信息工程學(xué)院1.6.2cin和析取運(yùn)符cin具有自動(dòng)識(shí)別數(shù)據(jù)類型的能力,析取運(yùn)算>>將根據(jù)它后面的變量的類型從輸入流中為它們提取對(duì)應(yīng)的數(shù)據(jù)。比如:cin>>x;假設(shè)輸入數(shù)據(jù)2,析取運(yùn)算符>>將根據(jù)其后的x的類型決定輸入的2到底是數(shù)字還是字符。若x是char類型,則2就是字符;若x是int,float之類的類型,則2就是一個(gè)數(shù)字。再如,若輸入34,且x是char類型,則只有字符3被存儲(chǔ)到x中,4將繼續(xù)保存在流中;若x是int或float,則34就會(huì)存儲(chǔ)x中。

2024/2/2654信息工程學(xué)院1.6.2cin和析取運(yùn)符數(shù)值型數(shù)據(jù)的輸入。在讀取數(shù)值型數(shù)據(jù)時(shí),析取運(yùn)算符>>首先略掉數(shù)據(jù)前面的所有空白符號(hào),如果遇到正、負(fù)號(hào)或數(shù)字,就開始讀入,包括浮點(diǎn)型數(shù)據(jù)的小數(shù)點(diǎn),并在遇到空白符或其他非數(shù)字字符時(shí)停止。例如:intx1;doublex2;charx3;cin>>x1>>x2>>x3;假如輸入“35.4A”并按Enter鍵,x1是35;x2是.4;x3是'A'2024/2/2655信息工程學(xué)院1.6.2cin和析取運(yùn)符4、輸入數(shù)據(jù)案例分析【例1-2】假設(shè)有變量定義語句如下:int

a,b;doublez;charch;下面的語句說明數(shù)據(jù)輸入的含義。語句 輸入 內(nèi)存變量的值

1 cin>>ch; A ch='A'2 cin>>ch; AB ch='A',而'B'被保留在輸入流中等待被讀取

3 cin>>a; 32 a=324 cin>>a; 32.23 a=32,.23留在輸入流中等待被讀取

5 cin>>z; 76.21 z=76.216 cin>>z; 65 z=65.07 cin>>a>>ch>>z 23B3.2 a=23,ch='B',Z=3.28 cin>>a>>ch>>z 23B3.2 a=23,ch='B',Z=3.29cin>>a>>b>>z 2332 a=23,b=32,等待輸入下一個(gè)數(shù)據(jù)存入z10 cin>>a>>z 23.224 a=2,z=3.2,24被保留在輸入流中等待被讀取11 cin>>a>>ch 132 a=132,計(jì)算機(jī)等待輸入ch的值12 cin>>ch>>a 132 ch='1',a=322024/2/2656信息工程學(xué)院1.6.3cout和插入運(yùn)算符<<1、cout的用途cout(讀作see-out)是一個(gè)輸出流對(duì)象,已被C++默認(rèn)關(guān)聯(lián)到顯示器,用于在屏幕上輸入數(shù)據(jù)。在C++程序中,也可使用C語言的sprintf輸出數(shù)據(jù),但cout更簡單。2、cout的用法cout<<x其中x可是以內(nèi)置數(shù)據(jù)類型如int,char,float,double等。2024/2/2657信息工程學(xué)院1.6.3cout和插入運(yùn)算符<<輸出字符類型的數(shù)據(jù)對(duì)于字符變量和字符串變量,cout將把變量的值輸出到顯示屏幕上。對(duì)于字符常量和字符串常量,cout將把它們?cè)瓨虞敵鲈谄聊簧稀纠?-3】用cout輸出字符數(shù)據(jù)。//Eg1-3.cpp#include<iostream.h>voidmain(){ charch1='c'; charch2[]="HellowC++!";

cout<<ch1;

cout<<ch2;

cout<<"C";

cout<<"Helloweveryone!";}2024/2/2658信息工程學(xué)院1.6.3cout和插入運(yùn)算符<<2.連續(xù)輸出cout能夠同時(shí)輸出多個(gè)數(shù)據(jù),用法如下:cout<<x1<<x2<<x3<<…;例:cout<<ch1<<ch2<<"C"<<"Helloweveryone!";與C語言一樣,在C++程序中也可以將一條命令寫在多行上。比如,上面的語句也可寫成下面的形式:cout<<ch1 <<ch2 <<"C" <<"Helloweveryone!";2024/2/2659信息工程學(xué)院1.6.3cout和插入運(yùn)算符<<3、輸出換成在cout語句中換行可用:“\n”或endl【例1-4】在例1-3的輸出語句中增加換行符。//Eg1-4.cpp#include<iostream.h>voidmain(){ charch1='c'; charch2[]="HellowC++!";

cout<<ch1<<endl;

cout<<ch2<<"\n";

cout<<"C"<<endl;

cout<<"Helloweveryone!\n"; }2024/2/2660信息工程學(xué)院1.6.3cout和插入運(yùn)算符<<4、輸入數(shù)據(jù)類型數(shù)據(jù)在連續(xù)輸入多個(gè)數(shù)據(jù)時(shí),應(yīng)注意在數(shù)據(jù)之加插入間隔符。如intx1=23;floatx2=34.1;doublex3=67.12;cout<<x1<<x2<<x3<<900;其中的cout語句將在屏幕上輸出,2334.167.12900誰知道這是個(gè)什么數(shù)據(jù)呢?2024/2/2661信息工程學(xué)院1.6.3cout和插入運(yùn)算符<<5、數(shù)制基數(shù)hex:16進(jìn)制,oct:8進(jìn)制,dec:10進(jìn)制【例1-5】輸出不同進(jìn)制的數(shù)據(jù)。//Eg1-5.cpp#include<iostream.h>voidmain(){intx=34;cout<<hex<<17<<""<<x<<""<<18<<endl;cout<<17<<""<<oct<<x<<""<<18<<endl;cout<<dec<<17<<""<<x<<""<<18<<endl;}2024/2/2662信息工程學(xué)院1.6.3cout和插入運(yùn)算符<<6、其它輸出格式控制符設(shè)置浮點(diǎn)數(shù)的精度

setprecision(n)設(shè)置輸出域?qū)捄蛯?duì)齊方式setw(n)

設(shè)置對(duì)齊方式Setiosflags(longf);resetiosflags(longf);2024/2/2663信息工程學(xué)院1.6.3cout和插入運(yùn)算符<<【例1-6】用setiosflags和

resetiosflags設(shè)置

和取消輸出數(shù)據(jù)的對(duì)齊方式。//Eg1-6.cpp#include<iostream.h> #include<iomanip.h> voidmain(){ cout<<“123456781234567812345678”<<endl; cout<<setiosflags(ios::left)<<setw(8) <<456<<setw(8)<<123<<endl; cout<<resetiosflags(ios::left)<<setw(8)<<123<<endl; }2024/2/2664信息工程學(xué)院1.7編程實(shí)作——VC++6.0編程簡介本節(jié)主要以案例方式介紹VC++的編程環(huán)境,及在VC++6.0環(huán)境下設(shè)計(jì)C++程序的過程。請(qǐng)?jiān)趯?shí)際的C++環(huán)境中介紹本節(jié)的內(nèi)容。本章介紹的是一種基于控制臺(tái)的VC++程序設(shè)計(jì)方式,是一種非常簡略的方式2024/2/2665信息工程學(xué)院1.7編程實(shí)作——VC++6.0編程簡介1、關(guān)于C++編譯器支持C++程序設(shè)計(jì)的編譯程序很多,常見的有TurboC++、BorlandC++和VisualC++等。VisualC++是微軟公司的產(chǎn)品,簡稱VC++。VC++6.0是微軟公司1998年推出的基于Windows的集成開發(fā)環(huán)境,它提供了編寫程序源代碼的編輯器,創(chuàng)建各類資源文件(如對(duì)話框、圖標(biāo)、菜單等)的資源編輯器,具有編輯、編譯、鏈接等功能。利用它可以輸入、編輯源程序,進(jìn)行程序的編譯、調(diào)試、鏈接,最后生成可執(zhí)行的命令程序。2024/2/2666信息工程學(xué)院1.7編程實(shí)作——VC++6.0編程簡介2、例題描述【例1-7】某次考試成績?nèi)缦?,編寫程序?jì)算每位同學(xué)的平均分。要求成績從鍵盤輸入,程序輸出結(jié)果的形式與下面相同,但要輸出每位同學(xué)的平均分。

語文數(shù)學(xué)政治化學(xué)英語平均分學(xué)生167 76878976學(xué)生278 87789087……2024/2/2667信息工程學(xué)院1.7編程實(shí)作——VC++6.0編程簡介3、編程過程(1)啟動(dòng)VC++6.0(2)選擇VC++6.0的“文件|新建”命令,進(jìn)入VC++的“新建”對(duì)話框,如圖所示。2024/2/2668信息工程學(xué)院1.7編程實(shí)作——VC++6.0編程簡介(3)選擇“新建|文件”標(biāo)簽,通過“目錄”編輯框指定文件目錄。(4)選中“新建|C++SourceFile”列表項(xiàng),在“文件”編輯框中輸入源程序的名字,擴(kuò)展名為.cpp。單擊“確定”,進(jìn)入VC++的編輯程序界面,如圖所示。2024/2/2669信息工程學(xué)院1.7編程實(shí)作——VC++6.0編程簡介2024/2/2670信息工程學(xué)院1.7編程實(shí)作——VC++6.0編程簡介(5)在程序編輯窗口中輸入程序源代碼//Eg1-7.cpp#include<iostream.h>#include<iomanip.h> //本程序的setw在此頭文件中定義#defineStuNum5 //StuNum代表學(xué)生人數(shù)voidReadData(doubles[][6],intn); //這3行是函數(shù)聲明voidAveScore(doubles[][6],intn);voidOutData(doubles[][6],intn);2024/2/2671信息工程學(xué)院1.7編程實(shí)作——VC++6.0編程簡介voidmain(){ doubles[StuNum][6]; //定義保存學(xué)生成績的數(shù)組

ReadData(s,2); //讀入學(xué)生成績

AveScore(s,2); //計(jì)算各學(xué)生的平均分

OutData(s,2); //輸出學(xué)生成績表}voidReadData(doubles[][6],intn){

for(inti=0;i<n;i++){

cout<<"輸入學(xué)生"<<i+1<<"的5科成績:";//在屏幕上提示

for(intj=0;j<5;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論