《面向?qū)ο蠹夹g(shù)與_c--》網(wǎng)上直播1課件_第1頁
《面向?qū)ο蠹夹g(shù)與_c--》網(wǎng)上直播1課件_第2頁
《面向?qū)ο蠹夹g(shù)與_c--》網(wǎng)上直播1課件_第3頁
《面向?qū)ο蠹夹g(shù)與_c--》網(wǎng)上直播1課件_第4頁
《面向?qū)ο蠹夹g(shù)與_c--》網(wǎng)上直播1課件_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、華東師大網(wǎng)絡(luò)學(xué)院計算機專業(yè) 面向?qū)ο蠹夹g(shù)及C+網(wǎng)上直播(1)基本要求課程性質(zhì)與目的課程性質(zhì) 面向?qū)ο蠹夹g(shù)及C+課程是計算機科學(xué)與應(yīng)用專業(yè)的一門基礎(chǔ)專業(yè)課程,C+是一種高級程序設(shè)計語言,主要體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的特色。課程設(shè)置目的 該課程主要介紹應(yīng)用C+語言進行程序設(shè)計的基本原理與基本方法,通過課程學(xué)習(xí)和上機實習(xí),培養(yǎng)學(xué)員使用C+語言進行程序設(shè)計的能力和實際系統(tǒng)開發(fā)的能力,為其它課程的學(xué)習(xí)和從事應(yīng)用開發(fā)工作打下堅實基礎(chǔ),特別為進行面向?qū)ο蟮南到y(tǒng)開發(fā)和窗口程序設(shè)計打下基礎(chǔ)。教學(xué)內(nèi)容與要求 第1章 把C+看作更好的C 第2章 類和數(shù)據(jù)抽象(I)第3章 類和數(shù)據(jù)抽象(II)第4章 運算符重載 第5章

2、繼承 第6章 虛函數(shù)和多態(tài)性第7章 C+輸入/輸出流 教學(xué)要求分為:識記,理解,熟練應(yīng)用教材1. 教材C+程序設(shè)計教程中譯本 (美)H.M.Deitel, P.J.Deitel著,機械工業(yè)出版社,2000年6月第1版, ISBN 7-111-07951-5/TP.14322. 上機環(huán)境 Microsoft Visual C+ (VS2008) Microsoft Corporation參考資料lC+ How to Program (5th Edition) by H.M Deitel, P.J Deitel. Prentice Hall, Inc. 2006. ISBN 0130384747l

3、The C+ Programming Language (Special Edition) by Bjarne Stroustrup. Addison-Wesley,Reading,Mass. 2000. ISBN 0-201-70073-5 課程重點面向?qū)ο蟮闹饕攸c抽象性封裝性繼承性多態(tài)性 本課程的關(guān)鍵是要掌握這四個特性 在C+語言中的具體應(yīng)用。抽象性 數(shù)據(jù)類型的使用和數(shù)據(jù)類型的定義相互獨立。即:數(shù)據(jù)類型的使用不應(yīng)依賴于數(shù)據(jù)類型的實現(xiàn)。抽象性抽象數(shù)據(jù)類型(ADT) 數(shù)據(jù)類型的取值范圍(域) 數(shù)據(jù)類型所允許的操作類的接口(類的說明) 數(shù)據(jù)類型的具體數(shù)據(jù)表示方法的選擇 類成員函數(shù)和非成員函數(shù)的

4、原型設(shè)計類的實現(xiàn) 類成員函數(shù)和非成員函數(shù)的定義封裝性 數(shù)據(jù)類型的定義是一個相對獨立的自包含實體。數(shù)據(jù)類型的使用者只能通過數(shù)據(jù)類型的使用界面來使用數(shù)據(jù)類型。封裝性類的成員保護屬性 private 內(nèi)部數(shù)據(jù)和內(nèi)部函數(shù)的屬性 public 接口(類的使用界面) protected 給派生類訪問的屬性繼承性 新的數(shù)據(jù)類型不一定需要每次都從頭開始定義,有時可以通過對已有數(shù)據(jù)類型進行擴充來實現(xiàn)。繼承性基類和派生類 從基類定義出派生類 基類指針和派生類指針之間的關(guān)系 派生類的構(gòu)造函數(shù)向基類的構(gòu)造函數(shù)提供參數(shù)多態(tài)性 在同一個操作命令發(fā)送給不同數(shù)據(jù)類型的幾個對象時,這些不同類型的對象會進行不同的操作。即:每一種

