




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、參考書o 殷人昆. 數據結構(第2版). 清華大學出版社, 2007o 宋力杰. 測量平差程序設計. 國防工業出版社, 2009o C+ Primer(第3/4版)o 曹德欣, 曹纓珞. 計算方法(第二版).中國礦業大學出版社, 2001(數值分析類書均可以選擇參考?。﹐ 嚴蔚敏, 吳偉民. 數據結構. 清華大學出版社. 2011o 吳立新, 史文中. 地理信息系統原理與算法. 科學出版社, 2003課程設置的目的與任務o 了解測繪行業軟件發展的最新動態,認識軟件危機產生的基本原因及其克服軟件危機的基本思路與方法;o 掌握測繪數據管理常用的數據結構;o 初步了解并熟練掌握測繪軟件開發過程中所涉
2、及的基本數值計算方法;o 初步了解軟件工程的基本思想,熟悉生命周期法在測繪軟件設計與開發過程中各個階段的基本職能;o 掌握不同類型的典型測繪軟件設計方法,初步具備編寫測繪軟件常用算法的能力以及開發中小規模測繪專業軟件的能力。先修課程o C/C+程序設計(數據結構)o 線性代數,高等數學(計算方法/數值分析)o 誤差理論與測量平差(算法設計模型)內容劃分及學時安排(32學時)o 第一部分:概述(2學時)o 第二部分:數據結構(16學時)o 泛型程序設計與STL(2學時)o 第三部分:數值分析/計算方法(10學時)o 第四部分:實例(2學時)第一部分 概述 o 主講教師:王永波o o 中國礦業大學
3、環境與測繪學院o 2021年5月2日提綱o 結構化程序設計與面向對向的程序設計o 結構體變量類型與類o 面向對象的概念o C+的部分功能一、結構化程序設計與面向對向的程序設計1、面向過程與面向對象 81、面向過程與面向對象o 結構化(面向過程的)方法o 工具:C、Pascalo 缺點:對象和操作相分離o 面向對象的方法o 工具:C#,Javao C+兼有面向過程和面向對象的特點2、結構化方法的特點o 結構化(面向過程的)方法o 著眼于系統要實現的功能o 從系統的輸入、輸出為出發點,確定系統的模塊結構o 自頂向下,逐步進行功能分解(功能模塊)o 缺點:對象和操作相分離,系統維護工作量大3、面向對
4、象方法的特點o 面向對象的方法o 著眼于解決問題所涉及的對象及其對象間的關系o 確定對象間的層次結構(繼承關系+通信機制)o 優點:易于維護二、結構體變量類型與類1、結構體變量類型o 類型定義o struct Studento ostring ID;ostring name;oint age;obool male;oo ; 13o 變量定義o Student stu;o Student stuArray141;o 變量存取o stu.ID = 0000001;o = Wang;o stu.age = 18;o stu.male = true;o stuArray0.ID =
5、000001;o o 2、結構體變量類型的特點o 結構體變量類型對于屬性數據的訪問不設任何權限,誰都可以訪問o 可在結構體變量類型中定義函數,用于實現某一特定功能o 結構體變量類型其實質是一種特殊形式的類o 在結構體變量類型的基礎上,通過對成員變量與成員函數的訪問權限進行限制,即可得到類的定義 143、類o 類的定義o class Studento o public:ostring ID;ostring name;oint age;obool male;oo ; 15o 類的實例化(對象定義)o Student stu;o Student stuArray141;o 對象屬性存取o stu.I
6、D = “0000001”;o = “Wang”;o stu.age = 18;o stu.male = true;o stuArray0.ID = “000001”;o o 4、對象及其與類的關系o 對象o 在應用問題中出現的各種實體、事件、規格說明等o 由一組屬性值和在這組值上的一組服務(或稱操作)構成,即融合了數據及數據上的操作行為的統一的軟件構件o 注意:程序中任何元素都是對象o 復雜對象由比較簡單的對象組合而成 164、對象及其與類的關系o 類 (class),實例 (instance)o 具有相同屬性和服務(操作)的對象歸于同一類o 每個類都定義了一組數據和一組操
7、作,類是對具有相同數據和相同操作的一組相似對象的定義o 屬性:用于表達對象的狀態信息(靜態)o 服務:施加于屬性之上,用于實現對象行為的(動態)操作o 類的實例化結果為對象(變量定義) 174.1 四邊形類與對象 18屬性值屬性值quadrilateral1(35, 10) (50, 10)(35, 25) (50, 25)Draw( )move(x, y)contains(aPoint)服務服務屬性值屬性值quadrilateral2(45, 65) (50, 45)(65, 66) (60, 70)Draw( )move(x, y)contains(aPoint)服務服務屬性屬性aPoin
8、t1 aPoint2aPoint3 aPoint4服務服務Draw( )move(x, y)contains(aPoint)quadrilateral5、類的定義與實現class Personpublic:/ 構造、析構函數 Person() :_name(“”)/ 構造函數 , _age(0), _height(0.0f) / 自定義構造函數 Person() ; / 析構函數(動態分配內存的釋放,如動態數組)public:/ 復制構造函數與賦值運算符 Person(const Person& n);/ 復制構造函數 Person& operator=(const Perso
9、n& n);/ 賦值運算符 / 其它運算符+,-,*,/ 等public:/ 運算符 friend ostream& operator(ostream& os, Person& s);5、類的定義與實現public: / 屬性/ 年齡的存取void setAge();const int getAge() const;/ 名字的存取void setName(string name);const string getName() const;private: / 成員變量string _name;/ 姓名int _age;/ 年齡float _height;/ 身高
10、;5、類的定義與實現o 復制構造函數o Person:Person(const Person& n)o o_name = n.getName();o_age = n.getAge();o_height = n.getHeight();o o 賦值運算符o Person& Person:operator=(const Person& n)o oif (this = &n) / Judging if the two objects are the sameoreturn *this;o_name = n.getName();o_age = n.getAge();o_
11、height = n.getHeight();o 6、類的實例化o int main()o oPerson p1;op1.setName(“Wang”);p1.setAge(20);ooPerson p2;op2.setName(“Li”);p2.setAge(20);o oPerson p3(p1);o 22三、面向對象的概念1、面向對象的概念對象類繼承性與封裝性通信2、繼承o 按照父類與子類的關系,把若干個相關類組成一個層次結構的系統o 子類自動擁有上層基類中的數據和操作,這種現象稱為繼承o 特性:o 從父類繼承來的屬性和操作是一樣的o 此外,子類可以有各自的屬性和操作2.1 實例一 26
12、Draw( )move(x, y)contains(aPoint)PolygonReference PointVerticesPolygon 類類Reference PointVerticesDraw( )move(x, y)contains(aPoint)Polygon的子類的子類Quadrilateral類類Quadrilateral2.2 實例二class Baseprivate: int b_num;public: Base( ) Base(int i) : b_num (i) int get_num( ) return b_num; void print( ) cout b_num;
13、 cout endl; ; 27class Derived : public Base private: int d_num;public: Derived( int i, int j ) :Base(i), d_num(j) void print( ) cout get_num() ; cout d_num endl; ;2.2 實例二int main( ) Base a(2); Derived b(3, 4); cout a is ; / print( ) in Base a.print( ); cout b is ; / print( ) in Derived b.print( ); c
14、out base part of b is ; / print( ) in Base b.Base:print( ); return 0; 28程序運行結果輸出:a is 2b is 3 4base part of b is 33、封裝o 對象與傳統數據有本質區別o 傳統數據是被動地等待外界對它施加操作o 對象是數據處理的主體o 對象的所有信息都被封裝在該對象內,不能從外界直接訪問,這就是通常所說的封裝性3.1 封裝的實質與目的o 實質o 隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀取和修改的訪問級別o 目的o 增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過
15、外部接口,以特定的訪問權限來使用類的成員 303.2 封裝的實現機制o 實現的機制o 通過public, protected, private等三個關鍵字來對類中成員變量、屬性與成員函數的權限進行管理opublic: 公有oprotected: 保護oprivate: 私有o 通過分配統一的接口(函數)來實現對實例化對象操作的統一管理o如:如何給對象賦于某屬性?3.3 實例(正確) 32o 類的定義o class Studento o public:ostring ID;ostring name;oint age;obool male;oo ;o 類的實例化(對象定義)o Student st
16、u;o Student stuArray141;o 對象屬性存取o stu.ID = “0000001”;o = “Wang”;o stu.age = 18;o stu.male = true;o stuArray0.ID = “000001”;o o 3.3 實例(錯誤) 33o 類的定義o class Studento o private:ostring ID;ostring name;oint age;obool male;oo ;o 類的實例化(對象定義)o Student stu;o Student stuArray141;o 對象屬性存取o stu.ID = “0
17、000001”;o = “Wang”;o stu.age = 18;o stu.male = true;o stuArray0.ID = “000001”;o o 3.3 實例(修改) 34o 類的定義o class Studento o private:ostring ID;ostring name;oint age;obool male;oo ;public: void setID(string id); string getID(); void setName(string name); string getName(); void setAge(int age); i
18、nt getAge(); void setMale(bool is); bool getMale(); 3.3 實例(修改) 35o 類的實例化(對象定義)o Student stu;o Student stuArray141;o 對象屬性存取o stu.setID(“0000001”);o stu.setName(“Wang”);o stu.setAge(18);o stu.setMale(true);o stuArray0.setID(“000001”);o o 4、通信o 消息傳遞o /一直等待消息,直到有消息觸發時o while (GetMessage(&msg, NULL,
19、0, 0)o oTranslateMessage(&msg); /翻譯信息ooDiapatchMessage(&msg); /分配信息到對應窗口o 36三、C+的部分功能1、動態存儲與分配動態數組o new函數:負責分配空間o 定義大小為100的一維動態數組odouble *xArray;oxArray = new double100;o 定義大小為100*50的二維動態數組odouble *yArray;oyArray = new double*100;ofor (int i = 0; i 50; i+)o yArrayi = new double 50; 381、動態存儲與
20、分配動態數組o delete函數:負責釋放動態分配的空間o 釋放定義的大小為100的一維動態數組odelete xArray;o 釋放定義的大小為100*50的二維動態數組ofor (int i = 0; i (istream& is, Point& p);o friend ostream& operator(ostream& os, Point& p); 403、模板o 所謂模板是一種使用無類型參數來產生一系列函數或類的機制。o 若一個程序的功能是對某種特定的數據類型進行處理,則可以將所處理的數據類型說明為參數,以便在其他數據類型的情況下使用,這就是模
21、板的由來。o 模板是以一種完全通用的方法來設計函數或類而不必預先說明將被使用的每個對象的類型。o 通過模板可以產生類或函數的集合,使它們操作不同的數據類型,從而避免需要為每一種數據類型產生一個單獨的類或函數。 41引例模版o 設計一個求兩參數最大值的函數o int max(int a , int b) return (a b)?a, b; o long max(long a , long b) return ( a b ) ? a , b ;o double max(double a, double b) return (a b)?a, b; o char max (char a , char
22、 b) return (a b)?a, b;o 這些函數幾乎相同,唯一的區別就是形參類型不同o 需要事先知道有哪些類型會使用這些函數,對于未知類型這些函數不起作用3.1 模板分類o 函數模板(function template)o 是獨立于類型的函數o 可產生函數的特定版本o 類模板(class template)o 跟類相關的模板,如vectoro 可產生類對特定類型的版本,如vector3.2 求最大值函數模板實現o 求兩個數最大值,使用模板otemplate oT max(T a , T b)oreturn (a b) ? a , b;oo template o (模板函數形參表)oo
23、/函數定義體o3.3 模板函數工作方式o 函數模板只是說明,不能直接執行,需要實例化為模板函數后才能執行o 在說明了一個函數模板后,當編譯系統發現有一個對應的函數調用時,將根據實參中的類型來確認是否匹配函數模板中對應的形參,然后生成一個重載函數。該重載函數的定義體與函數模板的函數定義體相同,它稱之為模板函數3.4 模板函數實例o 編寫一個對具有n個元素的數組a 求最小值的程序,要求將求最小值的函數設計成函數模板#include using namespace std;template T min(T a,int n)int i;T minv=a0;for( i = 1;i ai) minv=a
24、i;return minv;void main() int a=1,3,0,2,7,6,4,5,2; double b=1.2,-3.4,6.8,9,8; cout”a數組的最小值為:數組的最小值為:” min(a,9) endl; cout”b數組的最小值為:數組的最小值為:” min(b,4)endl; 此程序的運行結果為:此程序的運行結果為:a數組的最小值為:數組的最小值為:0b數組的最小值為:數組的最小值為:-3.43.5 模板函數優缺點o 函數模板方法克服了C語言解決上述問題時用大量不同函數名表示相似功能的壞習慣o 克服了宏定義不能進行參數類型檢查的弊端o 克服了C+函數重載用相同函數名字重寫幾個函數的繁瑣o 缺點,調試比較困難o 一般先寫一個特殊版本的函數o 運行正確后,改成模板函數3.6 類模板棧的定義o template o class Stack o private:oint top; / 棧頂指針棧頂指針oType *elements; / 棧元素數組棧元素數組oint maxSize; / 棧最大容量棧最大容量o public:oStack ( int = 10 ); / 構造函數構造函數oStack ( ) d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公路客運行業轉型升級與多元化發展智慧城市建設研究報告
- 種草經濟對電商平臺用戶粘性影響研究報告
- 游戲化教育在2025年中小學德育教學中的應用策略研究報告
- 咨詢工程師培訓課件下載
- 2025年醫藥企業研發外包(CRO)模式疫苗研發與生產報告
- 基于深度學習的智能客服情感分析技術研究報告2025
- 教育大數據助力2025年教育改革與創新決策研究報告
- 保險題庫及答案2017
- 寶潔考試試題及答案
- 濕地公園消防培訓課件
- 2025至2030中國智能物流行業發展趨勢分析與未來投資戰略咨詢研究報告
- 病歷書寫規范與管理制度
- 國家開放大學《中國法律史》期末機考題庫
- 【MOOC】國際商務-暨南大學 中國大學慕課MOOC答案
- 國家開放大學本科《古代小說戲曲專題》形考任務1-4試題及答案
- 2024年北京大學強基計劃物理試題(附答案)
- (正式版)JBT 14449-2024 起重機械焊接工藝評定
- 車輛交通事故應急預案演練評估方案表
- DB37T 4309-2021 礦床三維地質建模規范
- 第十章-甲醇制烯烴技術課件
- 產品可追溯性模擬演練記錄
評論
0/150
提交評論