面向對象程序設計概述課件(模板)_第1頁
面向對象程序設計概述課件(模板)_第2頁
面向對象程序設計概述課件(模板)_第3頁
面向對象程序設計概述課件(模板)_第4頁
面向對象程序設計概述課件(模板)_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

面向對象程序設計概述學習體會

學習C++編程技術,必須了解和掌握C++制訂的各種規(guī)則,然后應用這些規(guī)則寫程序,也就容易了。這與學習開車,首先要學習交通規(guī)則,然后才能驅車上路的道理相同。但與Basic和C等語言相比,C++的規(guī)則確實多出許多,掌握它必須付出努力!然而一旦掌握了這些規(guī)則,對于學習掌握面向對象編程技術,乃至于學習JAVA,C#及VB.net之類的編程語言,也就容易多了。千里之行,始于足下!第1章面向對象程序設計概述本章主要講述:計算機程序語言的發(fā)展演變過程面向對象程序技術的基本特征面向過程與面向對象程序設計C++程序的結構及數(shù)據(jù)輸入與輸出VC++實例編程1.1 計算機程序設計語言的發(fā)展

本節(jié)主要介紹計算機語言的發(fā)展過程:機器語言→匯編語言→高級語言→面向對象程序設計語言著重了解面向過程(即結構化程序)和面向對象程序設計在程序結構、程序思想上的差別。1.1.1

機器語言機器語言最早的程序設計語言,它由計算機能夠識別的二進制指令系統(tǒng)構成。指令就是指計算機能夠識別的命令,它們是一些由0和1組合成的二進制編碼。指令系統(tǒng)計算機硬件系統(tǒng)能夠識別的所有指令的集合。1.1.2匯編語言

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

1.1.3高級語言

1.高級語言的概念及特征高級程序設計語言的出現(xiàn)是計算機科學技術發(fā)展史上的一個里程碑。高級語言屏蔽了與機器硬件相關的細節(jié),提高了語言的抽象層次,程序員可以用接近自然語言的程序語言編制軟件,然后通過編譯器轉換成機器可執(zhí)行的代碼(機器語言)。不僅大大降低了程序設計的難度,而且也使程序易被人們理解。

高級語言程序的通用性和可移植性更高與人們自然思維很接近,編程更容易、簡單“站在巨人的肩頭上”。一個函數(shù)名后面必須跟一對圓括號,函數(shù)參數(shù)可以缺省,如intmain()。intscore;//私有變量score私有的數(shù)據(jù)成員和成員函數(shù)只能被本類的成員函數(shù)所調用。學習C++編程技術,必須了解和掌握C++制訂的各種規(guī)則,然后應用這些規(guī)則寫程序,也就容易了。C++提供了許多控制數(shù)據(jù)輸出格式的函數(shù)和操縱符,這些操縱符或操縱函數(shù)是在iomanip.【例1-3】用cout輸出字符數(shù)據(jù)。在析取運算符>>后面只能出現(xiàn)變量名,下面的語句是錯誤的。局部聲明部分(在函數(shù)內(nèi)的聲明部分)。10 cin>>a>>z 23.cin>>x1>>x2>>x3;同簡單的C程序相比較,VC++程序的編譯運行需要在一個項目環(huán)境中才可行。0的“文件|新建”命令,進入VC++的“新建”對話框,如圖所示。例:cout<<“1234567812345678”<<endl;對象內(nèi)部的實現(xiàn)代碼受到封裝殼的保護,其它對象不能直接修改本對象所擁有的數(shù)據(jù)和代碼。C++還保留了C語言的注釋形式,可以用“/*……*/”對C++程序中的任何部分作注釋。inheritance4 C++與面向對象程序設計intnum;//私有變量num對象之間通過傳遞消息相互影響高級語言A=A+5機器語言0101100000101

匯編語言(助記符)如用ADD表示加法、用SUB表示減法高級語言匯編語言機器語言A=A+5addA,50100100000101加A5人的語言機器的語言1.1.3高級語言

2、結構化程序設計SP的基本內(nèi)容結構化程序設計語言是一種面向過程的程序設計語言結構的類型順序、分支、循環(huán)結構化程序設計思想利用過程或函數(shù)來抽象和模擬客觀現(xiàn)實。1.1.3高級語言

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

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

自頂向下,逐步求精——功能分解。缺點:效率低,是手工作坊式的編程。1.1.3高級語言全局變量局部變量函數(shù)A局部變量函數(shù)B只有函數(shù)A才能訪問只有函數(shù)B才能訪問可被任何函數(shù)訪問全局變量結構化程序的問題——數(shù)據(jù)與算法分離,程序數(shù)據(jù)和操作數(shù)據(jù)的過程(函數(shù))是分離的。1.1.3高級語言structPerson{ charname[10]; charaddr[20]; charphone[11];}Personp[100]; intn=0;