5、對象根據(jù)自己的類型作出不同的響應(yīng)。多態(tài)性虛函數(shù)動態(tài)聯(lián)編廣義的多態(tài)性:動態(tài)多態(tài)性 + 靜態(tài)多態(tài)性 虛函數(shù) 動態(tài)多態(tài)性 函數(shù)名的重載 靜態(tài)多態(tài)性 運算符的重載 靜態(tài)多態(tài)性另一重要內(nèi)容 模板 模板不屬于面向?qū)ο笏枷氲姆懂牎?模板是作用于不同數(shù)據(jù)類型基礎(chǔ)上的一類函數(shù)或數(shù)據(jù)類型的統(tǒng)一定義。 稱為泛型程序設(shè)計。 模板函數(shù)模板類模板 模板是軟件重用的一種重要形式。課程主線 學(xué)習(xí)本課程應(yīng)緊緊抓除面向?qū)ο蠛湍0暹@兩大主線。 加強上機實踐是學(xué)好本課程的根本保證。不進行較長時間的上機實踐是不可能真正掌握本課程內(nèi)容的!各章重點第1章 把C+看作更好的C 重點熟悉C+語言相對于C語言的增強功能;認識C語言是學(xué)習(xí)C+語言

6、的基礎(chǔ)。學(xué)習(xí)本章內(nèi)容,應(yīng)注意與C語言進行比較,理解“C+語言是更好的C語言”的觀點,C+語言是如何加強數(shù)據(jù)類型安全性檢查的,理解新增功能設(shè)置的目的。第2章 類和數(shù)據(jù)抽象(一) 重點理解封裝和數(shù)據(jù)隱藏的軟件工程概念;理解數(shù)據(jù)抽象和抽象數(shù)據(jù)類型(ADT)的表示方法;學(xué)會建立C+的抽象數(shù)據(jù)類型(類);理解怎樣建立、使用和銷毀類對象;能夠控制對類的數(shù)據(jù)成員和成員函數(shù)的訪問;認識面向?qū)ο蠓椒ǖ膬r值。學(xué)習(xí)本章內(nèi)容,應(yīng)注意認識數(shù)據(jù)抽象的本質(zhì)和面向?qū)ο蠓椒ǖ膬?yōu)點,熟練掌握類說明和類實現(xiàn)的編程方法,樹立采用面向?qū)ο蟮乃枷牒头椒ㄟM行程序設(shè)計的觀點。第3章 類和數(shù)據(jù)抽象(二)重點能夠動態(tài)地建立和銷毀類對象;能夠指定

7、const對象和const成員函數(shù);理解友元函數(shù)和友元類的用途;理解怎樣使用靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù);理解this指針的用法;能夠建立和使用模板類及定義模板函數(shù)。學(xué)習(xí)本章內(nèi)容,應(yīng)注意結(jié)合上一章所介紹的內(nèi)容,通過一些示例充分認識數(shù)據(jù)抽象和抽象數(shù)據(jù)類型的本質(zhì),進一步熟練掌握類說明和類實現(xiàn)的各種編程機制,采用面向?qū)ο蟮乃枷牒头椒ㄟM行程序設(shè)計。第4章 運算符重載重點理解怎樣重定義與新類型一起使用的運算符;理解怎樣把一個類的對象轉(zhuǎn)換為另一個類的對象(即:用戶定義的類型轉(zhuǎn)換);把握重載運算符的時機;學(xué)習(xí)利用了重載運算符的的幾個類的例子。學(xué)習(xí)本章內(nèi)容,應(yīng)注意將類的運算符定義與基本類型的運算符進行比較,選擇

8、合適的運算符和合適的定義方式進行編程,理解運算符本質(zhì)上是一種函數(shù)的觀念。認識類型轉(zhuǎn)換的必要性,注意正確定義類型轉(zhuǎn)換的語意。第5章 繼承重點能通過繼承現(xiàn)有類的方法建立新類;理解繼承是如何提高軟件可重用性的;理解基類和派生類的概念;能夠用繼承方法從基類派生出新類。學(xué)習(xí)本章內(nèi)容,應(yīng)注意以軟件的可重用性這一觀點來進行思考。注意派生類對象所包含的類成員及其這些成員的可訪問性之間的區(qū)別。第6章 虛函數(shù)和多態(tài)性重點理解多態(tài)性的概念;理解怎樣聲明和使用實現(xiàn)多態(tài)性的虛函數(shù);理解抽象類和具體類的區(qū)別;學(xué)會怎樣聲明建立抽象類的純虛函數(shù);認識多態(tài)性是如何擴展和維護應(yīng)用軟件系統(tǒng)的。本章內(nèi)容是面向?qū)ο蟪绦蛟O(shè)計概念的核心內(nèi)

