版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蟪绦蛟O(shè)計(jì)概述面向?qū)ο蟪绦蛟O(shè)計(jì)概述學(xué)習(xí)體會
學(xué)習(xí)C++編程技術(shù),必須了解和掌握C++制訂的各種規(guī)則,然后應(yīng)用這些規(guī)則寫程序,也就容易了。這與學(xué)習(xí)開車,首先要學(xué)習(xí)交通規(guī)則,然后才能驅(qū)車上路的道理相同。但與Basic和C等語言相比,C++的規(guī)則確實(shí)多出許多,掌握它必須付出努力!然而一旦掌握了這些規(guī)則,對于學(xué)習(xí)掌握面向?qū)ο缶幊碳夹g(shù),乃至于學(xué)習(xí)JAVA,C#及VB.net之類的編程語言,也就容易多了。千里之行,始于足下!學(xué)習(xí)體會學(xué)習(xí)C++編程技術(shù),必須了解和掌握C+第1章面向?qū)ο蟪绦蛟O(shè)計(jì)概述本章主要講述:計(jì)算機(jī)程序語言的發(fā)展演變過程面向?qū)ο蟪绦蚣夹g(shù)的基本特征面向過程與面向?qū)ο蟪绦蛟O(shè)計(jì)C++程序的結(jié)構(gòu)及數(shù)據(jù)輸入與輸出VC++實(shí)例編程第1章面向?qū)ο蟪绦蛟O(shè)計(jì)概述本章主要講述:1.1 計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展
本節(jié)主要介紹計(jì)算機(jī)語言的發(fā)展過程:機(jī)器語言→匯編語言→高級語言→面向?qū)ο蟪绦蛟O(shè)計(jì)語言著重了解面向過程(即結(jié)構(gòu)化程序)和面向?qū)ο蟪绦蛟O(shè)計(jì)在程序結(jié)構(gòu)、程序思想上的差別。1.1 計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展本節(jié)主要介紹計(jì)算機(jī)語言的發(fā)1.1.1
機(jī)器語言機(jī)器語言最早的程序設(shè)計(jì)語言,它由計(jì)算機(jī)能夠識別的二進(jìn)制指令系統(tǒng)構(gòu)成。指令就是指計(jì)算機(jī)能夠識別的命令,它們是一些由0和1組合成的二進(jìn)制編碼。指令系統(tǒng)計(jì)算機(jī)硬件系統(tǒng)能夠識別的所有指令的集合。1.1.1機(jī)器語言機(jī)器語言1.1.2匯編語言
1、匯編語言用一些便于記憶的符號代替機(jī)器語言中的二進(jìn)制指令代碼,就將二進(jìn)制的機(jī)器語言轉(zhuǎn)換成了一種便于記憶的符號語言,這就是匯編語言。2、與機(jī)器語言的比較匯編語言編程比機(jī)器語言簡單。同機(jī)器語言一樣,它仍然是與機(jī)器相關(guān)的。不同機(jī)器系統(tǒng)的匯編語言并不相同,要在不同硬件系統(tǒng)(其指令系統(tǒng)不同)的計(jì)算機(jī)上完成相同的任務(wù),需要編寫不同的匯編程序。移植性不好。
1.1.2匯編語言 1、匯編語言1.1.3高級語言
1.高級語言的概念及特征高級程序設(shè)計(jì)語言的出現(xiàn)是計(jì)算機(jī)科學(xué)技術(shù)發(fā)展史上的一個里程碑。高級語言屏蔽了與機(jī)器硬件相關(guān)的細(xì)節(jié),提高了語言的抽象層次,程序員可以用接近自然語言的程序語言編制軟件,然后通過編譯器轉(zhuǎn)換成機(jī)器可執(zhí)行的代碼(機(jī)器語言)。不僅大大降低了程序設(shè)計(jì)的難度,而且也使程序易被人們理解。
高級語言程序的通用性和可移植性更高與人們自然思維很接近,編程更容易、簡單1.1.3高級語言 1.高級語言的概念及特征高級語言A=A+5機(jī)器語言0101100000101
匯編語言(助記符)如用ADD表示加法、用SUB表示減法高級語言匯編語言機(jī)器語言A=A+5addA,50100100000101加A5人的語言機(jī)器的語言高級語言A=A+5加A1.1.3高級語言
2、結(jié)構(gòu)化程序設(shè)計(jì)SP的基本內(nèi)容結(jié)構(gòu)化程序設(shè)計(jì)語言是一種面向過程的程序設(shè)計(jì)語言結(jié)構(gòu)的類型順序、分支、循環(huán)結(jié)構(gòu)化程序設(shè)計(jì)思想利用過程或函數(shù)來抽象和模擬客觀現(xiàn)實(shí)。1.1.3高級語言 2、結(jié)構(gòu)化程序設(shè)計(jì)SP的基本內(nèi)容1.1.3高級語言
結(jié)構(gòu)化程序設(shè)計(jì)方法重點(diǎn)放在如何實(shí)現(xiàn)細(xì)節(jié)過程方面,將數(shù)據(jù)與函數(shù)(過程)分開。形式:主模塊+若干個子模塊
(如C:main()+子函數(shù))。特點(diǎn):
自頂向下,逐步求精——功能分解。缺點(diǎn):效率低,是手工作坊式的編程。1.1.3高級語言 結(jié)構(gòu)化程序設(shè)計(jì)方法1.1.3高級語言全局變量局部變量函數(shù)A局部變量函數(shù)B只有函數(shù)A才能訪問只有函數(shù)B才能訪問可被任何函數(shù)訪問全局變量結(jié)構(gòu)化程序的問題——數(shù)據(jù)與算法分離,程序數(shù)據(jù)和操作數(shù)據(jù)的過程(函數(shù))是分離的。1.1.3高級語言全局變量局部變量函數(shù)A局部變量函數(shù)B只有函對象示例2:一個“課程”對象的例子:八進(jìn)制整數(shù),在輸入的數(shù)據(jù)前加0,如043(代表十進(jìn)制數(shù)charphone[11];3 面向?qū)ο笈c面向過程程序設(shè)計(jì)2cin和析取運(yùn)算符>>每一模塊只有一個入口,一個出口。每一模塊只有一個入口,一個出口。Studentstud1,stud2;//定義stud1和stud2為Student類的變{private://以下為類中的私有部分A=A+5addA,50100100000101抽象與封裝形成了程序接口與實(shí)現(xiàn)的分離cout<<setw(8)<<"學(xué)生"<<i+1;7編程實(shí)作——VC++6.7編程實(shí)作——VC++6.23留在輸入流中等待被讀取cout<<″score=″<<score<<endl;}//輸出score的值3cout和插入運(yùn)算符<<A=A+5addA,501001000001011、面向過程程序設(shè)計(jì)的基本特點(diǎn)3cout和插入運(yùn)算符<<1.1.3高級語言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ù)處理
……} 結(jié)構(gòu)化程序的案例——個人通信錄程序存放個人信息的數(shù)據(jù)結(jié)構(gòu)定義全局?jǐn)?shù)據(jù)定義操作數(shù)據(jù)的函數(shù)主函數(shù)控制程序流程對象示例2:一個“課程”對象的例子:1.1.3高級語言str1.1.3高級語言由圖可見,大型程序中,函數(shù)和數(shù)據(jù)之間存在數(shù)目巨大的潛在連接關(guān)系.若全局?jǐn)?shù)據(jù)有所改動,可能會導(dǎo)致所有訪問這個數(shù)據(jù)的全部函數(shù)的重寫.結(jié)構(gòu)化程序語言將客觀世界的事物的屬性被抽象成了數(shù)據(jù),而行為則被抽象成了函數(shù)(過程),但數(shù)據(jù)和函數(shù)是分離的。描述一個事物特征的數(shù)據(jù)能夠被其他函數(shù)修改(如全局?jǐn)?shù)據(jù)可被任何函數(shù)修改),這與客觀事物的本來面目不相符合,因?yàn)橐粋€事物的屬性只有它自已才能改變。缺點(diǎn):數(shù)據(jù)安全性不高,程序規(guī)模變大時,設(shè)計(jì)與維護(hù)非常困難。上述個人通信管理程序代表了結(jié)構(gòu)化程序設(shè)計(jì)語言的編程方法:先定義一些全局性的數(shù)據(jù)結(jié)構(gòu),然后編寫一些過程對這些數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,其模型如下圖所示:全局?jǐn)?shù)據(jù)全局?jǐn)?shù)據(jù)全局?jǐn)?shù)據(jù)函數(shù)函數(shù)函數(shù)函數(shù)1.1.3高級語言由圖可見,大型程序中,函數(shù)和數(shù)據(jù)之間存在數(shù)1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言面向?qū)ο笳Z言發(fā)展:20世紀(jì)60年代中期,Simula67語言——面向?qū)ο笳Z言的鼻祖,提出了對象、類的概念,并支持類的繼承。20世紀(jì)70年代中期,Smalltalk語言——最有影響的面向?qū)ο笳Z言之一,豐富了面向?qū)ο蟮母拍睢?0世紀(jì)80年代中期后出現(xiàn)C++、VB、C#、PB、Java等多種面向?qū)ο笳Z言1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言面向?qū)ο笳Z言發(fā)展:1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言1、面向?qū)ο蟪绦蛟O(shè)計(jì)OOP觀點(diǎn)自然界是由各種各樣的實(shí)體(對象)所組成,每個對象都可以通過兩個方面來刻畫:描述事物狀態(tài)的數(shù)據(jù)和描述事物行為的操作,應(yīng)該把它們結(jié)合成一個整體,代表一個客觀事物,這個整體就是對象。在對象中,描述事物行為的操作被抽象成了函數(shù)。由此可以看出,一個對象由數(shù)據(jù)和函數(shù)兩部分構(gòu)成。數(shù)據(jù)常被稱為數(shù)據(jù)成員,函數(shù)則被稱為成員函數(shù)。一個對象的數(shù)據(jù)成員往往只能通過自身的成員函數(shù)修改。
2、程序設(shè)計(jì)方法:使用面向?qū)ο蟮挠^點(diǎn)來描述模仿并處理現(xiàn)實(shí)問題。要求:高度概括、分類和抽象。3、目的:讓程序員理解和管理更大、更復(fù)雜的程序,實(shí)現(xiàn)軟件設(shè)計(jì)的產(chǎn)業(yè)化。1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言1、面向?qū)ο蟪绦蛟O(shè)計(jì)OOP觀點(diǎn)1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言4、基本概念對象客觀存在的實(shí)體稱為對象屬性描述對象的特征的數(shù)據(jù)行為對象自身的行為,對現(xiàn)實(shí)世界某些信息的響應(yīng).對象之間通過傳遞消息相互影響屬性行為對象由屬性和行為構(gòu)成1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言4、基本概念屬性行為對象由屬性將客觀事物的屬性和行為抽象成數(shù)據(jù)和操作數(shù)據(jù)的函數(shù),并把它們組合成一個不可分割的整體(即對象)的方法能夠?qū)崿F(xiàn)對客觀世界的真實(shí)模擬,反映出世界的本來面目。從客觀世界中抽象出一個個對象,對象之間能夠傳遞消息,并通過特定的函數(shù)進(jìn)行數(shù)據(jù)訪問,禁止以任何未經(jīng)允許的方式修改對象的數(shù)據(jù),這就是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本模式。數(shù)據(jù)成員函數(shù)成員函數(shù)數(shù)據(jù)成員函數(shù)成員函數(shù)數(shù)據(jù)成員函數(shù)成員函數(shù)對象1對象2對象3消息消息消息5、面向?qū)ο蠡灸J綄⒖陀^事物的屬性和行為抽象成數(shù)據(jù)和操作數(shù)據(jù)的函數(shù),并把它們組1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言classPerson{ private:charname[10];charaddr[20];charphone[11];public:voidInitData(){……}voidSearchAddr(char*name){……}; voidSearchPhone(char*name){……}; };6、通信錄程序在C++中的類代碼形式在C++中,struct的功能被擴(kuò)展為類class,在class中不僅可以定義數(shù)據(jù),還可以定義函數(shù)。數(shù)據(jù)與函數(shù)構(gòu)成了一個整體。其中的private和public是訪問權(quán)限。1.1.4面向?qū)ο蟪绦蛟O(shè)計(jì)語言classPerson{ 1.2面向?qū)ο蟪绦蛘Z言的特征本節(jié)主要介紹類與對象的基本概念,以及面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特征(抽象、封裝、繼承和多態(tài))
1.2面向?qū)ο蟪绦蛘Z言的特征1.2.1類與對象1.對象的基本概念對象:用來描述客觀事物的一個實(shí)體,它是構(gòu)成系統(tǒng)的一個基本單元。一個對象具有一組屬性和行為。實(shí)體對象一臺計(jì)算機(jī)抽象對象一項(xiàng)計(jì)劃對象構(gòu)成要素:1.對象標(biāo)識符:是對象的名稱,用來區(qū)別與其他對象。2.屬性:是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項(xiàng)。3.行為:是用來描述對象動態(tài)特征和行為的一個操作函數(shù)。
1.2.1類與對象1.對象的基本概念對象示例1:一個“學(xué)生”對象的例子對象名:學(xué)生對象的屬性:學(xué)號:123456姓名:令狐沖年齡:18專業(yè):信管行為修改學(xué)號、姓名、專業(yè)、年齡等等1.2.1類與對象對象示例1:一個“學(xué)生”對象的例子1.2.1類與對象對象示例2:一個“課程”對象的例子:對象名:課程對象的屬性:課程號:123456課程名:程序設(shè)計(jì)任課教師:莫名選課要求:學(xué)時:48行為獲取并修改課程名、課程號、學(xué)時數(shù)、選課要求、任課教師等1.2.1類與對象對象示例2:一個“課程”對象的例子:1.2.1類與對象封裝將對象的使用者與設(shè)計(jì)者分開,使用者只需要通過接口訪問對象,不必須了解對象的內(nèi)部細(xì)節(jié).//friendfunctionprototypescharname[10];由若干個執(zhí)行語句組成,用來進(jìn)行有關(guān)的操作,以實(shí)現(xiàn)函數(shù)的功能。//friendfunctionprototypes3cout和插入運(yùn)算符<<charname[10];3 面向?qū)ο笈c面向過程程序設(shè)計(jì)structPerson{圍直到再次改變精度為止。用C語言寫的程序基本上可以不加修改地用于C++。注:設(shè)置數(shù)制基數(shù)后,它將一直有效,直到遇到下一個基數(shù)設(shè)置。封裝是指對象的封裝,在對象中數(shù)據(jù)和操作總是包裹在一起的,繼承不會影響對象的這種封裝性,但無限制的派生繼承會在一定程度上損害對象中數(shù)據(jù)的隱蔽性。7編程實(shí)作——VC++6.函數(shù)重載:是指在同一作用域內(nèi)的若干個參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字。A=A+5addA,50100100000101(6)選擇VC++的“編譯|編譯student.for(intj=0;j<5;j++)C++是由C發(fā)展而來的,與C兼容。對于字符變量和字符串變量,cout將把變量的值輸出到顯示屏幕上。2.類的基本概念類:是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供統(tǒng)一的抽象描述類和對象的關(guān)系:對象是類的實(shí)例。類對象 抽象定義實(shí)例類對象舉例學(xué)生學(xué)生王強(qiáng)課程C++程序設(shè)計(jì)類的實(shí)例——用類定義的類變量,即對象。類是對多個特性相同的對象實(shí)例的抽象,所以同一類的不同實(shí)例之間必有:相同的操作(行為)集合相同的屬性集合不同的對象名,分配有不同的存儲空間。1.2.1類與對象封裝將對象的使用者與設(shè)計(jì)者分開,使用者只需要通過接口訪問對象手機(jī)類與對象的關(guān)系1.2.1類與對象8810手機(jī)具有手機(jī)類的全部屬性和行為,是手機(jī)類的一個對象手機(jī)類與對象的關(guān)系1.2.1類與對象8810手機(jī)具有手機(jī)類的確定與劃分類的確定——對所遇到的對象進(jìn)行分析、歸納,根據(jù)共同的特征來確定一個類。類的確定的方法:判斷是否有一個以上的實(shí)例判斷類的實(shí)例中是否有絕對的不同點(diǎn)類的劃分不是絕對的,可以根據(jù)不同的實(shí)際需要確定不同的類1.2.1類與對象類的確定與劃分1.2.1類與對象1.2.1類與對象類的描述類的描述——不同的OOP語言用不同的描述形式。在C++中用關(guān)鍵字class來定義描述一個類。classclassname{ public: //publicmembers //friendfunctionprototypes private: //privatemembers};1.2.1類與對象類的描述1.2.2抽象與封裝1、抽象抽象(abstract)是指有意忽略問題的某些細(xì)節(jié)和與當(dāng)前目標(biāo)無關(guān)的方面,以便把問題的本質(zhì)表達(dá)得更清楚。把客觀世界的事物劃分成類的過程。抽象主要是針對實(shí)體的屬性和行為。屬性是指實(shí)體的性質(zhì)和特征,在軟件中用數(shù)據(jù)來表示;而行為是指實(shí)體能夠執(zhí)行的所有動作,在軟件中用一個操作或函數(shù)來實(shí)現(xiàn)。要用軟件對象組件來描述某個物理對象的全部屬性和行為是不可能的。這就要求采用抽象的方法針對某個具體的應(yīng)用(比如企業(yè)員工工資管理系統(tǒng))提取對象與具體應(yīng)用相關(guān)的屬性和行為加以描述。1.2.2抽象與封裝1、抽象1.2.2抽象與封裝現(xiàn)實(shí)世界企業(yè)員工抽象屬性:工作編號、姓名、基本工資、出勤率行為:設(shè)置基本工資、查詢基本工資、計(jì)算實(shí)際工資ClassCCompanyStaffprivate:iStaffNumpNamefRateOfAttendfBasicSalpublic:SetBasicSal()GetBasicSal()CalculateSal()圖:企業(yè)員工實(shí)體通過抽象用C++的類來描述1.2.2抽象與封裝現(xiàn)實(shí)世界企業(yè)員工抽象屬性:行為:Clas1.2.2抽象與封裝2、封裝性封裝encapsulation是面向?qū)ο蠓椒ǖ囊粋€重要原則。它有兩個涵義:第一個涵義是,把對象的全部屬性和全部服務(wù)結(jié)合在一起,形成一個不可分割的獨(dú)立單位(即對象)。第二個涵義也稱作“信息隱蔽”,即盡可能隱蔽對象的內(nèi)部細(xì)節(jié),對外形成一個邊界(或者說形成一道屏障),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。這主要是指對象的外部不能直接地存取對象的屬性,只能通過幾個允許外部使用的接口與對象發(fā)生聯(lián)系。封裝是通過類實(shí)現(xiàn)的。類將表示客觀事物屬性的數(shù)據(jù)結(jié)構(gòu),以及作用在這些數(shù)據(jù)結(jié)構(gòu)上的操作函數(shù)封裝成了一個整體。1.2.2抽象與封裝2、封裝性封裝的形式classclassname{ public:
//publicmembers //friendfunction private:
//privatemembers};Public成員1Public成員2Public成員nPrivate一個Class定義了一種抽象的數(shù)據(jù)類型,用戶只能訪問Public成員,不能直接訪問Private成員直接訪問private是禁止的邊界封裝的形式classclassnamePublic成員1封裝的特點(diǎn):具有一個清楚的邊界,對象的所有私有數(shù)據(jù)、內(nèi)部程序(成員函數(shù))細(xì)節(jié)都被固定在這個邊界內(nèi)。具有一個接口,描述了對象之間的相互作用、請求和響應(yīng)——消息對象內(nèi)部的實(shí)現(xiàn)代碼受到封裝殼的保護(hù),其它對象不能直接修改本對象所擁有的數(shù)據(jù)和代碼。封裝的單位是對象。從外面看只能看到對象的外部特性,即能夠受理哪些信息,具有哪些處理能力;對象的內(nèi)部,即處理能力的實(shí)行和內(nèi)部狀態(tài),對外是不可見的。從外面不能直接修改其內(nèi)部狀態(tài),對象的內(nèi)部狀態(tài)只能由其自身改變。封裝的特點(diǎn):封裝的優(yōu)點(diǎn):1.具有隱藏性和安全性(如銀行的帳戶)2.易于維護(hù)(由于數(shù)據(jù)獨(dú)立,易于發(fā)現(xiàn)問題)3.封裝將對象的使用者與設(shè)計(jì)者分開,使用者只需要通過接口訪問對象,不必須了解對象的內(nèi)部細(xì)節(jié).提高了軟件復(fù)用.封裝的缺點(diǎn):需要更多的輸入輸出函數(shù)。1.2.2抽象與封裝1.2.2抽象與封裝1.2.2抽象與封裝抽象與封裝形成了程序接口與實(shí)現(xiàn)的分離函數(shù)接口將函數(shù)的實(shí)現(xiàn)隱藏起來(信息隱藏)實(shí)現(xiàn)對象行為的函數(shù)將描述對象屬性的數(shù)據(jù)封裝起來(數(shù)據(jù)封裝)1.2.2抽象與封裝抽象與封裝形成了程序接口與實(shí)現(xiàn)的分離函數(shù)1、繼承的基本概念古語:龍生龍,鳳生鳳,老鼠生兒會打洞繼承:是對象類之間的相互關(guān)系,使得某類對象可以繼承另外一類對象的特征和功能。如果一個類A繼承了另外一個類B,則稱類A為派生類(子類),稱類B為基類(超類或父類)。派生類從它的基類中繼承所有的特征(遺傳),然后又添加自己的新特征(變異)。作為對客觀世界分層特性的一種自然描述,繼承可以讓程序員充分利用已有的類去派生新類,在更大程度上實(shí)現(xiàn)代碼的重用。1.2.3繼承1、繼承的基本概念1.2.3繼承2、繼承分類單繼承(一個派生類只有一個基類)、多繼承(一個派生類有多個基類)3、類的層次由一個類可以派生出任意多個派生類,這樣就形成了類的層次關(guān)系,這是現(xiàn)實(shí)世界中事物的分類問題在計(jì)算機(jī)中的解形式。1.2.3繼承2、繼承分類1.2.3繼承4、繼承的層次結(jié)構(gòu)思考:B和C具有哪些成員?ABECD
a:intgetA():int
c:intgetC():intsetc():void
b:intgetB():intsetB():voidinheritance(“is-a”relation)
e:intgetE():intsete():void
d:intgetD():int1.2.3繼承4、繼承的層次結(jié)構(gòu)ABECDa:intc:intbcin>>x1>>x2>>x3>>x4……>>xnC++的函數(shù)需要先聲明,然后才能調(diào)用關(guān)于VC++的項(xiàng)目工作區(qū)文件數(shù)值型常量數(shù)據(jù)和數(shù)值變量可以利用cout直接輸出,但在連續(xù)輸入多個3cout和插入運(yùn)算符<<4面向?qū)ο蟪绦蛟O(shè)計(jì)語言fRateOfAttend4面向?qū)ο蟪绦蛟O(shè)計(jì)語言intmain()//主函數(shù)首部本節(jié)主要介紹C++程序中數(shù)據(jù)輸入輸出的方法,是C++程序設(shè)計(jì)的基礎(chǔ)。高級語言A=A+5與C語言一樣,在C++程序中也可以將一條命令寫在多行上。setdata();//調(diào)用對象stud1的setdata函數(shù)機(jī)器語言0101100000101s[i][5]=sum/5.因此,一般習(xí)慣是:內(nèi)容較少的簡單注釋常用“//”,內(nèi)容較長的常用“/*……*/”。描述一個事物特征的數(shù)據(jù)能夠被其他函數(shù)修改(如全局?jǐn)?shù)據(jù)可被任何函數(shù)修改),這與客觀事物的本來面目不相符合,因?yàn)橐粋€事物的屬性只有它自已才能改變。cout<<setw(8)<<"學(xué)生"<<i+1;224 a=2,z=3.voidmain(){ cout<<“123456781234567812345678”<<endl; cout<<setiosflags(ios::left)<<setw(8)5、繼承與封裝的關(guān)系封裝是指對象的封裝,在對象中數(shù)據(jù)和操作總是包裹在一起的,繼承不會影響對象的這種封裝性,但無限制的派生繼承會在一定程度上損害對象中數(shù)據(jù)的隱蔽性。1.2.3繼承cin>>x1>>x2>>x3>>x4……>>xn5、繼承與6、繼承的優(yōu)勢能清晰體現(xiàn)相關(guān)類間的層次結(jié)構(gòu)關(guān)系。繼承能夠減少代碼和數(shù)據(jù)的重復(fù)冗余度,增強(qiáng)程序的重用性。增強(qiáng)了程序的一致性,減少了程序模塊間的接口和界面,使程序更易維護(hù)。繼承是自動傳播程序代碼的有力工具。繼承是一種在普通類的基礎(chǔ)上構(gòu)造、建立和擴(kuò)展新類的最有效手段。繼承具有傳遞性 如果類C繼承類B,類B繼承類A,則類C繼承類A“站在巨人的肩頭上”。用戶在開發(fā)新系統(tǒng)時不必從零開始,可以繼承原有相似功能或者從類庫中選取需要的類,再派生新類。1.2.3繼承6、繼承的優(yōu)勢1.2.3繼承例1:車輛的繼承關(guān)系車輛非機(jī)動車客車卡車轎車機(jī)動車?yán)?:人類按職業(yè)劃分的一種繼承關(guān)系人學(xué)生工人教師農(nóng)民中學(xué)生大學(xué)生研究生講師教授1.2.3繼承7、兩個繼承的案例例1:車輛的繼承關(guān)系車輛非機(jī)動車客車卡車轎車機(jī)動車?yán)?:1、多態(tài)polymorphism對象根據(jù)所接受的消息而做出動作,同樣的消息被不同的對象接受時可導(dǎo)致完全不同的行動,該現(xiàn)象稱為多態(tài)性。多態(tài)與繼承密切相關(guān),通過繼承產(chǎn)生的不同類,它們的對象可以對同一函數(shù)調(diào)用做出不同的響應(yīng),執(zhí)行不同的操作,實(shí)現(xiàn)不同的功能,這就是多態(tài)。簡單的說:單接口,多實(shí)現(xiàn)(即不同對象針對同一種操作會表現(xiàn)出不同的行為。)作用:減輕程序員負(fù)擔(dān)降低程序員出錯機(jī)率1.2.4
多態(tài)1、多態(tài)polymorphism1.2.4多態(tài)多態(tài)的一個案例圖中同名函數(shù)area()作用在Circle、Triangle等不同類上時,將執(zhí)行不同的操作,這就是多態(tài)。1.2.4
多態(tài)多態(tài)的一個案例1.2.4多態(tài)2、多態(tài)性的實(shí)現(xiàn)運(yùn)行時多態(tài)性:虛函數(shù)編譯時多態(tài)性:重載重載函數(shù)重載:是指在同一作用域內(nèi)的若干個參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字。運(yùn)算符重載:是指同一個運(yùn)算符可以施加于不同類型的操作數(shù)上面。優(yōu)點(diǎn):重載進(jìn)一步提高了面向?qū)ο笙到y(tǒng)的靈活性和可讀性1.2.4
多態(tài)2、多態(tài)性的實(shí)現(xiàn)1.2.4多態(tài)1、面向過程程序設(shè)計(jì)的基本特點(diǎn)方法:自頂向下,逐步求精,模塊化按層次組織模塊。每一模塊只有一個入口,一個出口。代碼和數(shù)據(jù)分離,即程序=數(shù)據(jù)結(jié)構(gòu)+算法。
1.3 面向?qū)ο笈c面向過程程序設(shè)計(jì)1、面向過程程序設(shè)計(jì)的基本特點(diǎn)1.3 面向?qū)ο笈c面向過程程序2、面向?qū)ο蟪绦蛟O(shè)計(jì)它將數(shù)據(jù)和操作數(shù)據(jù)的過程(函數(shù))綁在一起,形成一個相互依存、不可分離的整體(即對象),從同類對象中抽象出共性,形成類。同類對象中的數(shù)據(jù),原則上只能用本類提供的方法(成員函數(shù))進(jìn)行處理。類通過封裝將接口與實(shí)現(xiàn)分離開來,通過接口與外界聯(lián)系。對象之間通過消息進(jìn)行通信。1.3 面向?qū)ο笈c面向過程程序設(shè)計(jì)2、面向?qū)ο蟪绦蛟O(shè)計(jì)1.3 面向?qū)ο笈c面向過程程序設(shè)計(jì)3、兩種程序方法的對比1.3 面向?qū)ο笈c面向過程程序設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)將數(shù)據(jù)和操作數(shù)據(jù)的程序代碼綁在一起構(gòu)成對象具有更好的可維護(hù)性,因某類對象數(shù)據(jù)的改變只會引起該類對象操作代碼的改變,而與其他類型的對象無關(guān),這就把程序代碼的修改維護(hù)局限在一個很小的范圍內(nèi)。3、兩種程序方法的對比1.3 面向?qū)ο笈c面向過程程序設(shè)計(jì)面向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ū)ο蟪绦虻囊恍┨卣?,但VB.NET已經(jīng)改變了這一切!C#:具有VB和VC++的特征C++其它常用的具有面向?qū)ο筇卣鞯恼Z言BorlandDelphi、PowerBuilder、VisualFoxPro……1.4 C++與面向?qū)ο蟪绦蛟O(shè)計(jì)1、面向?qū)ο蟪绦蛟O(shè)計(jì)語言的基3cout和插入運(yùn)算符<<7編程實(shí)作——VC++6.就是指計(jì)算機(jī)能夠識別的命令,它們是一些由0和1組合成的二進(jìn)制編碼。只要在開始處有一個“/*”,在最后一行結(jié)束處有一個“*/”即可。抽象對象一項(xiàng)計(jì)劃C++提供了許多控制數(shù)據(jù)輸出格式的函數(shù)和操縱符,這些操縱符或操縱函數(shù)是在iomanip.Java:純面向?qū)ο蟮恼Z言從客觀世界中抽象出一個個對象,對象之間能夠傳遞消息,并通過特定的函數(shù)進(jìn)行數(shù)據(jù)訪問,禁止以任何未經(jīng)允許的方式修改對象的數(shù)據(jù),這就是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本模式。224 a=2,z=3.for(inti=0;i<n;i++){①函數(shù)首部,即函數(shù)的第一行。cin>>x;若x是int,float之類的類型,則2就是一個數(shù)字。單擊“是”按鈕,VC++將自動生成該程序的相關(guān)項(xiàng)目文件。cin>>s[i][j];//friendfunctionvoidmain(){ cout<<“123456781234567812345678”<<endl; cout<<setiosflags(ios::left)<<setw(8)有了類,就可以實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)方法中的封裝、信息隱蔽、繼承、派生、多態(tài)等功能。(8)一個好的、有使用價值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。上述個人通信管理程序代表了結(jié)構(gòu)化程序設(shè)計(jì)語言的編程方法:先定義一些全局性的數(shù)據(jù)結(jié)構(gòu),然后編寫一些過程對這些數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,其模型如下圖所示:【例1-5】輸出不同進(jìn)制的數(shù)據(jù)。若輸出數(shù)據(jù)的位數(shù)比n小,則左邊留空。1.4 C++與面向?qū)ο蟪绦蛟O(shè)計(jì)2、C++簡史C++是由AT&TBell(貝爾)實(shí)驗(yàn)室的BjarneStroustrup博士及其同事于20世紀(jì)80年代初在C語言的基礎(chǔ)上引入了類的概念,并將數(shù)據(jù)抽象和面向?qū)ο蟮人枷爰舆M(jìn)了C語言,對C語言進(jìn)行了擴(kuò)展和創(chuàng)新。稱為“帶類的C”。到1983年,“帶類的C”正式改名為C++。C++是由C發(fā)展而來的,與C兼容。用C語言寫的程序基本上可以不加修改地用于C++。從C++的名字可以看出它是C的超集。C++既可用于面向過程的結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),是一種功能強(qiáng)大的混合型的程序設(shè)計(jì)語言。3、C++常用領(lǐng)域系統(tǒng)軟件設(shè)備驅(qū)動程序圖形學(xué)用戶界面……3cout和插入運(yùn)算符<<1.4 C++與面向?qū)ο蟪绦蛟O(shè)計(jì)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++.net1.4 C++與面向?qū)ο蟪绦蛟O(shè)計(jì)4、C++特征1.5C++程序的結(jié)構(gòu)1、C++程序的構(gòu)成聲明部分主函數(shù)部分函數(shù)定義2、C++程序文件頭文件:.h源文件:.cpp3、程序結(jié)構(gòu)的例程如下1.5C++程序的結(jié)構(gòu)1、C++程序的構(gòu)成1.5C++程序的結(jié)構(gòu)1.5C++程序的結(jié)構(gòu)1.5C++程序的結(jié)構(gòu)對例程的補(bǔ)充:C++的注釋///*……*/C++的函數(shù)需要先聲明,然后才能調(diào)用1.5C++程序的結(jié)構(gòu)對例程的補(bǔ)充:下面舉一個包含類(class)和對象(object)的C++程序,目的是初步了解C++是怎樣體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的。例:實(shí)現(xiàn)學(xué)生學(xué)號,成績的輸入與顯示功能.#include<iostream.h>//預(yù)處理命令usingnamespacestd;//使用命名空間stdclassStudent//聲明一個類,類名為Student{private://以下為類中的私有部分
intnum;//私有變量numintscore;//私有變量score
public://以下為類中的公用部分
voidsetdata()//定義公用函數(shù)setdata{cin>>num;//輸入num的值
cin>>score;}//輸入score的值
voiddisplay()//定義公用函數(shù)display{cout<<″num=″<<num<<endl;//輸出num的值
cout<<″score=″<<score<<endl;}//輸出score的值};//類的聲明結(jié)束下面舉一個包含類(class)和對象(object)的C++Studentstud1,stud2;//定義stud1和stud2為Student類的變量,稱為對象intmain()//主函數(shù)首部{stud1.setdata();//調(diào)用對象stud1的setdata函數(shù)
stud2.setdata();//調(diào)用對象stud2的setdata函數(shù)
stud1.display();//調(diào)用對象stud1的display函數(shù)
stud2.display();//調(diào)用對象stud2的display函數(shù)return0;}Studentstud1,stud2;具有“類”類型特征的變量稱為“對象”(object)。程序中第18~24行是主函數(shù)。程序運(yùn)行情況如下:100198.5↙(輸入學(xué)生1的學(xué)號和成績)100276.5↙(輸入學(xué)生2的學(xué)號和成績)num=1001(輸出學(xué)生1的學(xué)號)score=98.5(輸出學(xué)生1的成績)num=1002(輸出學(xué)生2的學(xué)號)score=76.5(輸出學(xué)生2的成績)具有“類”類型特征的變量稱為“對象”(object)。4、C++程序運(yùn)行步驟4、C++程序運(yùn)行步驟C++程序的結(jié)構(gòu)和書寫格式歸納如下:
(1)一個C++程序可以由一個程序單位或多個程序單位構(gòu)成。每一個程序單位作為一個文件。在程序編譯時,編譯系統(tǒng)分別對各個文件進(jìn)行編譯,因此,一個文件是一個編譯單元。(2)在一個程序單位中,可以包括以下幾個部分:①預(yù)處理命令。上節(jié)4個程序中都包括#include命令。②全局聲明部分(在函數(shù)外的聲明部分)。在這部分中包括對用戶自己定義的數(shù)據(jù)類型的聲明和程序中所用到的變量的定義。③函數(shù)。函數(shù)是實(shí)現(xiàn)操作的部分,因此函數(shù)是程序中必須有的和最基本的組成部分。每一個程序必須包括一個或多個函數(shù),其中必須有一個(而且只能有一個)主函數(shù)(main函數(shù))。但是并不要求每一個程序文件都必須具有以上3個部分,可以缺少某些部分(包括函數(shù))。5、C++程序的構(gòu)成和書寫形式C++程序的結(jié)構(gòu)和書寫格式歸納如下:5、C++程序的構(gòu)成和getA():int包括對本函數(shù)中所用到的類型、函數(shù)的聲明和變量的定義。getB():intdsp的文件是項(xiàng)目文件高級程序設(shè)計(jì)語言的出現(xiàn)是計(jì)算機(jī)科學(xué)技術(shù)發(fā)展史上的一個里程碑。這兩個常數(shù)可作為以上兩個操縱符的參數(shù),用于設(shè)置輸出數(shù)據(jù)的對齊方式.public://以下為類中的公用部分每一個程序單位作為一個文件。voidReadData(doubles[][6],intn); //這3行是函數(shù)聲明類:是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供統(tǒng)一的抽象描述其中,x1,x2和x3可以是相同或不同類型的數(shù)據(jù)。類通過封裝將接口與實(shí)現(xiàn)分離開來,通過接口與外界聯(lián)系。從C++的名字可以看出它是C的超集。對象內(nèi)部的實(shí)現(xiàn)代碼受到封裝殼的保護(hù),其它對象不能直接修改本對象所擁有的數(shù)據(jù)和代碼。3、目的:讓程序員理解和管理更大、更復(fù)雜的程序,實(shí)現(xiàn)軟件設(shè)計(jì)的產(chǎn)業(yè)化。Voidmain(){7編程實(shí)作——VC++6.Cout<<setprecision(3)<<3.數(shù)據(jù)常被稱為數(shù)據(jù)成員,函數(shù)則被稱為成員函數(shù)。(8)一個好的、有使用價值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。stud2.從C++的名字可以看出它是C的超集。(3)一個函數(shù)由兩部分組成:①函數(shù)首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。一個函數(shù)名后面必須跟一對圓括號,函數(shù)參數(shù)可以缺省,如intmain()。②函數(shù)體,即函數(shù)首部下面的大括號內(nèi)的部分。如果在一個函數(shù)中有多個大括號,則最外層的一對{}為函數(shù)體的范圍。函數(shù)體一般包括:局部聲明部分(在函數(shù)內(nèi)的聲明部分)。包括對本函數(shù)中所用到的類型、函數(shù)的聲明和變量的定義。對數(shù)據(jù)的聲明既可以放在函數(shù)之外(其作用范圍是全局的),也可以放在函數(shù)內(nèi)(其作用范圍是局部的,只在本函數(shù)內(nèi)有效)。執(zhí)行部分。由若干個執(zhí)行語句組成,用來進(jìn)行有關(guān)的操作,以實(shí)現(xiàn)函數(shù)的功能。5、C++程序的構(gòu)成和書寫形式getA():int(3)一個函數(shù)由兩部分組成:5、C(4)語句包括兩類。一類是聲明語句,另一類是執(zhí)行語句。C++對每一種語句賦予一種特定的功能。語句是實(shí)現(xiàn)操作的基本成分,顯然,沒有語句的函數(shù)是沒有意義的。C++語句必須以分號結(jié)束。(5)一個C++程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個程序中的位置如何。(6)類(class)是C++新增加的重要的數(shù)據(jù)類型,是C++對C的最重要的發(fā)展。有了類,就可以實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)方法中的封裝、信息隱蔽、繼承、派生、多態(tài)等功能。在一個類中可以包括數(shù)據(jù)成員和成員函數(shù),他們可以被指定為私有的(private)和公用的(public)屬性。私有的數(shù)據(jù)成員和成員函數(shù)只能被本類的成員函數(shù)所調(diào)用。5、C++程序的構(gòu)成和書寫形式(4)語句包括兩類。一類是聲明語句,另一類是執(zhí)行語句。C+(7)C++程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句可以分寫在多行上。C++程序沒有行號,也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語句必須從某一列開始書寫)。(8)一個好的、有使用價值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。C++還保留了C語言的注釋形式,可以用“/*……*/”對C++程序中的任何部分作注釋。在“/*”和“*/”之間的全部內(nèi)容作為注釋。用“//”作注釋時,有效范圍只有一行,即本行有效,不能跨行。而用“/*……*/”作注釋時有效范圍為多行。只要在開始處有一個“/*”,在最后一行結(jié)束處有一個“*/”即可。因此,一般習(xí)慣是:內(nèi)容較少的簡單注釋常用“//”,內(nèi)容較長的常用“/*……*/”。5、C++程序的構(gòu)成和書寫形式(7)C++程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語1.6數(shù)據(jù)的輸入與輸出本節(jié)主要介紹C++程序中數(shù)據(jù)輸入輸出的方法,是C++程序設(shè)計(jì)的基礎(chǔ)。應(yīng)該掌握流的概念iostream.hcincoutendl1.6數(shù)據(jù)的輸入與輸出本節(jié)主要介紹C++程序中數(shù)據(jù)輸入輸出1.6.1流的概念1、C及C++中的流概念I(lǐng)/O(input/output,輸入/輸出)數(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è)備中,如同河流一樣,故此叫流。1.6.1流的概念1、C及C++中的流概念A(yù)8bcty1.6.1流的概念輸入流輸入流(inputstream)是指從輸入設(shè)備流向內(nèi)存的字節(jié)序列。輸出流輸出流(outputstream)是指從內(nèi)存流向輸出設(shè)備的字節(jié)序列。C++中的輸入輸出流iostream.hcin輸入流對象,C++已將其與鍵盤關(guān)聯(lián)cout輸出流對象,C++已將其與顯示器關(guān)聯(lián)1.6.1流的概念輸入流1.6.2cin和析取運(yùn)算符>>1、cin的用途cin讀作(see-in)是一個輸入流對象,用于從鍵盤輸入數(shù)據(jù)。在C++程序中,也可以使用c語言中常用的scanf函數(shù)輸入數(shù)據(jù),但cin更簡單。2、cin的用法輸入單個變量的值cin>>x;輸入多個變量的值cin>>x1>>x2>>x3>>x4……>>xn其中x,x1……x2可以是內(nèi)置數(shù)據(jù)類型如int,char,float,double等。1.6.2cin和析取運(yùn)算符>>1、cin的用途1.6.2cin和析取運(yùn)算符>>3、用cin時的注意事項(xiàng)在一條cin語句中同時為多個變量輸入數(shù)據(jù)。在輸入數(shù)據(jù)的個數(shù)應(yīng)當(dāng)與cin語句中變量個數(shù)相同,各輸入數(shù)據(jù)之間用一個或多個空白(包括空格、回車、Tab)作為間隔符,全部數(shù)據(jù)輸入完成后,按Enter鍵結(jié)束。
在析取運(yùn)算符>>后面只能出現(xiàn)變量名,下面的語句是錯誤的。cin>>"x=">>x; //錯誤,>>后面含有字符串"x="cin>>12>>x; //錯誤,>>后面含有常數(shù)12cin>>'x'>>x; 1.6.2cin和析取運(yùn)算符>>3、用cin時的注意事項(xiàng)1.6.2cin和析取運(yùn)算符>>cin具有自動識別數(shù)據(jù)類型的能力,析取運(yùn)算>>將根據(jù)它后面的變量的類型從輸入流中為它們提取對應(yīng)的數(shù)據(jù)。比如:cin>>x;假設(shè)輸入數(shù)據(jù)2,析取運(yùn)算符>>將根據(jù)其后的x的類型決定輸入的2到底是數(shù)字還是字符。若x是char類型,則2就是字符;若x是int,float之類的類型,則2就是一個數(shù)字。再如,若輸入34,且x是char類型,則只有字符3被存儲到x中,4將繼續(xù)保存在流中;若x是int或float,則34就會存儲x中。
1.6.2cin和析取運(yùn)算符>>cin具有自動識別數(shù)據(jù)類型1.6.2cin和析取運(yùn)算符>>數(shù)值型數(shù)據(jù)的輸入在讀取數(shù)值型數(shù)據(jù)時,析取運(yùn)算符>>首先略掉數(shù)據(jù)前面的所有空白符號,如果遇到正、負(fù)號或數(shù)字,就開始讀入,包括浮點(diǎn)型數(shù)據(jù)的小數(shù)點(diǎn),并在遇到空白符或其他非數(shù)字字符時停止。例如:intx1;doublex2;charx3;cin>>x1>>x2>>x3;假如輸入“35.4A”并按Enter鍵,cout<<"x1="<<x1<<""<<"x2="<<x2<<""<<"x3="<<x3;x1是35;x2是.4;x3是'A'在輸入數(shù)據(jù)時,一定要注意數(shù)據(jù)之間間隔符的正確輸入1.6.2cin和析取運(yùn)算符>>數(shù)值型數(shù)據(jù)的輸入在輸入數(shù)據(jù)1.6.2cin和析取運(yùn)算符>>輸入數(shù)值型數(shù)據(jù)時,還要注意不同進(jìn)制數(shù)據(jù)的輸入方法十進(jìn)制整數(shù),直接輸入數(shù)據(jù)本身,如78。十六進(jìn)制整數(shù),在要輸入的數(shù)據(jù)前加0x或0X,如0x1A(對應(yīng)的十進(jìn)制數(shù)是26)。八進(jìn)制整數(shù),在輸入的數(shù)據(jù)前加0,如043(代表十進(jìn)制數(shù)的35)例:intx;cin>>x;cout<<“x=”<<x<<endl;假如輸入“0x1A”回車,則顯示結(jié)果為26(系統(tǒng)自動按十進(jìn)制結(jié)果顯示)1.6.2cin和析取運(yùn)算符>>輸入數(shù)值型數(shù)據(jù)時,還要注1.6.2cin和析取運(yùn)算符>>4、輸入數(shù)據(jù)案例分析【例1-2】假設(shè)有變量定義語句如下:inta,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,等待輸入下一個數(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=321.6.2cin和析取運(yùn)算符>>4、輸入數(shù)據(jù)案例分析1.6.3cout和插入運(yùn)算符<<cout的用途cout(讀作see-out)是一個輸出流對象,已被C++默認(rèn)關(guān)聯(lián)到顯示器,用于在屏幕上輸出數(shù)據(jù)。在C++程序中,也可使用C語言的printf輸出數(shù)據(jù),但cout更簡單。cout的用法cout<<x其中x可是以內(nèi)置數(shù)據(jù)類型如int,char,float,double等。1.6.3cout和插入運(yùn)算符<<cout的用途在cout語句中換行可用:“\n”或endl一類是聲明語句,另一類是執(zhí)行語句。高級語言屏蔽了與機(jī)器硬件相關(guān)的細(xì)節(jié),提高了語言的抽象層次,程序員可以用接近自然語言的程序語言編制軟件,然后通過編譯器轉(zhuǎn)換成機(jī)器可執(zhí)行的代碼(機(jī)器語言)。resetiosflags(longf);圖中同名函數(shù)area()作用在Circle、Triangle等不同類上時,將執(zhí)行不同的操作,這就是多態(tài)。除了圖像、聲音數(shù)據(jù)外,字節(jié)流通常代表的都是字符,因此在多數(shù)情況下的流(stream)是從源設(shè)備到目標(biāo)設(shè)備的字符序列,Abc78這就要求采用抽象的方法針對某個具體的應(yīng)用(比如企業(yè)員工工資管理系統(tǒng))提取對象與具體應(yīng)用相關(guān)的屬性和行為加以描述。例1:人類按職業(yè)劃分的一種繼承關(guān)系對象根據(jù)所接受的消息而做出動作,同樣的消息被不同的對象接受時可導(dǎo)致完全不同的行動,該現(xiàn)象稱為多態(tài)性。在程序運(yùn)行過程中,常常需要按照一定的格式輸出其運(yùn)行結(jié)果,數(shù)據(jù)輸出格式的設(shè)置是程序設(shè)計(jì)的一個重要內(nèi)容,影響到程序結(jié)果的清晰性.學(xué)生16776878976charaddr[20];(8)一個好的、有使用價值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。數(shù)據(jù)時,應(yīng)注意在數(shù)據(jù)之間插入間隔符。如果類C繼承類B,類B繼承類A,則類C繼承類A八進(jìn)制整數(shù),在輸入的數(shù)據(jù)前加0,如043(代表十進(jìn)制數(shù)關(guān)于VC++的項(xiàng)目工作區(qū)文件封裝將對象的使用者與設(shè)計(jì)者分開,使用者只需要通過接口訪問對象,不必須了解對象的內(nèi)部細(xì)節(jié).2 cin>>ch; AB ch='A',而'B'被保留在輸入流中等待被讀取1.6.3cout和插入運(yùn)算符<<1.輸出字符類型的數(shù)據(jù)對于字符變量和字符串變量,cout將把變量的值輸出到顯示屏幕上。對于字符常量和字符串常量,cout將把它們原樣輸出在屏幕上【例1-3】用cout輸出字符數(shù)據(jù)。//Eg1-3.cpp#include<iostream.h>voidmain(){ charch1='c'; charch2[]="HellowC++!"; cout<<ch1; cout<<ch2; cout<<"C"; cout<<"Helloweveryone!";}在cout語句中換行可用:“\n”或endl1.6.3co1.6.3cout和插入運(yùn)算符<<2.連續(xù)輸出cout能夠同時輸出多個數(shù)據(jù),用法如下:cout<<x1<<x2<<x3<<…;其中,x1,x2和x3可以是相同或不同類型的數(shù)據(jù)。此命令將依次把x1,x2和x3的值輸出到顯示器上。
例:cout<<ch1<<ch2<<"C"<<"Helloweveryone!";與C語言一樣,在C++程序中也可以將一條命令寫在多行上。比如,上面的語句也可寫成下面的形式:cout<<ch1 <<ch2 <<"C" <<"Helloweveryone!";1.6.3cout和插入運(yùn)算符<<2.連續(xù)輸出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"; }1.6.3cout和插入運(yùn)算符<<3、輸出換行1.6.3cout和插入運(yùn)算符<<4、輸入數(shù)據(jù)類型數(shù)據(jù)數(shù)值型常量數(shù)據(jù)和數(shù)值變量可以利用cout直接輸出,但在連續(xù)輸入多個數(shù)據(jù)時,應(yīng)注意在數(shù)據(jù)之間插入間隔符。如intx1=23;floatx2=34.1;doublex3=67.12;cout<<x1<<x2<<x3<<900;其中的cout語句將在屏幕上輸出,2334.167.12900誰知道這是個什么數(shù)據(jù)呢?cout<<“x1=”<<x1<<“
”<<“x2=”<<x2<<“
”<<“x3=”<<x3<<endl<<900<<endl;結(jié)果為:x1=23x2=34.1x3=67.129001.6.3cout和插入運(yùn)算符<<4、輸入數(shù)據(jù)類型數(shù)據(jù)1.6.4輸出格式控制符在程序運(yùn)行過程中,常常需要按照一定的格式輸出其運(yùn)行結(jié)果,數(shù)據(jù)輸出格式的設(shè)置是程序設(shè)計(jì)的一個重要內(nèi)容,影響到程序結(jié)果的清晰性.C++提供了許多控制數(shù)據(jù)輸出格式的函數(shù)和操縱符,這些操縱符或操縱函數(shù)是在iomanip.h或iostream.h中定義的.本節(jié)介紹的setprecision,setw,left,right都是在iomanip.h中定義的,應(yīng)該在引用它們的程序中包含該頭文件.1.6.4輸出格式控制符在程序運(yùn)行過程中,常常需要按照一定1.6.4輸出格式控制符1、數(shù)制基數(shù)hex:16進(jìn)制,oct:8進(jìn)制,dec:10進(jìn)制【例1-5】輸出不同進(jìn)制的數(shù)據(jù)。#include<iostream.h>voidmain(){intx=34;cout<<hex<<17<<""<<x<<""<<18<<endl;cout<<17<<""<<oct<<x<<""<<18<<endl;cout<<dec<<17<<""<<x<<""<<18<<endl;}注:設(shè)置數(shù)制基數(shù)后,它將一直有效,直到遇到下一個基數(shù)設(shè)置。1.6.4輸出格式控制符1、數(shù)制基數(shù)1.6.3cout和插入運(yùn)算符<<2、其它輸出格式控制符設(shè)置浮點(diǎn)數(shù)的精度
setprecision(n)其中,n代表有效數(shù)位,包括整數(shù)的位數(shù)和小數(shù)的位數(shù)。有效范圍直到再次改變精度為止。例:Cout<<setprecision(3)<<3.1415926<<“
”<<2.4536<<endl;輸出為:3.142.451.6.3cout和插入運(yùn)算符<<2、其它輸出格式控制符2、其它輸出格式控制符設(shè)置輸出域?qū)捄蛯R方式setw(n)
其中,n是輸出數(shù)據(jù)占用屏幕寬度的字符個數(shù),在默認(rèn)情況下,輸出數(shù)據(jù)按右對齊。若輸出數(shù)據(jù)的位數(shù)比n小,則左邊留空。若輸出數(shù)據(jù)的實(shí)際位數(shù)比n大,則輸出數(shù)據(jù)將自動擴(kuò)展到所需占用的列數(shù)。注:setw()只對緊隨其后的一個輸出數(shù)據(jù)有效.例:cout<<“1234567812345678”<<endl;cout<<setw(8)<<23.27<<setw(8)<<78<<endl;cout<<setw(8)<<“Abc”<<78<<endl;輸出:123456781234567823.2778Abc782、其它輸出格式控制符2、其它輸出格式控制符設(shè)置對齊方式Setiosflags(longf);resetiosflags(longf);這兩個操縱函數(shù)用于設(shè)置或取消輸入/輸出數(shù)據(jù)的各種格式.其中表示左對齊的常數(shù)值是ios::left,表示右對齊的常數(shù)值是ios::right.這兩個常數(shù)可作為以上兩個操縱符的參數(shù),用于設(shè)置輸出數(shù)據(jù)的對齊方式.當(dāng)用setiosflags()設(shè)置輸出對齊方式成功后,將一直有效,直到用resetiosflags()取消它.2、其它輸出格式控制符1.6.3cout和插入運(yùn)算符<<【例1-6】用setiosflags和
resetiosflags設(shè)置
和取消輸出數(shù)據(jù)的對齊方式。//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; }1.6.3cout和插入運(yùn)算符<<【例1-6】用set1.7編程實(shí)作——VC++6.0編程簡介本節(jié)主要以案例方式介紹VC++的編程環(huán)境,及在VC++6.0環(huán)境下設(shè)計(jì)C++程序的過程。本節(jié)介紹的是一種基于控制臺的VC++程序設(shè)計(jì)方式,是一種非常簡略的方式1.7編程實(shí)作——VC++6.0編程簡介本節(jié)主要以案例方式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)建各類資源文件(如對話框、圖標(biāo)、菜單等)的資源編輯器,具有編輯、編譯、鏈接等功能。利用它可以輸入、編輯源程序,進(jìn)行程序的編譯、調(diào)試、鏈接,最后生成可執(zhí)行的命令程序。1.7編程實(shí)作——VC++6.0編程簡介1、關(guān)于C++編譯1.7編程實(shí)作——VC++6.0編程簡介2、例題描述【例1-7】某次考試成績?nèi)缦?,編寫程序?jì)算每位同學(xué)的平均分。要求成績從鍵盤輸入,程序輸出結(jié)果的形式與下面相同,但要輸出每位同學(xué)的平均分。
語文數(shù)學(xué)政治化學(xué)英語平均分學(xué)生16776878976學(xué)生278 87789087……1.7編程實(shí)作——VC++6.0編程簡介2、例題描述1.7編程實(shí)作——VC++6.0編程簡介3、編程過程(1)啟動VC++6.0(2)選擇VC++6.0的“文件|新建”命令,進(jìn)入VC++的“新建”對話框,如圖所示。1.7編程實(shí)作——VC++6.0編程簡介3、編程過程1.7編程實(shí)作——VC++6.0編程簡介(3)選擇“新建|文件”標(biāo)簽,通過“目錄”編輯框指定文件目錄。(4)選中“新建|C++SourceFile”列表項(xiàng),在“文件”編輯框中輸入源程序的名字,擴(kuò)展名為.cpp。單擊“確定”,進(jìn)入VC++的編輯程序界面,如圖所示。1.7編程實(shí)作——VC++6.0編程簡介(3)選擇“新建|1.7編程實(shí)作——VC++6.0編程簡介1.7編程實(shí)作——VC++6.0編程簡介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);1.7編程實(shí)作——VC++6.0編程簡介(5)在程序編輯窗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;j++) //輸入學(xué)生5科成績
cin>>s[i][j]; } }1.7編程實(shí)作——VC++6.0編程簡介voidmainvoidAveScore(doubles[][6],intn){ for(inti=0;i<n;i++){ doublesum=0; for(intj=0;j<5;j++) sum=sum+s[i][j]; s[i][5]=sum/5.0; }}voidOutData(doubles[][6],intn){//下面的cout語句在屏幕上輸出科目名稱
cout<<setw(17)<<"語文"<<setw(8)<<"數(shù)學(xué)"<<setw(8)<<"政治"<<setw(8)<<"化學(xué)"<<setw(8)<<"英語"<<setw(8)<<"平均分"<<endl; for(inti=0;i<n;i++){ cout<<setw(8)<<"學(xué)生"<<i+1; for(intj=0;j<6;j++) cout<<setw(8)<<s[i][j]; cout<<endl; }}voidAveScore(doubles[][6],i1.7編程實(shí)作——VC++6.0編程簡介(6)選擇VC++的“編譯|編譯student.cpp”命令,單擊VC++編譯工具按鈕,彈出如圖所示的對話框。1.7編程實(shí)作——VC++6.0編程簡介(6)選擇VC++行為:是用來描述對象動態(tài)特征和行為的一個操作函數(shù)。缺點(diǎn):數(shù)據(jù)安全性不高,程序規(guī)模變大時,設(shè)計(jì)與維護(hù)非常困難。多態(tài)與繼承密切相關(guān),通過繼承產(chǎn)生的不同類,它們的對象可以對同一函數(shù)調(diào)用做出不同的響應(yīng),執(zhí)行不同的操作,實(shí)現(xiàn)不同的功能,這就是多態(tài)。C++是由AT&TBell(貝爾)實(shí)驗(yàn)室的BjarneStroustrup博士及其同事于20世紀(jì)80年代初在C語言的基礎(chǔ)上引入了類的概念,并將數(shù)據(jù)抽象和面向?qū)ο蟮人枷爰舆M(jìn)了C語言,對C語言進(jìn)行了擴(kuò)展和創(chuàng)新。4 C++與面向?qū)ο蟪绦蛟O(shè)計(jì)從客觀世界中抽象出一個個對象,對象之間能夠傳遞消息,并通過特定的函數(shù)進(jìn)行數(shù)據(jù)訪問,禁止以任何未經(jīng)允許的方式修改對象的數(shù)據(jù),這就是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本模式。7編程實(shí)作——VC++6.本節(jié)主要介紹類與對象的基本概念,以及面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特征(抽象、封裝、繼承和多態(tài))在cout語句中換行可用:“\n”或endl由若干個執(zhí)行語句組成,用來進(jìn)行有關(guān)的操作,以實(shí)現(xiàn)函數(shù)的功能。具有高效性、靈活性、可移植性圖中同名函數(shù)area()作用在Circle、Triangle等不同類上時,將執(zhí)行不同的操作,這就是多態(tài)。5(輸出學(xué)生1的成績)圍直到再次改變精度為止。cout<<setw(8)<<“Abc”<<78<<endl;charch2[]="HellowC++!";就是指計(jì)算機(jī)能夠識別的命令,它們是一些由0和1組合成的二進(jìn)制編碼。cin>>s[i][j];3cout和插入運(yùn)算符<<1.7編程實(shí)作——VC++6.0編程簡介(7)一個C++程序在VC++環(huán)境下編譯運(yùn)行,必須有一組與之緊密相關(guān)的文件,這組文件包含了程序的環(huán)境設(shè)置、涉及的頭文件、資源等內(nèi)容,稱為項(xiàng)目文件。上圖所示對話框詢問是否要創(chuàng)建本程序的項(xiàng)目文件。單擊“是”按鈕,VC++將自動生成該程序的相關(guān)項(xiàng)目文件。行為:是用來描述對象動態(tài)特征和行為的一個操作函數(shù)。1.7(8)編譯程序,調(diào)試代碼中的錯誤,編譯成功后,選擇VC++的“編譯|執(zhí)行”命令,或單擊工具欄中的命令按鈕,執(zhí)行該程序1.7編程實(shí)作——VC++6.0編程簡介(8)編譯程序,調(diào)試代碼中的錯誤,編譯成功后,選擇VC++的關(guān)于VC++的項(xiàng)目工作區(qū)文件同簡單的C程序相比較,VC++程序的編譯運(yùn)行需要在一個項(xiàng)目環(huán)境中才可行。前面的編程過程雖然只輸入了一個源文件,但第(6)步卻由VC++向?qū)Ы⒘艘唤M文件,這些文件被放在新建文件時指定的目錄中。下圖列示了這些相關(guān)文件。1.7編程實(shí)作——VC++6.0編程簡介關(guān)于VC++的項(xiàng)目工作區(qū)文件1.7編程實(shí)作——VC++6.1.7編程實(shí)作——VC++6.0編程簡介1.7編程實(shí)作——VC++6.0編程簡介.dsp的文件是項(xiàng)目文件項(xiàng)目文件把一個應(yīng)用程序的所有文件如源程序(.cpp文件)、頭文件(.h文件)、資源文件(.rc)、程序結(jié)構(gòu)信息文件及系統(tǒng)環(huán)境配置文件等組織成一個有機(jī)的
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 成語英文翻譯
- 政府公開招標(biāo)合同實(shí)例
- 安全活動協(xié)議范本
- 服裝設(shè)計(jì)版權(quán)共享協(xié)議
- 建筑用工協(xié)議
- 2024年農(nóng)場種植土地租賃合同
- 人才招聘委托協(xié)議
- 住房抵押擔(dān)保借款合同的樣本版
- 【初中地理】《影響氣候的主要因素和氣候的影響》教學(xué)課件-2024-2025學(xué)年人教版地理七年級上冊
- 共同購房合作協(xié)議書范本
- 當(dāng)前政法機(jī)關(guān)腐敗問題的特點(diǎn)成因及對策
- 第2課-多民族的交往與中華文化的浸潤課件
- 江蘇中能硅業(yè)科技發(fā)展有限公司硅烷法多晶硅產(chǎn)能替代項(xiàng)目環(huán)評報告
- 李崇祥主編節(jié)能原理與技術(shù)
- 配電箱及開關(guān)箱隱患及整改標(biāo)準(zhǔn)
- 俱舍論原文內(nèi)容
- 《癌性惡病質(zhì)的診治》
- m301項(xiàng)目整車關(guān)鍵技術(shù)路線-性能中心
- GB/T 5237.6-2017鋁合金建筑型材第6部分:隔熱型材
- GB/T 30428.1-2013數(shù)字化城市管理信息系統(tǒng)第1部分:單元網(wǎng)格
- GB/T 1446-2005纖維增強(qiáng)塑料性能試驗(yàn)方法總則
評論
0/150
提交評論