已閱讀5頁(yè),還剩85頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο蟪绦蛟O(shè)計(jì),楊衛(wèi)東 左崢嶸華中科技大學(xué) 自動(dòng)化學(xué)院,2017秋,教學(xué)安排,任課教師楊衛(wèi)東 副教授Email: ,QQ14223185逸夫科技樓北1003O)左崢嶸 副教授Email: 逸夫科技樓北1003O)學(xué)時(shí):32,學(xué)分:2上課時(shí)間、地點(diǎn)周五,早34節(jié),2-4,6,8-19周C12-S202,前言,IT 技術(shù)為基礎(chǔ)的信息產(chǎn)業(yè)正深入到人類(lèi)社會(huì)生活的方方面面,無(wú)論是生產(chǎn)制造、商業(yè)、國(guó)防和科技等領(lǐng)域、還是第三產(chǎn)業(yè)計(jì)算機(jī)軟件現(xiàn)已成為擔(dān)當(dāng)重任的核心力量,互聯(lián)網(wǎng)和軟件已成為推動(dòng)新經(jīng)濟(jì)發(fā)展的重要基礎(chǔ)。AI、云計(jì)算,工業(yè)監(jiān)測(cè):組態(tài)軟件,可視化圖像信息處理平臺(tái),嵌入式應(yīng)用軟件,導(dǎo)航儀,云狗,數(shù)據(jù)自動(dòng)更新,AI應(yīng)用: 自動(dòng)圖像標(biāo)注,檢測(cè)字詞:女人、人群、貓、相機(jī)、舉著、紫色生成句子:一臺(tái)紫色相機(jī)和一個(gè)女人。一個(gè)女人在人群中舉著一臺(tái)相機(jī)一個(gè)女人抱著一只貓,前言,軟件 程序程序設(shè)計(jì)與實(shí)現(xiàn)語(yǔ)言:匯編、basic、fortran、pascal、C、C+、 Java、C#、Python、PHP、VB,課程目標(biāo),講述面向?qū)ο蟪绦蛟O(shè)計(jì)方法和思想,培養(yǎng)面向?qū)ο蠓治鲈O(shè)計(jì)的思維習(xí)慣系統(tǒng)介紹C+的主要語(yǔ)言特征,使學(xué)生掌握C+語(yǔ)言的語(yǔ)法體系,使學(xué)生具有閱讀、分析和獨(dú)立編寫(xiě)C+程序的能力培養(yǎng)快速學(xué)習(xí)編程語(yǔ)言的能力,教學(xué)安排,考核方式平時(shí)成績(jī)(20%)作業(yè)考勤考試(80%),教材和主要參考書(shū),面向?qū)ο蟪绦蛟O(shè)計(jì),劉正林編,華中科技大學(xué)出版社 C+面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第3版),陳維興、林小茶編著,清華大學(xué)出版社深入淺出MFC ,侯俊杰,華中科技大學(xué)出版社 C+大學(xué)教程(第二版),電子工業(yè)出版社,資料網(wǎng)站,VC知識(shí)庫(kù):/index.php/code,CNNCVC知識(shí)庫(kù)5周年精華珍藏版A/B盤(pán).ISO程序員聯(lián)合開(kāi)發(fā)網(wǎng):/,/,/GitHubMcGraw-C.程序調(diào)試實(shí)用手冊(cè).XiDong.Net.pdfC+面向?qū)ο蟪绦蛟O(shè)計(jì)教程習(xí)題解答與上機(jī)指導(dǎo)Baidu云盤(pán):鏈接:/s/1sl4XIo9 密碼:sw82qq群:555037771,baidu云盤(pán),案例,VC6VS2010 + OpenCV,第1章 面向?qū)ο蟪绦蛟O(shè)計(jì)概述,程序設(shè)計(jì)語(yǔ)言的發(fā)展過(guò)程面向過(guò)程程序設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蚣夹g(shù)的基本特征C/C+程序特點(diǎn)C+編程規(guī)范,程序設(shè)計(jì)語(yǔ)言的發(fā)展過(guò)程,面向?qū)ο蟪绦蛟O(shè)計(jì)OOP(Object -Oriented Programming)是計(jì)算機(jī)軟件開(kāi)發(fā)方法的一場(chǎng)革命?!皩?duì)象” 的概念可追溯到20世紀(jì)50年代初, 1980年Grady Booch提出了面向?qū)ο笤O(shè)計(jì)的概念。高級(jí)語(yǔ)言出現(xiàn)使得編寫(xiě)復(fù)雜的程序變得容易,可更好地對(duì)付日益增加的復(fù)雜性。但是,如果軟件系統(tǒng)達(dá)到一定規(guī)模,即使應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)方法,局勢(shì)仍將變得不可控制。作為一種降低復(fù)雜性的工具,面向?qū)ο蟪绦蛟O(shè)計(jì)思想和面向?qū)ο笳Z(yǔ)言產(chǎn)生了,并得到迅速的發(fā)展和應(yīng)用低級(jí)語(yǔ)言:機(jī)器語(yǔ)言與匯編語(yǔ)言高級(jí)編程語(yǔ)言及工具Basic, QBasic, Visual BasicPASCALC, Visual C+JavaC#Python,程序設(shè)計(jì)語(yǔ)言的發(fā)展過(guò)程,Basic,解釋型QBasic,MS-DOS,編譯型Visual Basic,Windows,對(duì)象屬性,是可視化的、面向?qū)ο蠛筒捎檬录?qū)動(dòng)方式的結(jié)構(gòu)化高級(jí)程序設(shè)計(jì)語(yǔ)言,程序設(shè)計(jì)語(yǔ)言的發(fā)展過(guò)程,C+是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的第一個(gè)大眾化版本,是當(dāng)前學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的首選語(yǔ)言,為了兼容C,其設(shè)計(jì)較復(fù)雜Java具有完全面向?qū)ο筇攸c(diǎn)_TestCodesch10_對(duì)話框test1a,Debug,Win32,編程語(yǔ)言對(duì)比,編程語(yǔ)言排行榜,IEEE,2017.7,程序設(shè)計(jì)方法的演變,兩種程序設(shè)計(jì)模式對(duì)問(wèn)題定義的差別傳統(tǒng)的方法(面向過(guò)程)和面向?qū)ο蟮姆椒▊鹘y(tǒng)方法:把系統(tǒng)看成一個(gè)過(guò)程的集合體,過(guò)程與數(shù)據(jù)實(shí)體交互,過(guò)程接受輸入而產(chǎn)生輸出面向?qū)ο蠓椒ǎ菏前严到y(tǒng)看成一個(gè)相互作用的對(duì)象集,而這些對(duì)象是有行為的(方法)。對(duì)象與人和其他對(duì)象交互發(fā)送和響應(yīng)消息,面向過(guò)程的程序設(shè)計(jì),過(guò)去所學(xué)的各種程序設(shè)計(jì)語(yǔ)言(包括C語(yǔ)言)都是面向功能的(Function Oriented),稱(chēng)為傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言首先要求編程者詳細(xì)了解所研究對(duì)象的具體細(xì)節(jié),包括它的功能、外觀、內(nèi)部結(jié)構(gòu)、各種狀態(tài)和基本原理等然后再考慮在程序中如何用數(shù)據(jù)來(lái)描述它還要花費(fèi)很大精力研究出一些算法,設(shè)計(jì)出一些函數(shù)來(lái)操作這些數(shù)據(jù),改變它的狀態(tài),并實(shí)現(xiàn)各種功能面向功能的程序定律為:程序 =(算法)+(數(shù)據(jù)結(jié)構(gòu)),面向過(guò)程的程序設(shè)計(jì),面向過(guò)程結(jié)構(gòu)化程序設(shè)計(jì)思想:利用過(guò)程或函數(shù)來(lái)抽象和模擬客觀現(xiàn)實(shí)設(shè)計(jì)強(qiáng)調(diào):自頂向下、逐步求精模塊化語(yǔ)句結(jié)構(gòu)化算法(過(guò)程)與數(shù)據(jù),面向過(guò)程的程序設(shè)計(jì),自頂向下、逐步求精是將編寫(xiě)程序看成是一個(gè)逐步演化的過(guò)程,步步深入,逐層細(xì)分,戶(hù)籍管理系統(tǒng),戶(hù)籍遷入遷出,人員遷入遷出,戶(hù)籍注銷(xiāo),人員注銷(xiāo),錄入信息,查詢(xún)信息,修改信息,返回信息,面向過(guò)程的程序設(shè)計(jì),模塊化是將整個(gè)系統(tǒng)分解成若干個(gè)模塊,每個(gè)模塊實(shí)現(xiàn)特定的的功能,最終系統(tǒng)由這些模塊組裝而成,人員遷入遷出,錄入信息,查詢(xún)信息,修改信息,返回信息,面向過(guò)程的程序設(shè)計(jì),語(yǔ)句結(jié)構(gòu)化有順序、選擇、循環(huán)三種結(jié)構(gòu),A,B,S,A,B,S,A,Y,N,Y,N,面向過(guò)程的程序設(shè)計(jì),結(jié)構(gòu)化程序設(shè)計(jì)方法所謂“算法”是一個(gè)有限條指令的集合,這些指令確定了解決某一特定類(lèi)型問(wèn)題的運(yùn)算序列,它是一個(gè)獨(dú)立的整體數(shù)據(jù)結(jié)構(gòu)(包括數(shù)據(jù)類(lèi)型和數(shù)據(jù))也是一個(gè)整體兩者分開(kāi)設(shè)計(jì),重點(diǎn)放在如何實(shí)現(xiàn)細(xì)節(jié)過(guò)程方面,以算法(函數(shù)或過(guò)程)為主形式:主模塊+若干個(gè)子模塊(如:main()+子函數(shù)),面向過(guò)程的程序設(shè)計(jì),結(jié)構(gòu)化程序的案例通信錄程序struct Person char name10; char addr20; char phone11;Person p100;int n=0;void InputData() .void SearchAddr(char *name)void SearchPhone(char *name)void PrintData()Void main()/調(diào)用前面編寫(xiě)的函數(shù),完成通信錄數(shù)據(jù)處理,定義數(shù)據(jù)結(jié)構(gòu),定義全局?jǐn)?shù)據(jù),定義操作數(shù)據(jù)的函數(shù),主函數(shù)控制程序流程,面向過(guò)程的程序設(shè)計(jì),結(jié)構(gòu)化程序的問(wèn)題數(shù)據(jù)和算法分離程序數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)是分離的,全局變量,只有函數(shù)才能訪問(wèn),只有函數(shù)才能訪問(wèn),可被任何函數(shù)訪問(wèn),全局變量,面向過(guò)程的程序設(shè)計(jì),結(jié)構(gòu)化程序設(shè)計(jì)范列及特點(diǎn)大型程序中,有很多全局?jǐn)?shù)據(jù)和全局函數(shù),這導(dǎo)致了函數(shù)和數(shù)據(jù)之間數(shù)目巨大的潛在連接!若全局?jǐn)?shù)據(jù)有所改動(dòng),可能會(huì)導(dǎo)致所有訪問(wèn)這個(gè)數(shù)據(jù)若的全部函數(shù)的重寫(xiě),面向過(guò)程的程序設(shè)計(jì),結(jié)構(gòu)化程序設(shè)計(jì)方法的局限性開(kāi)發(fā)軟件的生產(chǎn)效率低,是手工作坊式的編程難以應(yīng)付日益龐大的信息量和多樣的信息類(lèi)型難以適應(yīng)各種新環(huán)境隨著實(shí)踐經(jīng)驗(yàn)的不斷積累,軟件工程師越來(lái)越注重把數(shù)據(jù)結(jié)構(gòu)與算法看作一個(gè)獨(dú)立功能模塊面向?qū)ο蟪绦蛟O(shè)計(jì)方法的產(chǎn)生,面向?qū)ο蟮某绦蛟O(shè)計(jì),對(duì)程序進(jìn)行重新定義: 程序 = (算法 + 數(shù)據(jù)結(jié)構(gòu))算法與數(shù)據(jù)結(jié)構(gòu)是一個(gè)不可分割的整體,因?yàn)椋核惴偸请x不開(kāi)數(shù)據(jù)結(jié)構(gòu),算法是用來(lái)訪問(wèn)數(shù)據(jù)結(jié)構(gòu)的,所以算法只能適用于特定的數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)時(shí),最好使算法與數(shù)據(jù)結(jié)構(gòu)構(gòu)成一對(duì)一1:1)的關(guān)系若數(shù)據(jù)結(jié)構(gòu)改變了,必須重新設(shè)計(jì)算法,面向?qū)ο蟮某绦蛟O(shè)計(jì),程序代碼的可重用性軟件升級(jí)、可維護(hù)性,算法2,數(shù)據(jù)結(jié)構(gòu)3,數(shù)據(jù)結(jié)構(gòu)1,數(shù)據(jù)結(jié)構(gòu)2,數(shù)據(jù)結(jié)構(gòu)4,數(shù)據(jù)結(jié)構(gòu),算法1,算法2,只能與一個(gè)對(duì)應(yīng),同一種操作的不同 算法實(shí)現(xiàn)是多余的,算法與數(shù)據(jù)結(jié)構(gòu)應(yīng)為1:1關(guān)系,面向?qū)ο蟮幕靖拍?對(duì)象(Object)是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心概念“對(duì)象”的概念并不神秘,它來(lái)源于生活。在現(xiàn)實(shí)生活中,其實(shí)我們每時(shí)每刻都在和對(duì)象打交道。例如,一本書(shū)、一臺(tái)電腦、一部電話機(jī),戴的手表、騎的自行車(chē)等,在面向?qū)ο蟪绦騿T的眼中無(wú)一例外都看成“對(duì)象”。如果把問(wèn)題抽象一下,會(huì)發(fā)現(xiàn)現(xiàn)實(shí)生活中的這些對(duì)象具有兩個(gè)共同特點(diǎn),第一,它們都有自己的狀態(tài)。例如,一部電話有機(jī)型、大小、顏色等。第二它們都具有自己的行為。例如,電話有通話、撥打、掛起等行為。,面向?qū)ο蟮幕靖拍?封裝性和數(shù)據(jù)隱藏往往只關(guān)注起使用,無(wú)需了解具體實(shí)現(xiàn)方式無(wú)需知道封裝單元是如何工作的就能使用的思想稱(chēng)為“數(shù)據(jù)隱藏”,也具有保護(hù)的作用例如:電話、聲卡,面向?qū)ο蟮幕靖拍?面向?qū)ο蟪绦蛟O(shè)計(jì)中,抽象是最基本的原則思想之一抽象是對(duì)現(xiàn)實(shí)世界中的實(shí)體進(jìn)行簡(jiǎn)化的描述,使它模型化,即抓住編程者所關(guān)心的重要信息,而忽略掉一些不重要的細(xì)節(jié)部分,這是克服軟件復(fù)雜性,將現(xiàn)實(shí)世界的模型在計(jì)算機(jī)中自然地表示出來(lái)的最好辦法因此,人們將對(duì)象的狀態(tài)用數(shù)據(jù)來(lái)表示,稱(chēng)為對(duì)象的屬性(attribute /Properties),而對(duì)象的行為用對(duì)象中的程序代碼來(lái)實(shí)現(xiàn),稱(chēng)為對(duì)象的方法(method),并將這數(shù)據(jù)和程序代碼封裝在一個(gè)實(shí)體內(nèi),面向?qū)ο蟮幕靖拍?struct Complex double real; (C語(yǔ)言中的結(jié)構(gòu)體) double imag; class Complex 程序?qū)嶓wprivate : double real , imag;public : void Set(double r , double i) real = r; imag = i; .;,面向?qū)ο蟮幕靖拍?void main( ) Complex a , b;/a,b是Complex類(lèi)的實(shí)例變量,即該類(lèi)的對(duì)象 a. Set(4.0 , 6.0);/用成員函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)消息發(fā)送 b.Set(8.0 , 12.0);/用一條消息可發(fā)向多個(gè)對(duì)象 .因此,對(duì)象類(lèi)是一個(gè)“狀態(tài)”和“操作”的封裝體?!盃顟B(tài)”是由對(duì)象的數(shù)據(jù)結(jié)構(gòu)的內(nèi)容及其值定義的,方法是一系列的實(shí)現(xiàn)步驟,它由若干個(gè)“操作”組成的。例如,一個(gè)人有很多信息,姓名、年齡、身高、體重、文化程度、身份證號(hào)碼等,但最重要的信息是姓名和身份證號(hào)碼。這是人的重要屬性,面向?qū)ο蟪绦蛟O(shè)計(jì),面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想在程序空間內(nèi),對(duì)客觀世界中的實(shí)體,利用數(shù)據(jù)抽象的方法進(jìn)行描述,即將一種數(shù)據(jù)結(jié)構(gòu)和操作該數(shù)據(jù)結(jié)構(gòu)的方法捆在一起,封裝在一個(gè)程序?qū)嶓w內(nèi),從而實(shí)現(xiàn)了“數(shù)據(jù)隱藏”和“封裝性”把數(shù)據(jù)結(jié)構(gòu)隱藏在操作的后面,通過(guò)“操作”作為接口界面實(shí)現(xiàn)與外部的交流(消息傳遞)對(duì)外部來(lái)講,只知道“是做什么的”,而不知道“是如何做的”,面向?qū)ο蟮某绦蛟O(shè)計(jì),面向?qū)ο蟮某绦蛟O(shè)計(jì)思想OOP(Object-Oriented Programming)自然界是由各種各樣的實(shí)體(對(duì)象)所組成,每種對(duì)象都有自己的內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律,不同對(duì)象之間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系統(tǒng),進(jìn)而構(gòu)成整個(gè)客觀世界表達(dá)為:程序=對(duì)象+消息程序設(shè)計(jì)方法使用面向?qū)ο蟮挠^點(diǎn)來(lái)描述模仿并處理現(xiàn)實(shí)問(wèn)題要求:高度概括、分類(lèi)和抽象目的:實(shí)現(xiàn)軟件設(shè)計(jì)的產(chǎn)業(yè)化,面向?qū)ο蟮某绦蛟O(shè)計(jì),基本概念對(duì)象:客觀存在的實(shí)體稱(chēng)為對(duì)象屬性:描述對(duì)象的特征的數(shù)據(jù)行為:對(duì)象自身的行為,對(duì)現(xiàn)實(shí)世界某些信息的響應(yīng)對(duì)象之間通過(guò)傳遞消息相互影響,屬性,行為,對(duì)象由屬性和行為構(gòu)成,面向?qū)ο蟮某绦蛟O(shè)計(jì),通信錄程序在C+中的類(lèi)代碼形式struct Person private:char name10;char addr20;char phone11;public:void InitData() void SearchAddr(char *name);void SearchPhone(char *name);,在+中,struct的功能被擴(kuò)展了,在struct中不僅可以定義數(shù)據(jù),還可以定義函數(shù)。數(shù)據(jù)與函數(shù)構(gòu)成了一個(gè)整體。其中的private和public是訪問(wèn)權(quán)限。,面向?qū)ο蟮某绦蛟O(shè)計(jì),面向?qū)ο蟪绦蛟O(shè)計(jì)范列及特點(diǎn)將客觀事物的屬性和行為抽象成數(shù)據(jù)和操作數(shù)據(jù)的函數(shù),并把它們組合成一個(gè)不可分割的整體(即對(duì)象)的方法能夠?qū)崿F(xiàn)對(duì)客觀世界的真實(shí)模擬,反映出世界的本來(lái)面目。從客觀世界中抽象出一個(gè)個(gè)對(duì)象,對(duì)象之間能夠傳遞消息,面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的特征,面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言:應(yīng)支持對(duì)象、類(lèi)和繼承(Inheritance)等要素類(lèi)和對(duì)象:由于客觀世界是復(fù)雜的,人們常根據(jù)不同的目的將客觀事物加以區(qū)別,按照事物的狀態(tài)和特性(屬性)、行為或用途進(jìn)行分門(mén)別類(lèi),這就是歸納分類(lèi),簡(jiǎn)稱(chēng)“歸類(lèi)”Class在程序空間內(nèi),這種歸類(lèi)的結(jié)果便是逐步抽象的過(guò)程,最終可抽象出具有相同屬性和行為的某一類(lèi)對(duì)象。就可以編寫(xiě)此類(lèi)(Class)的代碼,實(shí)現(xiàn)抽象數(shù)據(jù)類(lèi)型(ADT,Abstract Data type)客觀世界是由各種對(duì)象(Object)組成,任何事物都是對(duì)象,對(duì)象是某個(gè)類(lèi)(Class)的實(shí)例(instance),舉例對(duì)象和類(lèi),例如,對(duì)于各種各樣的飛機(jī),今天看見(jiàn)一架波音747,它是一個(gè)對(duì)象,明天又看到一架圖154,它也是一個(gè)對(duì)象,如此等等。如果將這一類(lèi)對(duì)象抽取它們的共同特性,便可構(gòu)造一個(gè)類(lèi)”Airplane”(飛機(jī))。描述飛機(jī)的所有共有特性:凡是飛機(jī)都能在空中飛行,具有改變飛行方向,控制飛行高度和速度的操作。飛機(jī)都具有機(jī)名、機(jī)型、飛行速度、高度、方向等數(shù)據(jù),用來(lái)描述飛機(jī)的結(jié)構(gòu)特性和狀態(tài)等。而每架具體的飛機(jī)自然可作為這種類(lèi)”Airplane”的一個(gè)實(shí)例。所以該類(lèi)的抽象數(shù)據(jù)類(lèi)型ADT為:飛機(jī)的屬性飛機(jī)的操作(方法) 機(jī)名 改變飛行高度 機(jī)型 改變飛行方向 飛行高度 改變飛行速度 飛行方向 飛行速度,矩陣CMatrix ?,什么是類(lèi)類(lèi)是面向?qū)ο蟪绦蛟O(shè)計(jì)封裝的基本單元,它被當(dāng)作一個(gè)樣板,用來(lái)生產(chǎn)該類(lèi)的所有對(duì)象,就象將“類(lèi)”比如成“餅干模具”,用來(lái)生產(chǎn)“餅干”之類(lèi)的“對(duì)象”一樣一個(gè)類(lèi)的所有對(duì)象都具有相同的數(shù)據(jù)結(jié)構(gòu),并且共享實(shí)現(xiàn)操作的程序代碼。這就是說(shuō),在創(chuàng)建一個(gè)新對(duì)象時(shí),該對(duì)象具有“類(lèi)”定義中所描述的相同數(shù)據(jù)結(jié)構(gòu)和操作它們的方法所對(duì)應(yīng)的程序代碼。而不必對(duì)每個(gè)新創(chuàng)建對(duì)象的操作代碼和數(shù)據(jù)結(jié)構(gòu)重新編寫(xiě)一次,從而大大減輕了編程者的勞動(dòng)強(qiáng)度再加上無(wú)數(shù)軟件技術(shù)人員對(duì)OOP語(yǔ)言系統(tǒng)完成了標(biāo)準(zhǔn)類(lèi)庫(kù)的設(shè)計(jì)工作,形成了“應(yīng)用程序框架”(Application Framework)機(jī)制,為面向?qū)ο髴?yīng)用程序設(shè)計(jì)提供了有力的支持。例如Visual C+已為OOP應(yīng)用程序的編程者提供了MFC(Microsoft Foundation Class)標(biāo)準(zhǔn)類(lèi)庫(kù)和ATL(Active Template Library)活動(dòng)模板類(lèi)庫(kù)作為“應(yīng)用程序框架”。已為編程者預(yù)先定義了許多象窗體、按紐、滾動(dòng)條和對(duì)話框等對(duì)象的標(biāo)準(zhǔn)類(lèi)。當(dāng)編程者需要這些類(lèi)的對(duì)象時(shí),例如要?jiǎng)?chuàng)建一個(gè)新的窗體,只需用窗體類(lèi)創(chuàng)建一個(gè)實(shí)例即可,既然現(xiàn)實(shí)世界是由各種對(duì)象組成,任何對(duì)象都具有一定的屬性與操作,也就總能用數(shù)據(jù)結(jié)構(gòu)和算法(操作該數(shù)據(jù)結(jié)構(gòu)的方法)兩者合一地加以描述。這樣前述程序定律就變成:對(duì)象 =(算法 + 數(shù)據(jù)結(jié)構(gòu))程序 =(對(duì)象1 + 對(duì)象2 + .) 即程序就是許多對(duì)象在計(jì)算機(jī)中相繼表現(xiàn)自己,而對(duì)象又是一個(gè)個(gè)程序?qū)嶓w。人們不再靜止地去看待數(shù)據(jù)結(jié)構(gòu)了,而把它看成是一個(gè)程序單位,一個(gè)程序分子或者一個(gè)對(duì)象的象征。它本身又包含有算法和數(shù)據(jù)結(jié)構(gòu),即“對(duì)象”,如圖1.3所示。,數(shù)據(jù)結(jié)構(gòu),算法+數(shù)據(jù)結(jié)構(gòu),算法+數(shù)據(jù)結(jié)構(gòu),算法,對(duì)象,算法+數(shù)據(jù)結(jié)構(gòu),算法+數(shù)據(jù)結(jié)構(gòu),算法+數(shù)據(jù)結(jié)構(gòu),算法+數(shù)據(jù)結(jié)構(gòu),圖1.3 構(gòu)成程序的對(duì)象,OOP采用消息(message)傳遞機(jī)制作為對(duì)象之間相互通信和作用的唯一方式。傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法強(qiáng)調(diào)功能抽象和模塊性,正如圖1.4所示,每個(gè)模塊都是一個(gè)過(guò)程,其輸入與輸出對(duì)應(yīng)著處理過(guò)程前、后的數(shù)據(jù)。因此結(jié)構(gòu)化程序設(shè)計(jì)方法將解題過(guò)程看作一系列的處理過(guò)程。由編程者編寫(xiě)調(diào)用“過(guò)程”的程序,對(duì)于相同的輸入數(shù)據(jù)經(jīng)“過(guò)程”處理后,每次輸出結(jié)果都相同的,編程繁瑣,使用不靈活。,圖1.4 傳統(tǒng)的結(jié)構(gòu)化方法,數(shù)據(jù)1 數(shù)據(jù)2 參數(shù) f2( ) 返回值,過(guò)程2,參數(shù) f1( ) 返回值 數(shù)據(jù)3,數(shù)據(jù)5,過(guò)程1 數(shù)據(jù)4 參數(shù) f3( ) 返回值,過(guò)程3,對(duì)象與傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法中所說(shuō)的數(shù)據(jù)有本質(zhì)區(qū)別,對(duì)象本身具有很強(qiáng)的獨(dú)立性,它不象結(jié)構(gòu)化程序設(shè)計(jì)方法中的數(shù)據(jù)被動(dòng)地等待對(duì)它執(zhí)行某種操作,而是操作處理的主體,必須發(fā)消息(message)請(qǐng)求對(duì)象執(zhí)行它的某個(gè)(算法)操作,正如圖1.5所示,(算法)操作不是獨(dú)立存在的實(shí)體,而是隸屬于對(duì)象的,是對(duì)象的功能體現(xiàn)其中MF1(Method Function,方法函數(shù)),.,MF4是隸屬于對(duì)象的方法函數(shù)。每當(dāng)需要改變對(duì)象的狀態(tài)時(shí),只能向?qū)ο蟀l(fā)送消息來(lái)處理對(duì)象,消息帶來(lái)了執(zhí)行該操作的詳細(xì)信息C+是利用成員函數(shù)調(diào)用來(lái)實(shí)現(xiàn)消息發(fā)送。在成員函數(shù)體內(nèi),處理對(duì)象的數(shù)據(jù)改變其狀態(tài),對(duì)象收到消息后,按消息提供的詳細(xì)信息(包括目標(biāo)對(duì)象、所請(qǐng)求的操作方法和參數(shù))激活本對(duì)象內(nèi)相匹配的操作(成員函數(shù)),并執(zhí)行該操作,返回所需要的結(jié)果,以響應(yīng)這條消息。并且,同一條消息可同時(shí)發(fā)至多個(gè)對(duì)象,并允許這些對(duì)象按照自身的狀態(tài)加以響應(yīng)。因此與過(guò)程調(diào)用不同,同樣的輸入數(shù)據(jù),可能因?qū)ο蟮臓顟B(tài)不同而產(chǎn)生不同的輸出結(jié)果,圖1.5 面向?qū)ο蠓椒?消息2,MF1 MF1,MF4 對(duì)象1 MF2 MF4 對(duì)象2 MF2,MF3 MF3,消息1,繼承,對(duì)象類(lèi)將按照“父類(lèi)”(或稱(chēng)基類(lèi)),“子類(lèi)”(或稱(chēng)派生類(lèi))的關(guān)系構(gòu)成一個(gè)層次結(jié)構(gòu)的系統(tǒng)。稱(chēng)為“類(lèi)層次結(jié)構(gòu)”。在這種“類(lèi)層次結(jié)構(gòu)”中,上層對(duì)象類(lèi)所具有的屬性和方法全部被下層對(duì)象類(lèi)自動(dòng)繼承。因此,越在上層的類(lèi)越具有普遍性和共性,越在下層的類(lèi)越細(xì)化,越具體和專(zhuān)門(mén)化。(1)繼承將客觀世界中一般和特殊的關(guān)系模型化成層次結(jié)構(gòu)。,圖 1.6 “人”的類(lèi)層次結(jié)構(gòu)圖,舉例,例如圖1.6所示,小學(xué)生、中學(xué)生、大學(xué)生和研究生可歸納為“學(xué)生”,教授、講師、助教可歸納為“教師”,學(xué)生、工人、教師、農(nóng)民、.又可進(jìn)一步用“人”加以概括,從而形成了類(lèi)層次結(jié)構(gòu),一個(gè)類(lèi)的上層可以有父類(lèi),下層可以有子類(lèi)。例如:最上層的對(duì)象類(lèi)“人”是“學(xué)生”類(lèi)的基類(lèi)而“學(xué)生”又派生出“小學(xué)生”、“中學(xué)生”、“大學(xué)生”、“研究生”等派生類(lèi)。 在一個(gè)“類(lèi)層次結(jié)構(gòu)”中,每個(gè)類(lèi)只允許一個(gè)基類(lèi)時(shí),類(lèi)的繼承是單繼承,即類(lèi)的層次結(jié)構(gòu)為樹(shù)結(jié)構(gòu)。最上層的“人”為根結(jié)點(diǎn),最下層的“小學(xué)生”、“中學(xué)生”、“大學(xué)生”、.等為葉結(jié)點(diǎn),除根結(jié)點(diǎn)外,每個(gè)類(lèi)都有它的基類(lèi),除了葉結(jié)點(diǎn)外,每個(gè)類(lèi)都有它的派生類(lèi)。一個(gè)派生類(lèi)可以從它的基類(lèi)那里繼承所有的數(shù)據(jù)和操作,并擴(kuò)充自己的特殊數(shù)據(jù)及其操作?;?lèi)抽象出共同的特征,派生類(lèi)表達(dá)差別。當(dāng)允許一個(gè)類(lèi)有多個(gè)基類(lèi)時(shí),類(lèi)的繼承是多重繼承。圖1.6中“研究生”子類(lèi)中,既攻讀學(xué)位又從事教師工作時(shí),就出現(xiàn)了既屬于學(xué)生又屬于教師的情況。ANSI C+ 支持多重繼承,因此功能更強(qiáng),使用更方便。,實(shí)例 :研究生 王 平,圖1.7 類(lèi)的繼承,(2)通過(guò)繼承增強(qiáng)程序代碼的可重用性(reusable),代碼的重用是利用繼承基類(lèi)的屬性和方法來(lái)實(shí)現(xiàn)的。 例如,由于研究生是學(xué)生的派生類(lèi),而學(xué)生又是人的派生類(lèi)。因此,對(duì)于任一位研究生都應(yīng)具有本類(lèi)的屬性:“專(zhuān)業(yè)”和“入學(xué)年月日”,還應(yīng)當(dāng)繼承學(xué)生的屬性:“學(xué)校名稱(chēng)”和“學(xué)號(hào)”,進(jìn)而向上還應(yīng)該繼承人的屬性:“身份證號(hào)碼”和“姓名”。 (3)在創(chuàng)建新的派生類(lèi)時(shí),只要指明新派生類(lèi)是以哪一個(gè)已存在的類(lèi)作為基類(lèi)派生而來(lái),就可自動(dòng)繼承基類(lèi)的全部屬性和方法。即新派生類(lèi)只需定義新增加的屬性和方法,不必再重復(fù)定義基類(lèi)已有的屬性和方法,減少了程序的冗余信息,節(jié)省了存儲(chǔ)空間。如圖1.7所示,在創(chuàng)建新的派生類(lèi)例如學(xué)生時(shí),只要指明新派生類(lèi)是以“人”作為基類(lèi)派生而來(lái),就可自動(dòng)繼承基類(lèi)“人”的全部屬性和方法。即新派生類(lèi)“學(xué)生”不必再重寫(xiě)一遍基類(lèi)“人”中的“身份證號(hào)碼”和“姓名”的程序代碼,只需寫(xiě)出新增加的“學(xué)校名稱(chēng)”和“學(xué)號(hào)”等。同樣只要指明研究生是學(xué)生的派生類(lèi),它自動(dòng)繼承了“身份證號(hào)碼”、“姓名”、 “學(xué)校名稱(chēng)”、“學(xué)號(hào)”等。減少了程序的冗余信息,節(jié)省了存儲(chǔ)空間。,(4)修改和擴(kuò)充程序時(shí)也不必修改原有的程序代碼,只需增加一些新的代碼,因而也無(wú)需知道原有的程序模塊是如何實(shí)現(xiàn)的,從而極大地減少了軟件的維護(hù)工作量,這是實(shí)現(xiàn)軟件重用的重要機(jī)制。 類(lèi)的層次結(jié)構(gòu)和繼承性使得相似的對(duì)象可以共享程序代碼的數(shù)據(jù),不同對(duì)象的共有特性只需定義一次。從而大大減少了程序中的冗余信息。在創(chuàng)建新的派生類(lèi)時(shí),只要聲明新的派生類(lèi)以哪一個(gè)已存在的類(lèi)作為基類(lèi),就可自動(dòng)繼承基類(lèi)的全部特性,即新派生類(lèi)不必再重定義基類(lèi)已有的性質(zhì),減少程序的冗余信息,節(jié)省存儲(chǔ)空間。同時(shí)使得用戶(hù)在編寫(xiě)程序時(shí)不必從零開(kāi)始,可繼承原有程序模塊的功能。修改和擴(kuò)充程序時(shí)也不必修改原有的程序代碼,只需增加一些新的代碼,因而無(wú)須知道原有的程序模塊是怎樣實(shí)現(xiàn)的,從而極大地減少了軟件維護(hù)工作量,這是實(shí)現(xiàn)軟件重用的重要機(jī)制。 在軟件開(kāi)發(fā)過(guò)程中,編程人員一次又一次地重復(fù)編制一些基本模式:分類(lèi),搜索,讀寫(xiě),分配,同步,比較.但這些事情并不是每 次都一模一樣的,有非常多的細(xì)節(jié)需要變化,因此軟件工程師大多情況下是這樣做的,時(shí)時(shí)不斷地在同一主題上,精心雕琢著一個(gè)個(gè)新的變種。,4.面向?qū)ο蠛蛙浖癐 C (Integrated Circuits ) a.軟件 IC 的概念。 在軟件工程中要提高軟件的生產(chǎn)率就應(yīng)當(dāng)走類(lèi)似硬件的道路,應(yīng)該有軟件的“集成電路”(稱(chēng)軟件 I C)。因此,必須尋找一種能夠比較容易地將正確成熟的軟件單元應(yīng)用于新的軟件系統(tǒng)中的技術(shù)。最好有一種集成機(jī)制,將已經(jīng)成熟的軟件單元制成一個(gè)相對(duì)獨(dú)立的實(shí)體,使它們可以不加改動(dòng)或很少改動(dòng)就可以應(yīng)用于新的軟件系統(tǒng)中。只有這樣生產(chǎn)軟件才可望減少重復(fù)勞動(dòng),提高生產(chǎn)率?!败浖?I ” 的概念就是基于這一思想的一種軟件集成機(jī)制?!败浖?I C 是一種可重用模塊。具有如下特征:,(1) 模塊性好,獨(dú)立性強(qiáng),可靠性高。一個(gè)“軟件 I C 是用于構(gòu)造新軟件系統(tǒng)的基本單位,應(yīng)是可以獨(dú)立存在的實(shí)體,它應(yīng)當(dāng)不受或少受外界的影響,以便自由地為各個(gè)不同的軟件系統(tǒng)所用。 (2) 封裝功能,連接簡(jiǎn)單,使用方便,作為集成機(jī)制,“軟件 I C 必須將集成的功能封裝起來(lái),使用者不必搞清楚它的內(nèi)部細(xì)節(jié),便能方便地連接,安全地用于新的軟件,提高了軟件的生產(chǎn)率。(3)內(nèi)部功能的高效實(shí)現(xiàn)和清晰,簡(jiǎn)明的說(shuō)明。軟件 I C 是可重用的,內(nèi) 部代碼實(shí)現(xiàn)的高效與否,直接影響到軟件系統(tǒng)的性能。作為產(chǎn)品交給用戶(hù),它應(yīng)當(dāng)具有類(lèi)似于硬件集成插件的功能及各項(xiàng)指標(biāo)的說(shuō)明,以便使用戶(hù)可以根據(jù)需要選擇合適的“軟件 I C ”。,在面向?qū)ο笳Z(yǔ)言中,對(duì)象類(lèi)充當(dāng)了系統(tǒng)構(gòu)造的單元,支持“軟件 I C ”技術(shù)。這是因?yàn)椋?(1) 類(lèi)是一類(lèi)對(duì)象的統(tǒng)一模板;它具有很強(qiáng)的模塊性。類(lèi)的功能代碼實(shí)現(xiàn)只通過(guò)外部接口與外界聯(lián)系,具有很強(qiáng)的獨(dú)立性,其可靠性表現(xiàn)在一個(gè)類(lèi) 的出錯(cuò)不會(huì)傳播到其它類(lèi)中,一個(gè)系統(tǒng)的類(lèi)如果出錯(cuò)了,可以將其刪除,作為一個(gè)降級(jí)的的系統(tǒng)使用,而不會(huì)使整個(gè)系統(tǒng)癱瘓。 (2) 類(lèi)是對(duì)象一級(jí)的抽象,它將一類(lèi)對(duì)象的數(shù)據(jù)結(jié)構(gòu)的描述和其功能封裝起來(lái),使得外界不必清楚其內(nèi)部實(shí)現(xiàn)細(xì)節(jié),只要從它的說(shuō)明中了解其基本功能,就可以使用它。 (3) 類(lèi)之間的連接有繼承性描述和一組外協(xié)消息,因而清晰,明了。,因此,面向?qū)ο蠓椒▽?shí)際上是當(dāng)前軟件開(kāi)發(fā)中最接近問(wèn)題的一種方法它產(chǎn)生一種與現(xiàn)實(shí)世界具有自然關(guān)系的軟件系統(tǒng),是軟件開(kāi)發(fā)的一場(chǎng)革命。但面向?qū)ο蟮难芯窟€不成熟。我們不能指望在許多領(lǐng)域馬上有類(lèi)似上述“軟件 I C 的產(chǎn)品出售,但在一個(gè)開(kāi)發(fā)小組,或一個(gè)開(kāi)發(fā)項(xiàng)目中自覺(jué)地“按對(duì)象方式思維( thinking like an object )”,采用面向?qū)ο蟮乃枷腴_(kāi)發(fā)和組織軟件系統(tǒng)是很有必要的。,開(kāi)發(fā)工具,1. 應(yīng)用程序框架:是C+產(chǎn)品所提供的一個(gè)開(kāi)發(fā)工具,有了它可以大大減少編寫(xiě)代碼的工作量,它為編程者提供了極好的“拿來(lái)即用”的能力,充分體現(xiàn)了OOP的代碼的可重用性。 OOP是軟件開(kāi)發(fā)領(lǐng)域的一次革命,它把事物分解成一個(gè)個(gè)的模塊,就象是一個(gè)個(gè)集成電路塊,每個(gè)模塊完成一定的功能,只要各個(gè)模塊是現(xiàn)成的,象集成電路塊是一塊塊標(biāo)準(zhǔn)的芯片,我們就可以用它組合成一個(gè)新的應(yīng)用軟件,windows 系統(tǒng)(windows 3.1 + DOS V6.22 , windows 95 ,Windows NT. .)為微機(jī)提供了一個(gè)先進(jìn)的OS,界面漂亮,使用方便, 功能強(qiáng)大。但在Windows 環(huán)境下編寫(xiě)應(yīng)用程序的開(kāi)發(fā)方法與 DOS 的應(yīng)用程序有很大的差別。Windows 是采用OOP 的程序設(shè)計(jì)方法來(lái)設(shè)計(jì)的。只有采用這種方法設(shè)計(jì)才能和Windows 系統(tǒng)保持一致。發(fā)揮Windows 的優(yōu)勢(shì),但它的程序設(shè)計(jì)思想在概念和結(jié)構(gòu)上與DOS的應(yīng)用程序有本質(zhì)的區(qū)別,C+的產(chǎn)品理應(yīng)提 供一種開(kāi)發(fā)工具,以確 保開(kāi)發(fā)的高質(zhì)量和高效率。,OWL,Borland C+采用一種新的應(yīng)用程序機(jī)制,即應(yīng)用程序框架稱(chēng)為對(duì)象窗口庫(kù)(Object Windows Library)簡(jiǎn)稱(chēng)OWL。它在Windows下以圖形方式運(yùn)行,OWL由于對(duì)應(yīng)用程序代碼隱藏了許多底細(xì),消除了許多Windows 應(yīng)用程序開(kāi)發(fā)中的繁瑣工作。從而大大簡(jiǎn)化了Windows 應(yīng)用程序的編寫(xiě)過(guò)程。比如,Windows把窗口作為一標(biāo)準(zhǔn)窗口類(lèi),在自行編寫(xiě) 的應(yīng)用程序中自然要借用它來(lái)描述窗口的行為。雖然OWL提供了極其豐富的標(biāo)準(zhǔn)類(lèi)庫(kù),但它不能把所有的問(wèn)題全部包括在內(nèi),比如在一個(gè)應(yīng)用程序中需要一個(gè)特殊形狀的按鈕,我們就不能直接利用OWL提供的標(biāo)準(zhǔn)類(lèi)。而需要自行定義一個(gè)按鈕類(lèi)的派生類(lèi),在派生類(lèi)中把特殊的需要加進(jìn)去,特別在開(kāi)發(fā)復(fù)雜程序的過(guò)程中。其思路必須使用“框架”的概念,利用OWL可以替編程者開(kāi)發(fā)的應(yīng)用程序創(chuàng)建合適的框架,并附有大量的插座,允許插入指明應(yīng)用程序“做什么”的代碼段。如圖 所示,已有現(xiàn)存的標(biāo)準(zhǔn)模塊,A、B ,類(lèi)似于硬件的標(biāo)準(zhǔn)芯片。OWL應(yīng)用程序框架可提供大量的插座,插座 A 、B指明模塊A、B“做什么 ”,正如同硬件一樣構(gòu)成一個(gè)新的應(yīng)用程序。而編程者不能了解模塊A和B,“怎么做”的具體細(xì)節(jié),也不必掌握太多的框架知識(shí),就能象用現(xiàn)成的集成電路標(biāo)準(zhǔn)芯片組合成一個(gè)新的機(jī)器。 微軟公司Visual C+ 提供的應(yīng)用程序框架是微軟基類(lèi)數(shù)據(jù)庫(kù)Microsoft Foundation Classes. 簡(jiǎn)稱(chēng)MFC,它已成為所有應(yīng)用程序開(kāi)發(fā)的標(biāo)準(zhǔn)。 Symantec C+ 通過(guò)設(shè)置編譯器和鏈接器,既能具有支持MFC的途 徑,又能具有支 持OWL的途徑。 而IBM 公司的Visual Age C+ 的應(yīng)用程序框架目前只能無(wú)可奉告。由于它的性能較差,尚不能成氣候,今后如何只能拭目以待。,2. 執(zhí)行速度。執(zhí)行速度最快 的要數(shù)Symantec C+;其運(yùn)行之快的原因,是它的鏈接器完全是由匯編語(yǔ)言手寫(xiě) 的,這意味著它能優(yōu)化到處理器層。Borland C+在Windows 95 上比 Visual C+要快。但在Windows NT 是它 比Visual C+ 要快。3. 對(duì)Java語(yǔ)言的支持,由于計(jì)算機(jī)聯(lián)網(wǎng)已成大勢(shì)所趨。Java 語(yǔ)言也已成為網(wǎng)絡(luò)上的編程語(yǔ)言。是目前公認(rèn)的Internet 網(wǎng)上的世界語(yǔ)。Sun Micro System 公司推出 。它由C+ 發(fā)展而來(lái)。保留了大部分C+內(nèi)容。它是面向網(wǎng)絡(luò)的語(yǔ)言。其類(lèi)庫(kù)中所提供的網(wǎng)絡(luò)軟件包支持TCP/ IP (Transmission Control Protocol / Intersection Protocol 傳輸控制協(xié)議/ 互聯(lián)協(xié)議)協(xié)議用于Internet 訪問(wèn)。具有語(yǔ)法規(guī)范,完全面向?qū)ο?,與平臺(tái)無(wú)關(guān),支持多線程機(jī)制,健壯靈活等優(yōu)點(diǎn)。是面向網(wǎng)絡(luò)的一種類(lèi)似于C/ C+ 的高級(jí)語(yǔ)言。,Java 語(yǔ)言采用Java虛擬機(jī)的概念,所謂Java 虛擬機(jī)VM (Virtual Machine )是一種想象中的機(jī)器,在實(shí)際的計(jì)算機(jī)上通過(guò)程序模擬來(lái)實(shí)現(xiàn)。如圖 所示Java VM 屏蔽了與具體平臺(tái)相關(guān)的信息,使得Java語(yǔ)言編譯程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行,Java虛擬機(jī)在執(zhí)行字節(jié)碼時(shí),把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行。這種結(jié)構(gòu)模式的中立原則。非常適合Internet 網(wǎng)的多平臺(tái)特性。為了提高執(zhí)行速度 Sun Micro System 公司推出了Java芯片。即用硬件芯片實(shí)現(xiàn)Java 虛擬機(jī)。Java虛擬機(jī)由一組指令集,一組寄存器,一個(gè)堆棧,一個(gè)垃圾(無(wú)用單元)回收堆(Garbage Collected Heap ).一個(gè)方法區(qū)域等五部分組成。它支持大約248個(gè)字節(jié)碼,每個(gè)字節(jié)碼執(zhí)行一種基本的CPU運(yùn)算和操作。Java 指令集相當(dāng)于Java程序的 匯編語(yǔ)言。用Java編寫(xiě) 的小型可視化應(yīng)用軟件為“Applets. Applets 被編譯后,便成為在VM上使用的中間語(yǔ)言??稍谌魏蜟PU,任何操作系統(tǒng)OS 的平臺(tái)上運(yùn) 行。即平臺(tái)無(wú)關(guān)性。特別可在不帶軟盤(pán)/硬盤(pán),內(nèi)存8M 價(jià)格500美元的NC(Network Computer) 上運(yùn)行。,C/C+程序特點(diǎn),標(biāo)識(shí)符關(guān)鍵字預(yù)處理語(yǔ)句函數(shù)輸入輸出注釋符,C/C+程序特點(diǎn),為了理解C+程序的特點(diǎn),先看一個(gè)小的示例程序:/This is a C+ program #include void main( ) double x , y; cout x y ; double z = x + y ; cout x + y = z 等。它的定義和說(shuō)明語(yǔ)句放在iostream.h的頭文件中,必須寫(xiě)上:#include ,3.輸入(Input)/輸出(Output)流操作,C+源程序總少不了I/O的語(yǔ)句,幾乎每個(gè)源程序都要用到,首先作一簡(jiǎn)單介紹。(1)輸入運(yùn)算符和輸出運(yùn)算符右移運(yùn)算符、右移運(yùn)算符和左移運(yùn)算符賦予了新的含義和功能,用來(lái)作為輸入/輸出運(yùn)算符。,C/C+程序特點(diǎn),(2)左移運(yùn)算符“” 輸出運(yùn)算符(插入符 Inserting、putting) 數(shù)據(jù)的流動(dòng) 終點(diǎn) 源點(diǎn)cout(CRT顯示器) 程序中的對(duì)象名;例如在示范程序中: . cout ”Enter two float number:”; double z = x + y; cout ”x + y = ” z x y;希望顯示一下x和y的值,校核鍵盤(pán)輸入的值可加入如下一條語(yǔ)句: cout ”x=” x “ty=” y ” 輸入運(yùn)算符(提取符extracting、getting)數(shù)據(jù)的流動(dòng) 源點(diǎn) 終點(diǎn) cin(鍵盤(pán)) 程序中的變量名(或?qū)ο竺?例如示范程序中: double x , y; cin x;讀取從鍵盤(pán)敲入的數(shù)據(jù),傳遞給程序中的變量x。,a.由于從鍵盤(pán)進(jìn)行輸入操作時(shí),應(yīng)允許用戶(hù)敲錯(cuò),即需要處理輸入操作中的語(yǔ)法錯(cuò)。輸入的數(shù)據(jù)類(lèi)型分為整型、浮點(diǎn)型和字符串等三種。,對(duì)于整型和浮點(diǎn)型的輸入,輸入運(yùn)算符跳過(guò)空白符(它包括空格符space、 換行符、水平制表符等),然后讀取對(duì)應(yīng)于輸入變量類(lèi)型的值。讀輸入的過(guò)程一直進(jìn)行到回車(chē)鍵和一個(gè)不合法部分出現(xiàn)時(shí),輸入處理停止。,#include void main( ) cout i; cout f; cout n The two numbers were i and i;)沒(méi)有接收字符b就結(jié)束,輸入操作在字符b的位置上停止處理。第2次輸入操作(cin f;)遇到的第一個(gè)字符是b,因此輸入操作立即結(jié)束,變量f所得的值為零。錯(cuò)誤的輸入方法:Type a number : 12.23(cr)Type another number : (cr)The two numbers were 12 and 0.23,C/C+程序特點(diǎn),將值12和0.23分別賦給i和f,這是因?yàn)閷?duì)于整型變
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年稅務(wù)籌劃與稅收政策分析模擬題
- 2026年市場(chǎng)營(yíng)銷(xiāo)策略案例分析訓(xùn)練題及答案
- 2026年鋼琴演奏等級(jí)考試模擬題及評(píng)分標(biāo)準(zhǔn)
- 2026年律師實(shí)務(wù)案例分析能力測(cè)試題庫(kù)
- 2026年航空航天技術(shù)及空間探索知識(shí)題
- 2026年財(cái)務(wù)成本控制與預(yù)算管理試題集及解析
- 2026年商業(yè)策劃師招聘測(cè)試題集商業(yè)戰(zhàn)略規(guī)劃與執(zhí)行
- 2026年文學(xué)評(píng)論理論文學(xué)作品分析與評(píng)價(jià)題庫(kù)
- 2026年生物醫(yī)學(xué)工程研究模擬題目集
- 2026年高考語(yǔ)文備考古詩(shī)詞鑒賞與理解題集
- 建筑結(jié)構(gòu)健康監(jiān)測(cè)技術(shù)方案
- 國(guó)家電網(wǎng)有限公司輸變電工程通 用設(shè)計(jì)(330~750kV輸電線路絕緣子金具串通 用設(shè)計(jì)分冊(cè))2024版
- 欠債抵房屋協(xié)議合同
- TSG R0004-2025固定式壓力容器安全技術(shù)監(jiān)察規(guī)程
- 大學(xué)勞動(dòng)教育(第二版)課件 第二章 勞動(dòng)價(jià)值觀與勞動(dòng)素養(yǎng)
- DBJ50T-240-2016 蒸壓加氣混凝土精確砌塊自承重墻體工程應(yīng)用技術(shù)規(guī)程
- 重難點(diǎn)08滑塊-滑板模型專(zhuān)題高一物理題組法突破重難點(diǎn)(原卷版)
- 2024鐵路營(yíng)業(yè)線作業(yè)人員北斗安全預(yù)警防護(hù)系統(tǒng)技術(shù)條件
- 《東北解放區(qū)工業(yè)戲劇研究(1945-1949年)》
- 新版中國(guó)食物成分表
- 外研版七年級(jí)英語(yǔ)上冊(cè)電子版課文-七上外研版英語(yǔ)電子書(shū)
評(píng)論
0/150
提交評(píng)論