9、容,注意理解以虛函數(shù)為手段實現(xiàn)動態(tài)聯(lián)編的實現(xiàn)原理以及多態(tài)性在軟件工程中的重要作用。第7章 C+輸入/輸出流重點理解怎樣使用C+面向?qū)ο蟮妮斎?輸出流;能夠以格式化形式輸入和輸出;理解輸入/輸出流類的層次結(jié)構(gòu);理解怎樣輸入/輸出用戶自定義類型的對象;能夠建立用戶自定義的流操縱算子;能夠判斷輸入/輸出操作的成功或失敗。本章較詳細地介紹C+中輸入/輸出的有關(guān)內(nèi)容,要理解大多數(shù)編譯系統(tǒng)提供的流類庫的基本功能,注意輸入和輸出兩種流的區(qū)別和聯(lián)系,標(biāo)準(zhǔn)設(shè)備和文件輸入/輸出的統(tǒng)一處理,基本數(shù)據(jù)類型和自定義類型的輸入/輸出的區(qū)別和聯(lián)系等。課間休息例題講解例題 建立一個表示數(shù)組的類。建立數(shù)組類型的目的 為何要建立

10、“數(shù)組”類型? C/C+語言的內(nèi)部數(shù)組定義和使用方法存在一些較大的缺陷。內(nèi)部數(shù)組的缺陷 數(shù)組是在實際編程工作中使用十分廣泛的一種數(shù)據(jù)類型。通過C或C+語言,我們可以定義數(shù)組這種擴展的數(shù)據(jù)類型,數(shù)組實際上是一個指針。 例如: char v100 ; v0=A ; cout v99 ;內(nèi)部數(shù)組的缺陷 如果程序員小心使用的話,用數(shù)組本身所支持的操作能力來操作數(shù)組是可以接受的。但是程序員不注意數(shù)組下標(biāo)范圍的話,數(shù)組的使用會造成很大的問題,即:下標(biāo)超出范圍,有時會造成程序崩潰。 例如: char v100 ; v-1=A ; cout arrSize; char varrSize ;內(nèi)部數(shù)組的缺陷 當(dāng)把

11、一個數(shù)組傳遞給一個能處理任意大小數(shù)組的通用函數(shù)時,數(shù)組的大小也必須作為一個額外參數(shù)傳遞給函數(shù),這給函數(shù)調(diào)用者增加了不該有的負擔(dān)。 例如: void f( char a, int arrSize); char v100; f(v,100); 內(nèi)部數(shù)組的缺陷 還有,數(shù)組內(nèi)部沒有提供一些更好的操作方法,如:數(shù)組賦值、數(shù)組比較、數(shù)組整體的輸入和輸出等操作功能。 例如: char v1100,v2100; v1=v2; if (v1=v2) . cin v1; cout v2;C+的解決方案 在C+語言中,語言內(nèi)部沒有提供能克服前述問題的標(biāo)準(zhǔn)數(shù)據(jù)類型。因此,程序員需要自己定義用來加工數(shù)組的數(shù)組抽象數(shù)據(jù)類

12、型(ADT Abstract Data Type)。設(shè)計方法 因為數(shù)組是一種定制的、非標(biāo)準(zhǔn)的數(shù)據(jù)類型,有些C+編譯器本身沒有這種數(shù)據(jù)類型,所以需要程序員自己去建立這種數(shù)據(jù)類型,以擴充和豐富以后可以使用的數(shù)據(jù)類型。 設(shè)計方法 對于這種擴充的數(shù)據(jù)類型,我們在設(shè)計時,只需要考慮其對于用戶來說應(yīng)該達到的功能,不需要考慮后面實現(xiàn)的方法。設(shè)計的目標(biāo)是使這種新的數(shù)據(jù)類型可以像內(nèi)部標(biāo)準(zhǔn)數(shù)據(jù)類型一樣方便使用,從而使得這種新的數(shù)據(jù)類型不僅可供程序員自己使用,而且也可以供開發(fā)小組和其他團體使用。 設(shè)計方法 抽象數(shù)據(jù)類型的設(shè)計方法主要是設(shè)計兩方面的內(nèi)容:數(shù)據(jù)類型的取值范圍(或稱為域Domain)和允許對數(shù)據(jù)的操作(O

13、peration)。 數(shù)組的取值范圍考慮的因素是:元素類型、元素個數(shù)和元素順序。 設(shè)計方法 從理論上講,元素類型可以是任意一種數(shù)據(jù)類型,但實際上C+語言直接用類實現(xiàn)時必須確定元素類型,如果要能使用任意一種數(shù)據(jù)類型的話,必須用類模板來實現(xiàn)。這里,我們限制元素類型為int 。 即:設(shè)計一個“整數(shù)數(shù)組”類型。設(shè)計方法 數(shù)組的元素個數(shù)應(yīng)該是沒有限制的(除非受到系統(tǒng)軟硬件資源的制約),通??梢栽O(shè)計為1個以上的元素,具體大小應(yīng)該允許用戶在使用時根據(jù)其自身應(yīng)用的需要動態(tài)確定。 很顯然,數(shù)組元素是具有前后順序的。 設(shè)計方法 在確定取值范圍之后,確定允許的操作。允許的操作應(yīng)根據(jù)使用數(shù)組時的實際需要加以確定,包括