voidInputData(){......} voidSearchAddr(char*name){……} voidSearchPhone(char*name){……} voidPrintData(){……}Voidmain(){

…… //調用前面編寫的函數(shù),完成通信錄數(shù)據(jù)處理

……} 結構化程序的案例——個人通信錄程序存放個人信息的數(shù)據(jù)結構定義全局數(shù)據(jù)定義操作數(shù)據(jù)的函數(shù)主函數(shù)控制程序流程1.1.3高級語言由圖可見,大型程序中,函數(shù)和數(shù)據(jù)之間存在數(shù)目巨大的潛在連接關系.若全局數(shù)據(jù)有所改動,可能會導致所有訪問這個數(shù)據(jù)的全部函數(shù)的重寫.結構化程序語言將客觀世界的事物的屬性被抽象成了數(shù)據(jù),而行為則被抽象成了函數(shù)(過程),但數(shù)據(jù)和函數(shù)是分離的。描述一個事物特征的數(shù)據(jù)能夠被其他函數(shù)修改(如全局數(shù)據(jù)可被任何函數(shù)修改),這與客觀事物的本來面目不相符合,因為一個事物的屬性只有它自已才能改變。缺點:數(shù)據(jù)安全性不高,程序規(guī)模變大時,設計與維護非常困難。上述個人通信管理程序代表了結構化程序設計語言的編程方法:先定義一些全局性的數(shù)據(jù)結構,然后編寫一些過程對這些數(shù)據(jù)結構進行操作,其模型如下圖所示:全局數(shù)據(jù)全局數(shù)據(jù)全局數(shù)據(jù)函數(shù)函數(shù)函數(shù)函數(shù)1.1.4面向對象程序設計語言面向對象語言發(fā)展:20世紀60年代中期,Simula67語言——面向對象語言的鼻祖,提出了對象、類的概念,并支持類的繼承。20世紀70年代中期,Smalltalk語言——最有影響的面向對象語言之一,豐富了面向對象的概念。20世紀80年代中期后出現(xiàn)C++、VB、C#、PB、Java等多種面向對象語言1.1.4面向對象程序設計語言1、面向對象程序設計OOP觀點自然界是由各種各樣的實體(對象)所組成,每個對象都可以通過兩個方面來刻畫:描述事物狀態(tài)的數(shù)據(jù)和描述事物行為的操作,應該把它們結合成一個整體,代表一個客觀事物,這個整體就是對象。在對象中,描述事物行為的操作被抽象成了函數(shù)。由此可以看出,一個對象由數(shù)據(jù)和函數(shù)兩部分構成。數(shù)據(jù)常被稱為數(shù)據(jù)成員,函數(shù)則被稱為成員函數(shù)。一個對象的數(shù)據(jù)成員往往只能通過自身的成員函數(shù)修改。

