版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本文由 jmt2021131316 奉獻ppt 文檔可能在 WA端瀏覽體驗不佳。建議您優(yōu)先選擇 TXT,或下載源文件到 本機查看。C 語言簡介 語言簡介 清華大學 鄭 莉1C 語言程序設計簡介 清華大學 鄭莉 本講內容 類與對象 繼承與派生 多態(tài)性 C 標準模板庫 標準模板庫2C 語言程序設計簡介 清華大學 鄭莉 面向對象的思想 回憶: 回憶:面向過程的設計方法 重點 : 重點八、八、-重點是實現(xiàn)的細節(jié)和過程,將數(shù)據(jù)與函數(shù)分開。 形式: 形式:-主模塊 假設干個子模塊main子函數(shù)。 特點: 特點:-自頂向下,逐步求精一一功能分解。 缺點: 缺點:-效率低,程序的可重用性差。3C 語言程序設計
2、簡介 清華大學 鄭莉 面向 對 象 的 思 想 面向對象的方法 目的: 目的:-實現(xiàn)軟件設計的產業(yè)化。觀點: 觀點:-自然界是由實體對象所組成。 程序設計方法: 程序設計方法: -使用面向對象的觀點來描述、模仿并處理現(xiàn)實問題。要求: 要求:-高度概括、分類、和抽象。4C 語言程序設計簡介 清華大學 鄭莉 抽象 的根本特點抽象是對具體對象(問題)進行概括, 抽象是對具體對象(問題)進行概 括, 抽出這一類對象的公共性質并加以描述 的過程。 的過程。-先注意問題的本質及描述,其次是實現(xiàn)過程或細節(jié)。-數(shù)據(jù)抽象:描述某類對象的屬性或狀態(tài)(對象相互區(qū)別的物理量)。-代碼抽象:描述某類對象的共有的行為特
3、征或具有的功能。-抽象的實現(xiàn):通過類的聲明。5OOPC 語言程序設計簡介清華大學 鄭莉抽象實例鐘表 鐘表 抽象實例OOP 的 基 本 特 點數(shù)據(jù)抽象: 數(shù)據(jù)抽象:int Hour, int Minute, int Second代碼抽象: 代碼抽象:SetTime(), ShowTime()6C 語言程序設計簡介清華大學 鄭莉抽象實例鐘表類 鐘表類 抽象實例OOP 的 基 本 特 點class Clock public: void SetTime(int NewH, int NewM, int NewS);void ShowTime(); private: int Hour,Minute,Sec
4、ond; ;7C 語言程序設計簡介清華大學 鄭莉抽象實例人 人 抽象實例OOP 的 基 本 特 點數(shù)據(jù)抽象: 數(shù)據(jù)抽象:char *name,char *gender,int age,int id代碼抽象: 代碼抽象:生物屬性角度: GetCloth(), Eat(), Step(), 社會屬性角度: Work(), Promote。, 8C 語言程序設計簡介清華大學 鄭莉封裝OOP 的 基 本 特 點將抽象出的數(shù)據(jù)成員、 將抽象出的數(shù)據(jù)成員、代碼成員相結 將它們視為一個 整體。 合,將它們視為一個整體。-目的是曾強平安性和簡化編程,使用者 不必了解具體的實現(xiàn)細節(jié),而只需 要通 過外部接口,以
5、特定的訪問權限,來使 用類的成員。-實現(xiàn)封裝:類聲明 中的 9C 語言程序設計簡介清華大學 鄭莉封裝OOP 的 基 本 特 點實例: 實例:class Clock 外部接口 public: void SetTime(int NewH,int NewM, intNewS); void ShowTime(); private: int Hour,Minute,Second; ;特定的訪問權限 邊界10C 語言程序設計簡介清華大學 鄭莉繼承與派生OOP 的 基 本 特 點中支持層次分類的一種機制, 是C中支持層次分類的一種機制, 中支持層 次分類的一種機制 允許程序員在保持原有類特性的根底上, 允許
6、程序員在保持原 有類特性的根底上, 進行更具體的說明。 進行更具體的說明。 實現(xiàn): 實現(xiàn):聲 明派生類11C 語言程序設計簡介清華大學 鄭莉多態(tài)性OOP 的 基 本 特 點多態(tài):同一名稱,不同的功能實現(xiàn)方式。 多態(tài):同一名稱,不同的功能實現(xiàn) 方式。 目的:到達行為標識統(tǒng)一, 目的:到達行為標識統(tǒng)一,減少程序中標 識 符的個數(shù)。 識符的個數(shù)。 實現(xiàn): 實現(xiàn):重載函數(shù)和虛函數(shù)12C 語言程序設計簡介清華大學 鄭莉類和對象c 中的類 中的類類是具有相同屬性和行為的一組對象 的集合, 的集合,它為屬于該類的全部 對象提 供了統(tǒng)一的抽象描述, 供了統(tǒng)一的抽象描述,其內部包括屬 性和行為兩 個主要局部。
7、性和行為兩個主要局部。 利用類可以實現(xiàn)數(shù)據(jù)的封裝、隱藏、 利 用類可以實現(xiàn)數(shù)據(jù)的封裝、隱藏、 繼承與派生。 繼承與派生。 利用類易于編寫 大型復雜程序, 利用類易于編寫大型復雜程序,其模 塊化程度比C中采用函數(shù)更 高 中采用函數(shù)更高。 塊化程度比 中采用函數(shù)更高。13C 語言程序設計簡介 清華大學 鄭莉 類的聲明形式 類 和 類是一種用戶自定義類型,其聲明形式: 類是一種用戶自定義類型,其聲 明形式: 對 象class 類名稱 public: 公有成員(外部接口) private: 私有成員 protected: 保護型成員 14C 語言程序設計簡介 清華大學 鄭莉 類和對象 公有類型成員 是
8、類與外部的接口, 是類與外部的接口,任何外部函數(shù)都 可以訪問公有類型 數(shù)據(jù)和函數(shù)。 可以訪問公有類型數(shù)據(jù)和函數(shù)。以關鍵字 public 修飾。 以關鍵字 public 修飾。 public 修飾15C 語言程序設計簡介 清華大學 鄭莉 類和對象 私有類型成員 只允許本類中的函數(shù)訪問, 只允許本類中的函數(shù)訪問,而類外部 的任何函數(shù) 都不能訪問。 的任何函數(shù)都不能訪問。以關鍵字 private 修飾。 以關鍵字 private 修飾。 private 修飾 如果緊跟 在類名稱的后面聲明私有成員, 如果緊跟在類名稱的后面聲明私有成員, 緊跟在 類名稱的后面聲明私有成員 那么關鍵字 private 可
9、以省略。 關鍵字 private 可以省 略。 private 可以省略16C 語言程序設計簡介 清華大學 鄭莉 類和對象 保護類型 類似, 與 private 類似,其差異表現(xiàn)在繼承與 類似 派生時對派生類的影響 不同。 派生時對派生類的影響不同。以關鍵字 protected 修飾。 以關鍵字 protected 修飾。 protected 修飾17C 語言程序設計簡介 清華大學 鄭莉 類和對象 類的成員class Clock函數(shù)成員 public: void SetTime(int NewH, int NewM, intNewS); void ShowTime(); private: in
10、t Hour, Minute, Second; ;數(shù)據(jù)成員18void Clock : SetTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS; void Clock : ShowTime() coutHour:Minute: using namespace std; class Clock /類的聲明略 類的聲明略 /類的實現(xiàn)略 類的實現(xiàn)略int main() Clock myClock; myClock.SetTime(8,30,30); myClock.ShowTime(); 24C 語言程序設計
11、簡介 清華大學 鄭莉 類的組合 組合的概念 可以在已有的抽象的根底上實現(xiàn)更復 雜的抽象。 雜的抽象。 類中的數(shù)據(jù)成 員是另一個類的對象。 類中的數(shù)據(jù)成員是另一個類的對象。25C 語言程序設計簡介 清華大學 鄭莉 類的組合 舉例class Point private: float x,y; /點的坐標 public: Point(floath,float v); /構造函數(shù) float GetX(void); / 取 X 坐標 float GetY(void); /取Y坐標void Draw(void); / 在(x,y)處畫點; /函數(shù)的實現(xiàn)略26class Line private: Poi
12、nt p1,p2; /線段的兩個端點 線段的兩個端點public: Line(Point a,Point b); /構造函數(shù) 構造函數(shù) Void Draw(void); / 畫出線段 畫出線段 ; / 函數(shù)的實現(xiàn)略 函數(shù)的實現(xiàn)略49 繼承與派生簡介28C 語言程序設計簡介 清華大學 鄭莉 類的繼承與派生 保持已有類的特性而構造新類的過程 稱為繼承。 稱為繼承。 在已有類的基 礎上新增自己的特性而 產生新類的過程稱為派生。 產生新類的過程稱為派生。 被繼承的已有類稱為基類(或父類)。 被繼承的已有類稱為基類(或父類)。 派 生出的新類稱為派生類。 派生出的新類稱為派生類。29C 語言程序設計簡介
13、 清華大學 鄭莉 類的繼承與派生 繼承與派生問題舉例交通工具 汽車 小小工 卡工 旅旅工 工工工 轎工 面面工30C 語言程序設計簡介 清華大學 鄭莉 類的繼承與派生 繼承與派生問題舉例 動物 猴子 貓 鳥 獅獅 虎 獵獵31C 語言程序設計簡介 清華大學 鄭莉 類的繼承與派生 繼承與派生問題舉例 幾何形狀 圓 矩形32C 語言程序設計簡介 清華大學 鄭莉 類的繼承與派生 繼承與派生問題舉例 雇員 兼職技術人員 管理人員 銷售人員 銷售經(jīng)理33C 語言程序設計簡介 清華大學 鄭莉類的繼承與派生 繼承與派生的目的 繼承的目的:實現(xiàn)代碼重用。 繼承的目的:實現(xiàn)代碼重用。 派生的目的:當 新的問題出
14、現(xiàn), 派生的目的:當新的問題出現(xiàn),原有 程序無法解決(或不能完全 解決) 程序無法解決(或不能完全解決)時, 需要對原有程序進行改造。 需要 對原有程序進行改造。34C 語言程序設計簡介 清華大學 鄭莉 類的繼承與派生 派生類的聲明class 派生類名:繼承方式 基類名 派生類名: 成員聲明; 成員聲明; 35C 語言程序設計簡介 清華大學 鄭莉 繼承舉例 類 成員的訪問控制class Point /基類 基類 Point 類的聲明 基類 類的聲明 public: / 公有函數(shù)成員 公有函數(shù)成員 void InitP(float xx=0, float yy=0) X=xx;Y=yy; voi
15、d Move(float xOff, float yOff) X =xOff;Y =yOff; float GetX() return X; float GetY() return Y; private: /私有數(shù)據(jù)成員 私有數(shù)據(jù)成員 float X,Y; ;36class Rectangle: public Point /派生類聲明 派生類聲明 public: /新增公有函數(shù)成員 新增公有函數(shù)成員 void InitR(float x, float y, float w, float h) InitP(x,y);W=w;H=h;/ 調用基類公有成員函數(shù) 調用基類公有成員函 數(shù) float G
16、etH() return H; float GetW() return W; private: ;37/ 新增私有數(shù)據(jù)成員 新增私有數(shù)據(jù)成員float W,H;#include #include using namecpace std; int main() Rectanglerect; rect.InitR(2,3,20,10); /通過派生類對象訪問基類公有成員 / 通過派生類對象訪問基類公有成員 rect.Move(3,2); coutrect.GetX(),rect.GetY(), rect.GetH(), rect.GetW()endl; return 0; 38 多態(tài)性簡介39C
17、語言程序設計簡介 清華大學 鄭莉 多態(tài)性的概念多態(tài)性是面向對象程序設計的重要特 征之一。 征之一。 多態(tài)性是指發(fā)出同 樣的消息被不同類 型的對象接收時有可能導致完全不同 的行為。 的行為。 多態(tài) 的實現(xiàn): 多態(tài)的實現(xiàn):-函數(shù)重載-運算符重載-虛函數(shù)40C 語言程序設計簡介 清華大學 鄭莉 運算符重載 問題舉例復數(shù)的運算 復數(shù)的運算 問題舉例class complex / 復數(shù)類聲明 復數(shù)類聲明 public: complex(double r=0.0,double i=0.0) / 構造函數(shù) 構造函數(shù) real=r; imag=i; void display(); / 顯示復數(shù)的值 顯示復數(shù)的
18、值 private: double real; double imag; ;41C 語言程序設計簡介 清華大學 鄭莉 運算符重載 問題舉例復數(shù)的運算 復數(shù)的運算 問題舉例 用“ 、“ - 能夠實現(xiàn)復數(shù)的加減運 、 能夠實現(xiàn)復數(shù)的加減運 算嗎? 算 嗎? 實現(xiàn)復數(shù)加減運算的方法 重載“ 、 運算符 重載“ 、“ - 運算符 重載42C 語言程序設計簡介 清華大學 鄭莉 運算符重載 運算符重載的實質 運算符重載是對已有的運算符賦予多重含義 必要性 -C 中預定義的運算符其運算對象只能是根本數(shù)據(jù)類型,而不適用于用戶自定義類型(如類)實現(xiàn)機制-將指定的運算表達式轉化為對運算符函數(shù)的調用,運算對象轉化為
19、運算符函數(shù)的實參。-編譯系統(tǒng)對重載運算符的選擇,遵循函數(shù)重載的選擇原那么。43C 語言程序設計簡介 清華大學 鄭莉 運算符重載 將“ 、“ - 運算重載為復數(shù)類、 的成員函數(shù)。 的成員函數(shù)。 規(guī)那么 :規(guī)那么-實部和虛局部別相加減。實部和虛局部別相加減。操作數(shù) : 操作數(shù)-兩個操作數(shù)都是復數(shù)類的對象。兩個操作數(shù)都是復數(shù)類的對象。44#include using namespace std; class complex / 復數(shù)類聲明 復數(shù)類聲明 public: / 外部接口 外部接口 complex(double r=0.0,double i=0.0)real=r;imag=i; / 構造函數(shù)
20、 構造函數(shù) complex operator (complex c2); / 重載為成員函數(shù) / 重載為成員函數(shù) complex operator - (complex c2); /- 重載為成員函數(shù) 重載為成員函數(shù) void display(); / 輸出復數(shù) 輸出復數(shù) private: / 私有數(shù)據(jù)成員 私有數(shù)據(jù)成員 double real; / 復數(shù)實部 復數(shù)實部 double imag; / 復數(shù)虛部 復數(shù)虛部 ;45complex complex: operator (complex c2) / 重載函數(shù)實現(xiàn) 重載函數(shù)實現(xiàn) complex c; c.real=c2.real real
21、; c.imag=c2.imag imag; return complex(c.real,c.imag); 46complex complex: operator -(complex c2) / 重載函數(shù)實現(xiàn) 重載函數(shù)實現(xiàn) complex c; c.real=real-c2.real; c.imag=imag-c2.imag; return complex(c.real,c.imag); 47void complex:display() cout(real, using namespace std;class BO / 基類 聲明 基類B0聲明 基類public: /外部接口 外部接口virt
22、ual void display() /虛成員函數(shù) 虛成員函數(shù)coutB0:display()endl; ; class B1: public B0 /公有派生 公有派生 public: void display() coutB1:display()endl; ; class D1: public B1 / 公有派生 公有派生 public: void display() coutD1:display()display(); int main()/ 主函數(shù) 主函數(shù) B0 b0, *p; / 聲明基類對象和指針 聲明基類對象和指針 B1 b1; / 聲明派生類對象 聲明派生類對象 D1 d1;
23、/ 聲明派生類對象 聲明派生類對 象p=&bO; fun(p); /調用基類函數(shù)成員調用基類B0函數(shù)成員調用基類運行結果: 運行結果: p=&b1; fun(p); / 調用派生類 函數(shù)成員 B0:display() 調 用派生類B1函數(shù)成員 調用派生類p=&d1; B1:display() fun(p); /調用派生類函數(shù)成員D1:display() 調用派生類D1函數(shù)成員調用派生類52C 語言程序設計簡介 清華大學 鄭莉 函數(shù)模板 函數(shù)模板 函數(shù)模板可以用來創(chuàng)立一個通用功能 的函數(shù),以支持多種不同形參, 的函 數(shù),以支持多種不同形參,進一 步簡化重載函數(shù)的函數(shù)體設計。 步簡化重載函數(shù) 的函
24、數(shù)體設計。 聲明方法: 聲明方法:template 函數(shù)聲明53C 語言程序設計簡介 清華大學 鄭莉 函數(shù)模板 求絕對值函數(shù)的模板#include using namespace std; template abs(T T abs(T x) x0? return x0?-x:x; int main() n= int n=-5; d=double d=-5.5; cout class 類名 類成員聲明 如果需要在類模板以外定義其成員 函數(shù),那么要采用以下的形式: 函數(shù),那么要 采用以下的形式:template 類型名 類名 : 函數(shù)名(參數(shù)表)57C 標準模板庫簡介 標準模板庫簡介58C 語言程
25、序設計簡介 清華大學 鄭莉 泛型程序設計 將程序寫得盡可能通用 將算法從特定的數(shù)據(jù)結構中抽象出來, 將算法從特定 的數(shù)據(jù)結構中抽象出來,成 為通用的 C 的模板為泛型程序設計奠定了關鍵的 的 模板為泛型程序設計奠定了關鍵的 根底 STL 是泛型程序設計的一個范例 是泛型 程序設計的一個范例-容器(container)迭代器(iterator) 算法(algorithms )函數(shù) 對象( function object )59C 語言程序設計簡介 清華大學 鄭莉 容器 概念和術語 容器類是容納、 容器類是容納、包含一組元素或元素 集合的對象。 集合的 對象。 異類容器類與同類容器類 順序容器與關
26、聯(lián)容器 七種根本容器: 七種根本 容器:- 向量( vector )、雙端隊列( deque)、 列表( list )、集合( set )、多重集合 (multiset )、映射(map和多重映射(multimap )60C 語言程序設計簡介 清華大學 鄭莉 容器的接口 通用容器運算符- =,!= ,=,=,= 方法(函數(shù)) 方法(函數(shù)) -迭代方法begin(), end() , rbegin() , rend()-訪問方法size(),max_size() ,swap() , empty()61C 語言程序設計簡介清華大學 鄭莉迭代器概念和術語 迭代器是面向對象版本的指針-指針可以指向內存
27、中的一個地址-迭代器可以指向容器中的一個位置STL 的每一個容器類模版中,都定義 的每一個容器類模版中, 的每一個容器 類模版中 了一組對應的迭代器類。使用迭代器, 了一組對應的迭代器類。使用迭 代器, 算法函數(shù)可以訪問容器中指定位置的 元素,而無需關心元素的具體類型。 元素,而無需關心元素的具體類型。62C 語言程序設計簡介清華大學 鄭莉算法概念和術語C 標準模板庫中包括 多個算法 標準模板庫中包括 70多個算法 標準模板庫 中包括-其中包括查找算法,排序算法,消除算法,記數(shù)算法,比較算法,變換算法, 置換算法和容器管理等等。這些算法的一個最重要的特性就是它 們的統(tǒng)一性, 們的統(tǒng)一性,并且可
28、以廣 泛用于不同 的對象和內置的數(shù)據(jù)類型。 的對象和內置的數(shù)據(jù)類型。63C 語言程序設計簡介清華大學 鄭莉順序容器容器順序容器的接口-插入方法push_front() , push_back() , insert() ,運算符“ =-刪除方法pop() , erase() , clear()-迭代訪問方法使用迭代器-其它順序容器訪問方法(不修改訪問方法)front() , back() ,下標 運算符64C 語言程序設計簡介清華大學 鄭莉 順序容器向量 向量 順序容器容器向量屬于順序容器, 向量屬于順序容器,用于容納不定長 線性序列(即線性 群體), ),提供對序 線性序列(即線性群體),提供
29、對序 列的快速隨機訪問 (也稱直接訪問) 列的快速隨機訪問(也稱直接訪問) 向量是動態(tài)結構,它的大 小不固定, 向量是動態(tài)結構,它的大小不固定, 可以在程序運行時增加或減少。 可以在程序運行時增加或減少。 例 10-1-求范圍2N中的質數(shù),N在程序運行時由 鍵盤輸入。65#include #include / 包含向量容器頭文件 #include / 包含向 量容器頭文件 using namespace std ; int main() vector A(10); int n; int primecount = 0, i, j; cout=2 as upper limit: ; cin n; Aprimecount = 2;66for(i = 3; i n; i ) if (primecount = A.size()A.resize(primecount 10); if (i % 2 = 0) continue; j = 3; while (j i/2) Aprimecount
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 古代漢語的詞類活用
- 信息技術(第2版)(拓展模塊)教案1-模塊3 3.1 認知大數(shù)據(jù)
- 高中物理第一章電場第一節(jié)認識靜電課件粵教版選修3-
- 小學生心理健康教育教案12
- 初中健康教育教案
- 課時4 七年級 Unit 4 2025年中考英語(仁愛版)一輪復習基礎練(含答案)
- 【中考考點基礎練】階段檢測二 力學綜合素養(yǎng)提升 2025年物理中考總復習(福建)(含答案)
- 2024至2030年中國晶閘管交流電力控制柜數(shù)據(jù)監(jiān)測研究報告
- 2010-2012年中國工程塑料行業(yè)市場研究及投資分析報告
- 2024至2030年中國工藝霓虹燈數(shù)據(jù)監(jiān)測研究報告
- 形式發(fā)票模板范文
- 職業(yè)生涯人物訪談報告(采訪教師)
- 《試驗設計與統(tǒng)計分析》課程教學大綱
- 高一生物 基因工程的基本操作步驟(第1課時) 基因工程的基本操作程序 教學設計
- 奧運項目介紹課件
- 2020年中國自由貿易試驗區(qū)發(fā)展白皮書課件
- 水 泵 安 裝 記 錄
- 糖尿病高危人群健康管理課件
- 呂氏春秋卷十一 仲冬紀 忠廉原文及翻譯
- 類比-完整版獲獎課件
- 《相遇問題》-完整版PPT
評論
0/150
提交評論