14、克服內(nèi)部數(shù)組使用時出現(xiàn)問題的一些功能,如:數(shù)組下標(biāo)檢查;增加使用靈活性的一些功能,如:動態(tài)確定數(shù)組大小;方便數(shù)組使用的一些功能,如:數(shù)組整體復(fù)制。 設(shè)計方法 根據(jù)前述設(shè)計原則,可以設(shè)計出如下的ADT描述的數(shù)據(jù)類型:ADT名稱:Array域 :不同元素個數(shù)的有不同元素值的各種組合。操作:l 下標(biāo)范圍檢查l 任意范圍的下標(biāo)表示l 數(shù)組復(fù)制l 數(shù)組比較l 數(shù)組整體輸入和輸出實現(xiàn)方法 在C+語言中,抽象數(shù)據(jù)類型是用類來實現(xiàn)的。 實現(xiàn)方法 實現(xiàn)時,首先需要根據(jù)抽象數(shù)據(jù)類型的要求,選擇合適的類內(nèi)部數(shù)據(jù)表示的方法。內(nèi)部數(shù)據(jù)表示方法可以多種多樣,一般選擇的原則是:盡量簡單、直觀、利于操作功能的實現(xiàn)、也有利于將

15、來的程序維護??梢韵攘谐鰩追N不同的數(shù)據(jù)表示方法,后對它們進行分析和比較,選擇一種合適的表示方法。對于數(shù)組來說,比較合適的方法就是在動態(tài)內(nèi)存中獲取存放數(shù)組實際元素的存貯空間,我們在數(shù)據(jù)表示時,只是記錄動態(tài)內(nèi)存的開始地址、數(shù)組的當(dāng)前大小。 實現(xiàn)方法 在選擇好數(shù)據(jù)表示之后,需要根據(jù)抽象數(shù)據(jù)類型所允許的各種操作,寫出相應(yīng)的各個函數(shù)原型,確定函數(shù)名稱、函數(shù)參數(shù)和函數(shù)的返回類型。確定函數(shù)名稱時,如果能用內(nèi)部運算符比較確切地表示函數(shù)功能的話,那么盡可能使用運算符來表示函數(shù)名稱,這樣可以方便用戶將來的使用。實現(xiàn)方法 接下來,將數(shù)據(jù)表示和函數(shù)原型組織成類說明的形式,通常寫在一個獨立的頭文件中(如下面的Array

16、.h),供類的實現(xiàn)者和類的使用者使用。這時,需要確定類中各成員的訪問屬性。一般原則是:類內(nèi)部實現(xiàn)部分使用private屬性,類接口部分使用public屬性。 實現(xiàn)方法 在定義好類說明文件之后,還需要做的工作就是使用合適的算法定義類說明文件所說明的每一個函數(shù)。通常將這些函數(shù)集中放在一個源程序文件中(如下面的Array.cpp)。注意:類的成員函數(shù)使用類名作用域限定符,而類的友元函數(shù)則不使用類名作用域限定符。 數(shù)組類Arrayarray.h是類說明的頭文件;array.cpp是類實現(xiàn)的源程序文件。 /*/ array.h 簡單的類Array(用于整數(shù))/ 成員函數(shù)在文件array.cpp中定義/*

17、#ifndef ARRAY_H#define ARRAY_H#include class Array friend ostream& operator(istream&, Array&);public:Array( int arraySize = 10 ); / 缺省構(gòu)造函數(shù)Array( const Array& ); / 拷貝構(gòu)造函數(shù)Array(); / 析構(gòu)函數(shù) array.hArray& operator=( const Array& ); / 給數(shù)組賦值int operator=(const Array& ) const;/ 比較數(shù)組的相等性int operator!=(const A

18、rray& ) const;/ 比較數(shù)組的不相等性 int& operator ( int ); / 下標(biāo)運算符private: int* ptr; / 指向數(shù)組第一個元素的指針 int size; / 數(shù)組的大小;#endifarray.h/*/ array.cpp 定義類Array的成員函數(shù)/*#include #include #include #include array.harray.cpp/ 類Array的缺省構(gòu)造函數(shù)Array:Array(int arraySize)size = arraySize; / 數(shù)組缺省大小為10ptr = new intsize; / 為數(shù)組分配內(nèi)存

19、空間assert( ptr != 0 ); / 內(nèi)存分配不成功時中止for (int i = 0 ; i size ; i+ )ptri = 0; / 對數(shù)組初始化array.cpp/ 類Array的拷貝構(gòu)造函數(shù)Array:Array( const Array& init )size = init.size; / 指定數(shù)組的大小ptr = new intsize; / 為數(shù)組分配內(nèi)存空間assert( ptr != 0 ); / 內(nèi)存分配不成功時中止for (int i = 0 ; i size ; i+ )ptri = init.ptri; / 把初始化值拷貝到對象中array.cpp/ 析

20、構(gòu)函數(shù)Array:Array()delete ptr; / 回收分配給數(shù)組的內(nèi)存空間array.cpp/ 重載下標(biāo)運算符int& Array:operator ( int subscript)/ 檢測下標(biāo)越界錯誤assert ( 0 = subscript & subscript size );return ptr subscript ; / 返回的引用可用作左值array.cpp/ 判斷兩個數(shù)組是否相等。若相等,返回1,否則返回0int Array:operator= ( const Array& right ) constif ( size != right.size ) return 0

21、; / 數(shù)組的大小不相等for ( int i = 0 ; i size ; i+ )if ( ptri != right.ptri )return 0; / 數(shù)組不相等return 1; / 數(shù)組相等array.cpp/ 判斷兩個數(shù)組是否不相等。若不相等,返回1,否則返回0int Array:operator!= ( const Array& right ) constreturn !operator=(right); array.cpp/ 重載賦值運算符 Array& Array:operator= ( const Array& right )if ( this != &right ) /

22、檢查是否是自我賦值delete ptr; / 回收內(nèi)存空間size = right.size; / 指定對象的大小ptr = new intsize; / 為數(shù)組拷貝分配內(nèi)存空間assert ( ptr != 0 ); / 內(nèi)存分配不成功時中止 for ( int i = 0 ; i ( istream& input , Array& a )for ( int i = 0 ; i a.ptri;return input; / 使得能連續(xù)執(zhí)行 cin x y;array.cpp/ 重載用于類Array的輸出運算符ostream& operator(ostream& output,const Ar

23、ray& a)for ( int i = 0 ; i a.size ; i+ )output a.ptri ;if ( ( i + 1 ) % 10 = 0 )output endl;if ( i % 10 != 0 )output endl;return output; / 使得能連續(xù)執(zhí)行 cout x y;array.cpp測試方法 在實現(xiàn)一個新的數(shù)據(jù)類型之后,我們需要確定實現(xiàn)是正確的,符合ADT設(shè)計的描述。有時,還需要確定數(shù)據(jù)類型實現(xiàn)的執(zhí)行效率是符合要求的。確定方法就是對新建數(shù)據(jù)類型進行測試,進行試用。一般需要對應(yīng)ADT描述,確定各種取值范圍內(nèi)的值是可以表示出來的,各種功能是可以正確使用

24、的。例如:對象初始化、對象賦值、對象銷毀、以及其他各種ADT規(guī)定的功能。 測試方法 以下是一個測試程序的例子: /*/ TestArray.cpp/ 測試類Array的程序/*#include #include array.hint main() / 建立兩個數(shù)組 Array integers1(7),integers2; testArray.cpp / 打印integers1的大小和內(nèi)容 cout nnSize of array integers1 is nArray after initialization: n integers1; / 打印integers2的大小和內(nèi)容 cout nnSize of array integers2 is nArray after initialization: n integers2; testArray.cpp / 輸入并打印出integers1和integers2的值 cout integers1 integers2; cout After input, the arrays contain: n integers1: integers1 integers2: integers2; / 用integers1作為初始化值建立數(shù)組integers3, / 打印出integers3的大小和內(nèi)容 Ar

溫馨提示

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

最新文檔

評論

0/150

提交評論