2、程序設計方法:使用面向對象的觀點來描述模仿并處理現(xiàn)實問題。要求:高度概括、分類和抽象。3、目的:讓程序員理解和管理更大、更復雜的程序,實現(xiàn)軟件設計的產(chǎn)業(yè)化。1.1.4面向對象程序設計語言4、基本概念對象客觀存在的實體稱為對象屬性描述對象的特征的數(shù)據(jù)行為對象自身的行為,對現(xiàn)實世界某些信息的響應.對象之間通過傳遞消息相互影響屬性行為對象由屬性和行為構成將客觀事物的屬性和行為抽象成數(shù)據(jù)和操作數(shù)據(jù)的函數(shù),并把它們組合成一個不可分割的整體(即對象)的方法能夠實現(xiàn)對客觀世界的真實模擬,反映出世界的本來面目。從客觀世界中抽象出一個個對象,對象之間能夠傳遞消息,并通過特定的函數(shù)進行數(shù)據(jù)訪問,禁止以任何未經(jīng)允許的方式修改對象的數(shù)據(jù),這就是面向對象程序設計的基本模式。數(shù)據(jù)成員函數(shù)成員函數(shù)數(shù)據(jù)成員函數(shù)成員函數(shù)數(shù)據(jù)成員函數(shù)成員函數(shù)對象1對象2對象3消息消息消息5、面向對象基本模式1.1.4面向對象程序設計語言classPerson{ private:charname[10];charaddr[20];charphone[11];public:voidInitData(){……}voidSearchAddr(char*name){……}; voidSearchPhone(char*name){……}; };6、通信錄程序在C++中的類代碼形式在C++中,struct的功能被擴展為類class,在class中不僅可以定義數(shù)據(jù),還可以定義函數(shù)。數(shù)據(jù)與函數(shù)構成了一個整體。其中的private和public是訪問權限。高級語言A=A+5structPerson{圍直到再次改變精度為止。若x是int,float之類的類型,則2就是一個數(shù)字。1 cin>>ch; A ch='A'#include<iostream.對于字符常量和字符串常量,cout將把它們原樣輸出在屏幕上cin輸入流對象,C++已將其與鍵盤關聯(lián)屬性是指實體的性質和特征,在軟件中用數(shù)據(jù)來表示;7編程實作——VC++6.classPerson{但與Basic和C等語言相比,C++的規(guī)則確實多出許多,掌握它必須付出努力!cout<<17<<""<<oct<<x<<""<<18<<endl;Java:純面向對象的語言setprecision(n)23留在輸入流中等待被讀取NET已經(jīng)改變了這一切!20世紀60年代中期,Simula67語言——面向對象語言的鼻祖,提出了對象、類的概念,并支持類的繼承。voidSearchAddr(char*name){……};下面舉一個包含類(class)和對象(object)的C++程序,目的是初步了解C++是怎樣體現(xiàn)面向對象程序設計方法的。同類對象中的數(shù)據(jù),原則上只能用本類提供的方法(成員函數(shù))進行處理。1.2面向對象程序語言的特征本節(jié)主要介紹類與對象的基本概念,以及面向對象程序設計的主要特征(抽象、封裝、繼承和多態(tài))

1.2.1類與對象1.對象的基本概念對象:用來描述客觀事物的一個實體,它是構成系統(tǒng)的一個基本單元。一個對象具有一組屬性和行為。實體對象一臺計算機抽象對象一項計劃對象構成要素:1.對象標識符:是對象的名稱,用來區(qū)別與其他對象。2.屬性:是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項。3.行為:是用來描述對象動態(tài)特征和行為的一個操作函數(shù)。

對象示例1:一個“學生”對象的例子對象名:學生對象的屬性:學號:123456姓名:令狐沖年齡:18專業(yè):信管行為修改學號、姓名、專業(yè)、年齡等等1.2.1類與對象對象示例2:一個“課程”對象的例子:對象名:課程對象的屬性:課程號:123456課程名:程序設計任課教師:莫名選課要求:學時:48行為獲取并修改課程名、課程號、學時數(shù)、選課要求、任課教師等1.2.1類與對象2.類的基本概念類:是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供統(tǒng)一的抽象描述類和對象的關系:對象是類的實例。類對象 抽象定義實例類對象舉例學生學生王強課程C++程序設計類的實例——用類定義的類變量,即對象。類是對多個特性相同的對象實例的抽象,所以同一類的不同實例之間必有:相同的操作(行為)集合相同的屬性集合不同的對象名,分配有不同的存儲空間。1.2.1類與對象手機類與對象的關系1.2.1類與對象8810手機具有手機類的全部屬性和行為,是手機類的一個對象類的確定與劃分類的確定——對所遇到的對象進行分析、歸納,根據(jù)共同的特征來確定一個類。類的確定的方法:判斷是否有一個以上的實例判斷類的實例中是否有絕對的不同點類的劃分不是絕對的,可以根據(jù)不同的實際需要確定不同的類1.2.1類與對象1.2.1類與對象類的描述類的描述——不同的OOP語言用不同的描述形式。在C++中用關鍵字class來定義描述一個類。classclassname{ public: //publicmembers //friendfunctionprototypes private: //privatemembers};1.2.2抽象與封裝1、抽象抽象(abstract)是指有意忽略問題的某些細節(jié)和與當前目標無關的方面,以便把問題的本質表達得更清楚。把客觀世界的事物劃分成類的過程。抽象主要是針對實體的屬性和行為。屬性是指實體的性質和特征,在軟件中用數(shù)據(jù)來表示;而行為是指實體能夠執(zhí)行的所有動作,在軟件中用一個操作或函數(shù)來實現(xiàn)。要用軟件對象組件來描述某個物理對象的全部屬性和行為是不可能的。這就要求采用抽象的方法針對某個具體的應用(比如企業(yè)員工工資管理系統(tǒng))提取對象與具體應用相關的屬性和行為加以描述。1.2.2抽象與封裝現(xiàn)實世界企業(yè)員工抽象屬性:工作編號、姓名、基本工資、出勤率行為:設置基本工資、查詢基本工資、計算實際工資ClassCCompanyStaffprivate:iStaffNumpNamefRateOfAttendfBasicSalpublic:SetBasicSal()GetBasicSal()CalculateSal()圖:企業(yè)員工實體通過抽象用C++的類來描述缺點:效率低,是手工作坊式的編程。voidReadData(doubles[][6],intn){對象之間通過消息進行通信。一個對象的數(shù)據(jù)成員往往只能通過自身的成員函數(shù)修改。就是指計算機能夠識別的命令,它們是一些由0和1組合成的二進制編碼。classclassnamecharch2[]="HellowC++!";具有高效性、靈活性、可移植性(7)一個C++程序在VC++環(huán)境下編譯運行,必須有一組與之緊密相關的文件,這組文件包含了程序的環(huán)境設置、涉及的頭文件、資源等內(nèi)容,稱為項目文件。類將表示客觀事物屬性的數(shù)據(jù)結構,以及作用在這些數(shù)據(jù)結構上的操作函數(shù)封裝成了一個整體。對象:用來描述客觀事物的一個實體,它是構成系統(tǒng)的一個基本單元。函數(shù)重載:是指在同一作用域內(nèi)的若干個參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字。C++程序的結構及數(shù)據(jù)輸入與輸出注:設置數(shù)制基數(shù)后,它將一直有效,直到遇到下一個基數(shù)設置。cpp文件)、頭文件(.易于維護(由于數(shù)據(jù)獨立,易于發(fā)現(xiàn)問題)由一個類可以派生出任意多個派生類,這樣就形成了類的層次關系,這是現(xiàn)實世界中事物的分類問題在計算機中的解形式。(2)選擇VC++6.structPerson{Voidmain(){voidOutData(doubles[][6],intn);獲取并修改課程名、課程號、學時數(shù)、選課要求、任課教師等3 面向對象與面向過程程序設計高級語言程序的通用性和可移植性更高charch2[]="HellowC++!";應的十進制數(shù)是26)。(2)選擇VC++6.Abc78缺點:數(shù)據(jù)安全性不高,程序規(guī)模變大時,設計與維護非常困難。面向對象程序設計將數(shù)據(jù)和操作數(shù)據(jù)的程序代碼綁在一起構成對象具有更好的可維護性,因某類對象數(shù)據(jù)的改變只會引起該類對象操作代碼的改變,而與其他類型的對象無關,這就把程序代碼的修改維護局限在一個很小的范圍內(nèi)。匯編語言編程比機器語言簡單。(4)選中“新建|C++SourceFile”列表項,在“文件”編輯框中輸入源程序的名字,擴展名為.缺點:效率低,是手工作坊式的編程。在一個類中可以包括數(shù)據(jù)成員和成員函數(shù),他們可以被指定為私有的(private)和公用的(public)屬性。但與Basic和C等語言相比,C++的規(guī)則確實多出許多,掌握它必須付出努力!voidmain(){net之類的編程語言,也就容易多了。voidAveScore(doubles[][6],intn);dsw的文件是項目工作區(qū)文件(是用于組織文件、項目及項目設置的文件)。doubles[StuNum][6]; //定義保存學生成績的數(shù)組cout<<dec<<17<<""<<x<<""<<18<<endl;程序中第18~24行是主函數(shù)。1.2.2抽象與封裝2、封裝性封裝encapsulation是面向對象方法的一個重要原則。它有兩個涵義:第一個涵義是,把對象的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即對象)。第二個涵義也稱作“信息隱蔽”,即盡可能隱蔽對象的內(nèi)部細節(jié),對外形成一個邊界(或者說形成一道屏障),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。這主要是指對象的外部不能直接地存取對象的屬性,只能通過幾個允許外部使用的接口與對象發(fā)生聯(lián)系。封裝是通過類實現(xiàn)的。類將表示客觀事物屬性的數(shù)據(jù)結構,以及作用在這些數(shù)據(jù)結構上的操作函數(shù)封裝成了一個整體。封裝的形式classclassname{ public:

//publicmembers //friendfunction private:

//privatemembers};Public成員1Public成員2Public成員nPrivate一個Class定義了一種抽象的數(shù)據(jù)類型,用戶只能訪問Public成員,不能直接訪問Private成員直接訪問private是禁止的邊界封裝的特點:具有一個清楚的邊界,對象的所有私有數(shù)據(jù)、內(nèi)部程序(成員函數(shù))細節(jié)都被固定在這個邊界內(nèi)。具有一個接口,描述了對象之間的相互作用、請求和響應——消息對象內(nèi)部的實現(xiàn)代碼受到封裝殼的保護,其它對象不能直接修改本對象所擁有的數(shù)據(jù)和代碼。封裝的單位是對象。從外面看只能看到對象的外部特性,即能夠受理哪些信息,具有哪些處理能力;對象的內(nèi)部,即處理能力的實行和內(nèi)部狀態(tài),對外是不可見的。從外面不能直接修改其內(nèi)部狀態(tài),對象的內(nèi)部狀態(tài)只能由其自身改變。封裝的優(yōu)點:1.具有隱藏性和安全性(如銀行的帳戶)2.易于維護(由于數(shù)據(jù)獨立,易于發(fā)現(xiàn)問題)3.封裝將對象的使用者與設計者分開,使用者只需要通過接口訪問對象,不必須了解對象的內(nèi)部細節(jié).提高了軟件復用.封裝的缺點:需要更多的輸入輸出函數(shù)。1.2.2抽象與封裝1.2.2抽象與封裝抽象與封裝形成了程序接口與實現(xiàn)的分離函數(shù)接口將函數(shù)的實現(xiàn)隱藏起來(信息隱藏)實現(xiàn)對象行為的函數(shù)將描述對象屬性的數(shù)據(jù)封裝起來(數(shù)據(jù)封裝)1、繼承的基本概念古語:龍生龍,鳳生鳳,老鼠生兒會打洞繼承:是對象類之間的相互關系,使得某類對象可以繼承另外一類對象的特征和功能。如果一個類A繼承了另外一個類B,則稱類A為派生類(子類),稱類B為基類(超類或父類)。派生類從它的基類中繼承所有的特征(遺傳),然后又添加自己的新特征(變異)。作為對客觀世界分層特性的一種自然描述,繼承可以讓程序員充分利用已有的類去派生新類,在更大程度上實現(xiàn)代碼的重用。1.2.3繼承2、繼承分類單繼承(一個派生類只有一個基類)、多繼承(一個派生類有多個基類)3、類的層次由一個類可以派生出任意多個派生類,這樣就形成了類的層次關系,這是現(xiàn)實世界中事物的分類問題在計算機中的解形式。1.2.3繼承4、繼承的層次結構思考: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繼承5、繼承與封裝的關系封裝是指對象的封裝,在對象中數(shù)據(jù)和操作總是包裹在一起的,繼承不會影響對象的這種封裝性,但無限制的派生繼承會在一定程度上損害對象中數(shù)據(jù)的隱蔽性。1.2.3繼承6、繼承的優(yōu)勢能清晰體現(xiàn)相關類間的層次結構關系。繼承能夠減少代碼和數(shù)據(jù)的重復冗余度,增強程序的重用性。增強了程序的一致性,減少了程序模塊間的接口和界面,使程序更易維護。繼承是自動傳播程序代碼的有力工具。繼承是一種在普通類的基礎上構造、建立和擴展新類的最有效手段。繼承具有傳遞性 如果類C繼承類B,類B繼承類A,則類C繼承類A“站在巨人的肩頭上”。用戶在開發(fā)新系統(tǒng)時不必從零開始,可以繼承原有相似功能或者從類庫中選取需要的類,再派生新類。1.2.3繼承例1:車輛的繼承關系車輛非機動車客車卡車轎車機動車例1:人類按職業(yè)劃分的一種繼承關系人學生工人教師農(nóng)民中學生大學生研究生講師教授1.2.3繼承7、兩個繼承的案例1、多態(tài)polymorphism對象根據(jù)所接受的消息而做出動作,同樣的消息被不同的對象接受時可導致完全不同的行動,該現(xiàn)象稱為多態(tài)性。多態(tài)與繼承密切相關,通過繼承產(chǎn)生的不同類,它們的對象可以對同一函數(shù)調用做出不同的響應,執(zhí)行不同的操作,實現(xiàn)不同的功能,這就是多態(tài)。簡單的說:單接口,多實現(xiàn)(即不同對象針對同一種操作會表現(xiàn)出不同的行為。)作用:減輕程序員負擔降低程序員出錯機率1.2.4

多態(tài)多態(tài)的一個案例圖中同名函數(shù)area()作用在Circle、Triangle等不同類上時,將執(zhí)行不同的操作,這就是多態(tài)。1.2.4

多態(tài)2、多態(tài)性的實現(xiàn)運行時多態(tài)性:虛函數(shù)編譯時多態(tài)性:重載重載函數(shù)重載:是指在同一作用域內(nèi)的若干個參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字。運算符重載:是指同一個運算符可以施加于不同類型的操作數(shù)上面。優(yōu)點:重載進一步提高了面向對象系統(tǒng)的靈活性和可讀性1.2.4

多態(tài)1、面向過程程序設計的基本特點方法:自頂向下,逐步求精,模塊化按層次組織模塊。每一模塊只有一個入口,一個出口。代碼和數(shù)據(jù)分離,即程序=數(shù)據(jù)結構+算法。

1.3 面向對象與面向過程程序設計C++是由AT&TBell(貝爾)實驗室的BjarneStroustrup博士及其同事于20世紀80年代初在C語言的基礎上引入了類的概念,并將數(shù)據(jù)抽象和面向對象等思想加進了C語言,對C語言進行了擴展和創(chuàng)新。cout<<dec<<17<<""<<x<<""<<18<<endl;2 a=23,ch='B',Z=3.4536<<endl;cin>>12>>x; //錯誤,>>后面含有常數(shù)12voidSearchAddr(char*name){……}重點放在如何實現(xiàn)細節(jié)過程方面,將數(shù)據(jù)與函數(shù)(過程)分開。cout<<17<<""<<oct<<x<<""<<18<<endl;形式:主模塊+若干個子模塊

(如C:main()+子函數(shù))。stud2.};//類的聲明結束5、C++程序的構成和書寫形式charch2[]="HellowC++!";cout<<17<<""<<oct<<x<<""<<18<<endl;它有兩個涵義:第一個涵義是,把對象的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即對象)。C++提供了許多控制數(shù)據(jù)輸出格式的函數(shù)和操縱符,這些操縱符或操縱函數(shù)是在iomanip.h中定義的,應該在引用它們的程序中包含該頭文件.語句 輸入 內(nèi)存變量的值由若干個執(zhí)行語句組成,用來進行有關的操作,以實現(xiàn)函數(shù)的功能。加A5net之類的編程語言,也就容易多了。cin>>x;2、面向對象程序設計它將數(shù)據(jù)和操作數(shù)據(jù)的過程(函數(shù))綁在一起,形成一個相互依存、不可分離的整體(即對象),從同類對象中抽象出共性,形成類。同類對象中的數(shù)據(jù),原則上只能用本類提供的方法(成員函數(shù))進行處理。類通過封裝將接口與實現(xiàn)分離開來,通過接口與外界聯(lián)系。對象之間通過消息進行通信。1.3 面向對象與面向過程程序設計3、兩種程序方法的對比1.3 面向對象與面向過程程序設計面向對象程序設計將數(shù)據(jù)和操作數(shù)據(jù)的程序代碼綁在一起構成對象具有更好的可維護性,因某類對象數(shù)據(jù)的改變只會引起該類對象操作代碼的改變,而與其他類型的對象無關,這就把程序代碼的修改維護局限在一個很小的范圍內(nèi)。1.4 C++與面向對象程序設計1、面向對象程序設計語言的基本情況最早最成熟的領域萌芽于60年代(Simula),成熟于80年代70年代,純面向對象語言,smalltalk常見面向對象的語言Java:純面向對象的語言VB.Net:可視化程序設計早期的VB或許算不上真正的面向對象程序設計語言,不具備面向對象程序的一些特征,但VB.NET已經(jīng)改變了這一切!C#:具有VB和VC++的特征C++其它常用的具有面向對象特征的語言BorlandDelphi、PowerBuilder、VisualFoxPro……1.4 C++與面向對象程序設計2、C++簡史C++是由AT&TBell(貝爾)實驗室的BjarneStroustrup博士及其同事于20世紀80年代初在C語言的基礎上引入了類的概念,并將數(shù)據(jù)抽象和面向對象等思想加進了C語言,對C語言進行了擴展和創(chuàng)新。稱為“帶類的C”。到1983年,“帶類的C”正式改名為C++。C++是由C發(fā)展而來的,與C兼容。用C語言寫的程序基本上可以不加修改地用于C++。從C++的名字可以看出它是C的超集。C++既可用于面向過程的結構化程序設計,又可用于面向對象的程序設計,是一種功能強大的混合型的程序設計語言。3、C++常用領域系統(tǒng)軟件設備驅動程序圖形學用戶界面……1.4 C++與面向對象程序設計4、C++特征兼容C語言,支持面向過程的程序設計具有高效性、靈活性、可移植性豐富的數(shù)據(jù)類型支持面向對象程序設計5、常見C++編譯系統(tǒng)C++BuilderVC++VC++.net1.5C++程序的結構1、C++程序的構成聲明部分主函數(shù)部分函數(shù)定義2、C++程序文件頭文件:.h源文件:.cpp3、程序結構的例程如下1.5C++程序的結構1.5C++程序的結構對例程的補充:C++的注釋///*……*/C++的函數(shù)需要先聲明,然后才能調用下面舉一個包含類(class)和對象(object)的C++程序,目的是初步了解C++是怎樣體現(xiàn)面向對象程序設計方法的。例:實現(xiàn)學生學號,成績的輸入與顯示功能.#include<iostream.h>//預處理命令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的值};//類的聲明結束Studentstud1,stud2;//定義stud1和stud2為Student類的變量,稱為對象intmain()//主函數(shù)首部{stud1.setdata();//調用對象stud1的setdata函數(shù)

stud2.setdata();//調用對象stud2的setdata函數(shù)

stud1.display();//調用對象stud1的display函數(shù)

stud2.display();//調用對象stud2的display函數(shù)return0;}具有“類”類型特征的變量稱為“對象”(object)。程序中第18~24行是主函數(shù)。程序運行情況如下:100198.5↙(輸入學生1的學號和成績)100276.5↙(輸入學生2的學號和成績)num=1001(輸出學生1的學號)score=98.5(輸出學生1的成績)num=1002(輸出學生2的學號)score=76.5(輸出學生2的成績)4、C++程序運行步驟C++程序的結構和書寫格式歸納如下:

(1)一個C++程序可以由一個程序單位或多個程序單位構成。每一個程序單位作為一個文件。在程序編譯時,編譯系統(tǒng)分別對各個文件進行編譯,因此,一個文件是一個編譯單元。(2)在一個程序單位中,可以包括以下幾個部分:①預處理命令。上節(jié)4個程序中都包括#include命令。②全局聲明部分(在函數(shù)外的聲明部分)。在這部分中包括對用戶自己定義的數(shù)據(jù)類型的聲明和程序中所用到的變量的定義。③函數(shù)。函數(shù)是實現(xiàn)操作的部分,因此函數(shù)是程序中必須有的和最基本的組成部分。每一個程序必須包括一個或多個函數(shù),其中必須有一個(而且只能有一個)主函數(shù)(main函數(shù))。但是并不要求每一個程序文件都必須具有以上3個部分,可以缺少某些部分(包括函數(shù))。5、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í)行語句組成,用來進行有關的操作,以實現(xiàn)函數(shù)的功能。5、C++程序的構成和書寫形式(4)語句包括兩類。一類是聲明語句,另一類是執(zhí)行語句。C++對每一種語句賦予一種特定的功能。語句是實現(xiàn)操作的基本成分,顯然,沒有語句的函數(shù)是沒有意義的。C++語句必須以分號結束。(5)一個C++程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個程序中的位置如何。(6)類(class)是C++新增加的重要的數(shù)據(jù)類型,是C++對C的最重要的發(fā)展。有了類,就可以實現(xiàn)面向對象程序設計方法中的封裝、信息隱蔽、繼承、派生、多態(tài)等功能。在一個類中可以包括數(shù)據(jù)成員和成員函數(shù),他們可以被指定為私有的(private)和公用的(public)屬性。私有的數(shù)據(jù)成員和成員函數(shù)只能被本類的成員函數(shù)所調用。5、C++程序的構成和書寫形式(7)C++程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句可以分寫在多行上。C++程序沒有行號,也不像FORTRAN或COBOL那樣嚴格規(guī)定書寫格式(語句必須從某一列開始書寫)。(8)一個好的、有使用價值的源程序都應當加上必要的注釋,以增加程序的可讀性。C++還保留了C語言的注釋形式,可以用“/*……*/”對C++程序中的任何部分作注釋。在“/*”和“*/”之間的全部內(nèi)容作為注釋。用“//”作注釋時,有效范圍只有一行,即本行有效,不能跨行。而用“/*……*/”作注釋時有效范圍為多行。只要在開始處有一個“/*”,在最后一行結束處有一個“*/”即可。因此,一般習慣是:內(nèi)容較少的簡單注釋常用“//”,內(nèi)容較長的常用“/*……*/”。5、C++程序的構成和書寫形式1.6數(shù)據(jù)的輸入與輸出本節(jié)主要介紹C++程序中數(shù)據(jù)輸入輸出的方法,是C++程序設計的基礎。應該掌握流的概念iostream.hcincoutendl1.6.1流的概念1、C及C++中的流概念I/O(input/output,輸入/輸出)數(shù)據(jù)是一些從源設備到目標設備的字節(jié)序列,稱為字節(jié)流。除了圖像、聲音數(shù)據(jù)外,字節(jié)流通常代表的都是字符,因此在多數(shù)情況下的流(stream)是從源設備到目標設備的字符序列,A8bctyx1234源設備目標設備字符序列從源設備連續(xù)不斷地流向目標設備,最后按先流出先到達的有序方式匯聚在目標設備中,如同河流一樣,故此叫流。1.6.1流的概念輸入流輸入流(inputstream)是指從輸入設備流向內(nèi)存的字節(jié)序列。輸出流輸出流(outputstream)是指從內(nèi)存流向輸出設備的字節(jié)序列。C++中的輸入輸出流iostream.hcin輸入流對象,C++已將其與鍵盤關聯(lián)cout輸出流對象,C++已將其與顯示器關聯(lián)1.6.2cin和析取運算符>>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和析取運算符>>3、用cin時的注意事項在一條cin語句中同時為多個變量輸入數(shù)據(jù)。在輸入數(shù)據(jù)的個數(shù)應當與cin語句中變量個數(shù)相同,各輸入數(shù)據(jù)之間用一個或多個空白(包括空格、回車、Tab)作為間隔符,全部數(shù)據(jù)輸入完成后,按Enter鍵結束。

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

輸出:1234567812345678利用它可以輸入、編輯源程序,進行程序的編譯、調試、鏈接,最后生成可執(zhí)行的命令程序。例1:人類按職業(yè)劃分的一種繼承關系stud2.對象示例1:一個“學生”對象的例子對象標識符:是對象的名稱,用來區(qū)別與其他對象。intnum;//私有變量num語句是實現(xiàn)操作的基本成分,顯然,沒有語句的函數(shù)是沒有意義的。11 cin>>a>>ch 132 a=132,計算機等待輸入ch的值作為對客觀世界分層特性的一種自然描述,繼承可以讓程序員充分利用已有的類去派生新類,在更大程度上實現(xiàn)代碼的重用。cpp文件)、頭文件(.數(shù)值型常量數(shù)據(jù)和數(shù)值變量可以利用cout直接輸出,但在連續(xù)輸入多個net之類的編程語言,也就容易多了。//下面的cout語句在屏幕上輸出科目名稱在這部分中包括對用戶自己定義的數(shù)據(jù)類型的聲明和程序中所用到的變量的定義。intnum;//私有變量num12900誰知道這是個什么數(shù)據(jù)呢?不僅大大降低了程序設計的難度,而且也使程序易被人們理解。cout<<ch1;7編程實作——VC++6.4A”并按Enter鍵,cout<<"x1="<<x1<<""<<"x2="<<x2<<""<<"x3="<<x3;1.6.2cin和析取運算符>>數(shù)值型數(shù)據(jù)的輸入在讀取數(shù)值型數(shù)據(jù)時,析取運算符>>首先略掉數(shù)據(jù)前面的所有空白符號,如果遇到正、負號或數(shù)字,就開始讀入,包括浮點型數(shù)據(jù)的小數(shù)點,并在遇到空白符或其他非數(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和析取運算符>>輸入數(shù)值型數(shù)據(jù)時,還要注意不同進制數(shù)據(jù)的輸入方法十進制整數(shù),直接輸入數(shù)據(jù)本身,如78。十六進制整數(shù),在要輸入的數(shù)據(jù)前加0x或0X,如0x1A(對應的十進制數(shù)是26)。八進制整數(shù),在輸入的數(shù)據(jù)前加0,如043(代表十進制數(shù)的35)例:intx;cin>>x;cout<<“x=”<<x<<endl;假如輸入“0x1A”回車,則顯示結果為26(系統(tǒng)自動按十進制結果顯示)1.6.2cin和析取運算符>>4、輸入數(shù)據(jù)案例分析【例1-2】假設有變量定義語句如下: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,計算機等待輸入ch的值12 cin>>ch>>a 132 ch='1',a=321.6.3cout和插入運算符<<cout的用途cout(讀作see-out)是一個輸出流對象,已被C++默認關聯(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和插入運算符<<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!";}1.6.3cout和插入運算符<<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和插入運算符<<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和插入運算符<<4、輸入數(shù)據(jù)類型數(shù)據(jù)數(shù)值型常量數(shù)據(jù)和數(shù)值變量可以利用cout直接輸出,但在連續(xù)輸入多個數(shù)據(jù)時,應注意在數(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;結果為:x1=23x2=34.1x3=67.129001.6.4輸出格式控制符在程序運行過程中,常常需要按照一定的格式輸出其運行結果,數(shù)據(jù)輸出格式的設置是程序設計的一個重要內(nèi)容,影響到程序結果的清晰性.C++提供了許多控制數(shù)據(jù)輸出格式的函數(shù)和操縱符,這些操縱符或操縱函數(shù)是在iomanip.h或iostream.h中定義的.本節(jié)介紹的setprecision,setw,left,right都是在iomanip.h中定義的,應該在引用它們的程序中包含該頭文件.1.6.4輸出格式控制符1、數(shù)制基數(shù)hex:16進制,oct:8進制,dec:10進制【例1-5】輸出不同進制的數(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ù)設置。1.6.3cout和插入運算符<<2、其它輸出格式控制符設置浮點數(shù)的精度

setprecision(n)其中,n代表有效數(shù)位,包括整數(shù)的位數(shù)和小數(shù)的位數(shù)。有效范圍直到再次改變精度為止。例:Cout<<setprecision(3)<<3.1415926<<“

”<<2.4536<<endl;輸出為:3.142.452、其它輸出格式控制符設置輸出域寬和對齊方式setw(n)

其中,n是輸出數(shù)據(jù)占用屏幕寬度的字符個數(shù),在默認情況下,輸出數(shù)據(jù)按右對齊。若輸出數(shù)據(jù)的位數(shù)比n小,則左邊留空。若輸出數(shù)據(jù)的實際位數(shù)比n大,則輸出數(shù)據(jù)將自動擴展到所需占用的列數(shù)。注:setw()只對緊隨其后的一個輸出數(shù)據(jù)有效.例:cout<<“1234567812345678”<<endl;cout<<setw(8)<<23.27<<setw(8)<<78<<endl;cout<<setw(8)<<“Abc”<<78<<endl;輸出:123456781234567823.2778Abc782、其它輸出格式控制符設置對齊方式Setiosflags(longf);resetiosflags(longf);這兩個操縱函數(shù)用于設置或取消輸入/輸出數(shù)據(jù)的各種格式.其中表示左對齊的常數(shù)值是ios::left,表示右對齊的常數(shù)值是ios::right.這兩個常數(shù)可作為以上兩個操縱符的參數(shù),用于設置輸出數(shù)據(jù)的對齊方式.當用setiosflags()設置輸出對齊方式成功后,將一直有效,直到用resetiosflags()取消它.1.6.3cout和插入運算符<<【例1-6】用setiosflags和

resetiosflags設置

和取消輸出數(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.7編程實作——VC++6.0編程簡介本節(jié)主要以案例方式介紹VC++的編程環(huán)境,及在VC++6.0環(huán)境下設計C++程序的過程。本節(jié)介紹的是一種基于控制臺的VC++程序設計方式,是一種非常簡略的方式1.7編程實作——VC++6.0編程簡介1、關于C++編譯器支持C++程序設計的編譯程序很多,常見的有TurboC++、BorlandC++和VisualC++等。VisualC++是微軟公司的產(chǎn)品,簡稱VC++。VC++6.0是微軟公司1998年推出的基于Windows的集成開發(fā)環(huán)境,它提供了編寫程序源代碼的編輯器,創(chuàng)建各類資源文件(如對話框、圖標、菜單等)的資源編輯器,具有編輯、編譯、鏈接等功能。利用它可以輸入、編輯源程序,進行程序的編譯、調試、鏈接,最后生成可執(zhí)行的命令程序。1.7編程實作——VC++6.0編程簡介2、例題描述【例1-7】某次考試成績?nèi)缦拢帉懗绦蛴嬎忝课煌瑢W的平均分。要求成績從鍵盤輸入,程序輸出結果的形式與下面相同,但要輸出每位同學的平均分。

語文數(shù)學政治化學英語平均分學生16776878976

溫馨提示

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

評論

0/150

提交評論