《面向?qū)ο蟪绦蛟O(shè)計(jì)》多態(tài).ppt

上傳人:za****8 文檔編號(hào):15275367 上傳時(shí)間:2020-08-06 格式:PPT 頁(yè)數(shù):45 大?。?31KB
收藏 版權(quán)申訴 舉報(bào) 下載
《面向?qū)ο蟪绦蛟O(shè)計(jì)》多態(tài).ppt_第1頁(yè)
第1頁(yè) / 共45頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》多態(tài).ppt_第2頁(yè)
第2頁(yè) / 共45頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》多態(tài).ppt_第3頁(yè)
第3頁(yè) / 共45頁(yè)

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《《面向?qū)ο蟪绦蛟O(shè)計(jì)》多態(tài).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《面向?qū)ο蟪绦蛟O(shè)計(jì)》多態(tài).ppt(45頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,1,C++大學(xué)基礎(chǔ)教程,第10章 多態(tài)性 北京科技大學(xué) 計(jì)算機(jī)系,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-2-,第十一章 多態(tài)性,11.1 多態(tài)性的概念 11.2 繼承中的靜態(tài)聯(lián)編 11.3 虛函數(shù)和運(yùn)行時(shí)的多態(tài) 11.4 純虛函數(shù)和抽象類(lèi),2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-3-,多態(tài)性的概念,多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一。 多態(tài)性是指發(fā)出同樣的消息被不同類(lèi)型的對(duì)象接收時(shí)導(dǎo)致不同的行為。 擦 地板 窗戶 臉,采用不同的工具,不同的方式。在c++中可以用相同的函數(shù)名,不同的函數(shù)操作來(lái)實(shí)現(xiàn),函數(shù)重載: 函數(shù)名相同,但是函數(shù)的參

2、數(shù)個(gè)數(shù)或者參數(shù)類(lèi)型不同,或者const標(biāo)識(shí),2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-4-,11.1.1面向?qū)ο蟪绦蛟O(shè)計(jì)中多態(tài)的表現(xiàn),總的來(lái)說(shuō),不同對(duì)象對(duì)于相同的消息有不同的響應(yīng),就是面向?qū)ο蟪绦蛟O(shè)計(jì)中的多態(tài)性。 具體在程序中,多態(tài)性有兩種表現(xiàn)的方式: 同一個(gè)對(duì)象調(diào)用名字相同、但是參數(shù)不同的函數(shù),表現(xiàn)出不同的行為。重載多態(tài) 在同一個(gè)類(lèi)中定義的重載函數(shù)的調(diào)用。 不同的對(duì)象調(diào)用名字和參數(shù)都相同的函數(shù),表現(xiàn)出不同的行為。-運(yùn)行多態(tài) 在派生類(lèi)中重復(fù)定義 同名覆蓋:使用派生類(lèi)的定義 作用域符的使用:使用基類(lèi)的定義,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-5-,繼承和派生中的多態(tài),class A

3、 public: void f( ); ; class C: public A public: void f( ); void f(int x ); ;,如果聲明:C c1; 則 c1.f( ); c1.f(int x ); c1.A::f(),,,,,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-6-,11.1.1面向?qū)ο蟪绦蛟O(shè)計(jì)中多態(tài)的表現(xiàn),面向?qū)ο蟪绦蛟O(shè)計(jì)中多態(tài)性表現(xiàn)為以下幾種形式: 重載多態(tài):通過(guò)調(diào)用相同名字的函數(shù),表現(xiàn)出不同的行為。 運(yùn)行多態(tài):通過(guò)基類(lèi)的指針或引用,調(diào)用不同派生類(lèi)的同名函數(shù),表現(xiàn)出不同的行為。許多面向?qū)ο蟪绦蛟O(shè)計(jì)的書(shū)籍中所說(shuō)的多態(tài)性,就是這種多態(tài)。 模板多態(tài),也

4、稱為參數(shù)多態(tài):通過(guò)一個(gè)模板,得到不同的函數(shù)或不同的類(lèi)。這些函數(shù)或者類(lèi)具有不同的特性和不同的行為。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-7-,多態(tài)性的概念,例1 int max(int a, int b)return ab?a:b; int max(int a, int b, int c) return (int t=(ab?a:b)c?t:c; float max(float a, float b) void main() int a,b,f; float c,d; max(a,b); max(c,d); ,在編譯的時(shí)候,確定調(diào)用的是哪個(gè)max, 靜態(tài)聯(lián)編;,函數(shù)重載,2020/8/6,

5、北京科技大學(xué)計(jì)算機(jī)系,-8-,繼承和派生中的多態(tài),class A public: void f( ); ; class C: public A public: void f( ); void f(int x ); ;,如果聲明:C c1; 則 c1.f( ); c1.f(int x ); c1.A::f(),,靜態(tài)聯(lián)編;,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-9-,派生類(lèi)對(duì)象調(diào)用同名函數(shù),對(duì)于派生類(lèi)對(duì)象調(diào)用成員函數(shù),可以有以下的結(jié)論: 派生類(lèi)對(duì)象可以直接調(diào)用本類(lèi)中與基類(lèi)成員函數(shù)同名的函數(shù),不存在二義性; 在編譯時(shí)就能確定對(duì)象將調(diào)用哪個(gè)函數(shù),屬于靜態(tài)聯(lián)編,不屬于運(yùn)行時(shí)的多態(tài)。,2

6、020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-10-,賦值兼容原則,一個(gè)公有派生類(lèi)的對(duì)象在使用上可以被當(dāng)作基類(lèi)的對(duì)象,反之則禁止。具體表現(xiàn)在: derived d;base b; 派生類(lèi)的對(duì)象可以被賦值給基類(lèi)對(duì)象。 b=d; 派生類(lèi)的對(duì)象可以初始化基類(lèi)的引用。 base ,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-11-,賦值兼容規(guī)則舉例 - 多態(tài)是否具有動(dòng)態(tài)性,#include class B0//基類(lèi)B0聲明 public: void display( ) cout<

7、class B1: public B0 public: void display( )coutdisplay( );//對(duì)象指針-成員名 ,定義了類(lèi)族,定義了基類(lèi)的對(duì)象指針,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-13-,void main( )//主函數(shù) B0 b0;//聲明B0類(lèi)對(duì)象 B1 b1;//聲明B1類(lèi)對(duì)象 D1 d1;//聲明D1類(lèi)對(duì)象 B0 *p;//聲明B0類(lèi)指針 p= ,B0::display( ),B0::display( ),B0::display( ),2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-14-,概念復(fù)習(xí),根據(jù)賦值兼容規(guī)則,下列哪一個(gè)陳述是正確的?【 】 公

8、有派生類(lèi)的對(duì)象可以賦值給基類(lèi)的對(duì)象。 任何派生類(lèi)的對(duì)象可以賦值給基類(lèi)的對(duì)象。 基類(lèi)的對(duì)象可以賦值給派生類(lèi)的對(duì)象。 間接基類(lèi)的對(duì)象可以賦值給直接基類(lèi)的對(duì)象。,,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-15-,多態(tài)的實(shí)現(xiàn):聯(lián)編,聯(lián)編(Binding綁定):確定具體的操作對(duì)象。程序自身彼此關(guān)聯(lián)的過(guò)程,確定程序中的操作調(diào)用與執(zhí)行該操作的代碼間的關(guān)系。 靜態(tài)聯(lián)編: 編譯的多態(tài) 動(dòng)態(tài)聯(lián)編: 運(yùn)行時(shí)的多態(tài),int a; main() int a; a = 7; ,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-16-,靜態(tài)聯(lián)編與動(dòng)態(tài)聯(lián)編,靜態(tài)聯(lián)編(靜態(tài)束定) 聯(lián)編工作出現(xiàn)在編譯階段,用對(duì)象名或者類(lèi)名來(lái)限定要調(diào)

9、用的函數(shù)。 動(dòng)畫(huà) 動(dòng)態(tài)聯(lián)編 聯(lián)編工作在程序運(yùn)行時(shí)執(zhí)行,在程序運(yùn)行時(shí)才確定將要調(diào)用的函數(shù)。,例,例,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-17-,#include class Point public: Point(double i, double j) x=i; y=j; double Area( ) return 0.0; private: double x, y; ; class Rectangle:public Point public: Rectangle(double i, double j, double k, double l); double Area( ) return

10、w*h; private: double w,h; ;,靜態(tài)聯(lián)編例,,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-18-,Rectangle::Rectangle(double i, double j, double k, double l) :Point(i,j) w=k; h=l; void fun(Point 運(yùn)行結(jié)果: Area=0,,X,inaceesible,Y,inaceesible,W,private,H,private,15.0,25.0,3.0,5.2,,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-19-,,例11.1 定義Circle類(lèi)和Rectangle類(lèi)為Shape類(lèi)的派

11、生類(lèi),通過(guò)Circle類(lèi)和Rectangle類(lèi)的對(duì)象調(diào)用重載函數(shù)getArea()顯示對(duì)象的面積。 // 例11.1: shape.h #ifndef SHAPE_H #define SHAPE_H class Shape public: double getArea() const; void print() const; ; // Shape類(lèi)定義結(jié)束,基類(lèi)Shape的定義,課下讀懂?。?!,,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-20-,#include class Point public: Point(double i, double j) x=i; y=j; virtual do

12、uble Area( ) return 0.0; private:double x, y;; class Rectangle:public Point public: Rectangle(double i, double j, double k, double l); virtual double Area( ) return w*h; private:double w,h;; void fun(Point ,動(dòng)態(tài)聯(lián)編例,虛函數(shù),運(yùn)行結(jié)果: Area=375,,,運(yùn)行結(jié)果: Area=0,,聲明虛函數(shù)的目的就是通知編譯器,碰到函數(shù)名時(shí)不要馬上選擇靜態(tài)聯(lián)編,也有可能時(shí)動(dòng)態(tài)聯(lián)編的。,2020/8/

13、6,北京科技大學(xué)計(jì)算機(jī)系,21,虛函數(shù)和運(yùn)行時(shí)的多態(tài),2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-22-,虛函數(shù),虛函數(shù)是動(dòng)態(tài)聯(lián)編的基礎(chǔ)。 是非靜態(tài)的成員函數(shù)。 在類(lèi)的聲明中,在函數(shù)原型之前寫(xiě)virtual。 virtual 只用來(lái)說(shuō)明類(lèi)聲明中的原型,不能用在函數(shù)實(shí)現(xiàn)時(shí)。 具有繼承性,基類(lèi)中聲明了虛函數(shù),派生類(lèi)中無(wú)論是否說(shuō)明,同原型函數(shù)都自動(dòng)為虛函數(shù)。 本質(zhì):不是重載聲明而是覆蓋。 調(diào)用方式:通過(guò)基類(lèi)指針或引用,執(zhí)行時(shí)會(huì)根據(jù)指針或引用指向的對(duì)象的類(lèi),決定調(diào)用哪個(gè)函數(shù)。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-23-,例,#include class B0//基類(lèi)B0聲明 public://外部

14、接口 virtual void display( ) cout<

15、*ptr)//普通函數(shù) ptr-display( ); void main( )//主函數(shù) B0 b0, *p;//聲明基類(lèi)對(duì)象和指針 B1 b1;//聲明派生類(lèi)對(duì)象 D1 d1;//聲明派生類(lèi)對(duì)象 p=//調(diào)用派生類(lèi)D1函數(shù)成員 ,B0::display( ),B1::display( ),D1::display( ),2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-26-,void fun(B0 ptr)//普通函數(shù) ptr.display( ); void main( )//主函數(shù) B0 b0, *p;//聲明基類(lèi)對(duì)象和指針 B1 b1;//聲明派生類(lèi)對(duì)象 D1 d1;//聲明派生類(lèi)對(duì)

16、象 b0=b0; fun(b0);//調(diào)用基類(lèi)B0函數(shù)成員 b0=b1; fun(b0); //調(diào)用基類(lèi)B0函數(shù)成員 b0=d1; fun(b0); //調(diào)用基類(lèi)B0函數(shù)成員 ,B0::display( ),B0::display( ),B0::display( ),2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-27-,,例11.3 將例11.2進(jìn)行修改,使得程序具有運(yùn)行時(shí)的多態(tài)的效果。 // 例11.3: shape1.h #ifndef SHAPE_H #define SHAPE_H class Shape public: virtual double getArea() const; voi

17、d print() const; ; // Shape類(lèi)定義結(jié)束,基類(lèi)Shape的定義,例11.3 課下讀懂!?。?2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-28-,10.3.1 虛函數(shù),要實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài),需要以下條件: 必須通過(guò)指向基類(lèi)對(duì)象的指針訪問(wèn)和基類(lèi)成員函數(shù)同名的派生類(lèi)成員函數(shù); 或者用派生類(lèi)對(duì)象初始化的基類(lèi)對(duì)象的引用訪問(wèn)和基類(lèi)成員函數(shù)同名的派生類(lèi)成員函數(shù); 派生類(lèi)的繼承方式必須是公有繼承; 基類(lèi)中的同名成員函數(shù)必須定義為虛函數(shù)。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-29-,,例10.4 虛函數(shù)的正確使用。分析以下程序,編譯時(shí)哪個(gè)語(yǔ)句會(huì)出現(xiàn)錯(cuò)誤?為什么?將有錯(cuò)誤的語(yǔ)句屏蔽掉以后

18、,程序運(yùn)行結(jié)果如何?其中哪些調(diào)用是靜態(tài)聯(lián)編,哪些是動(dòng)態(tài)聯(lián)編? #include class BB public: virtual void vf1()cout<

19、() DD d; BB *bp= ,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-30-,,void main() DD d; BB *bp= ,將這個(gè)語(yǔ)句注釋掉后,運(yùn)行結(jié)果將顯示: DD::vf1被調(diào)用 BB::vf2被調(diào)用 BB::f被調(diào)用,函數(shù)調(diào)用bp-vf2(10);是錯(cuò)誤的。因?yàn)榕缮?lèi)的vf2函數(shù)和基類(lèi)的vf2函數(shù)的參數(shù)不同,派生類(lèi)的vf2就不是虛函數(shù),而是重載。,其中bp-vf1()調(diào)用是動(dòng)態(tài)聯(lián)編。 bp-vf2()是靜態(tài)聯(lián)編。 bp-f()也是靜態(tài)聯(lián)編。,,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-31-,10.3.2 虛函數(shù)的使用,虛函數(shù)必須正確的定義和使用。否則,即使在函數(shù)原型前

20、加了virtual的說(shuō)明,也可能得不到運(yùn)行時(shí)多態(tài)的特性。 必須首先在基類(lèi)中聲明虛函數(shù)。在多級(jí)繼承的情況下,也可以不在最高層的基類(lèi)中聲明虛函數(shù)。例如在第二層定義的虛函數(shù),可以和第三層的虛函數(shù)形成動(dòng)態(tài)聯(lián)編。但是,一般都是在最高層的基類(lèi)中首先聲明虛函數(shù)。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-32-,11.3.2 虛函數(shù)的使用,基類(lèi)和派生類(lèi)的同名函數(shù),必須函數(shù)名、返回值、參數(shù)表全部相同,才能作為虛函數(shù)來(lái)使用。否則,即使函數(shù)用virtual來(lái)說(shuō)明,也不具有虛函數(shù)的行為。 靜態(tài)成員函數(shù)不可以聲明為虛函數(shù)。構(gòu)造函數(shù)也不可以聲明為虛函數(shù)。 析構(gòu)函數(shù)可以聲明為虛函數(shù),即可以定義虛析構(gòu)函數(shù)。,2020/8/

21、6,北京科技大學(xué)計(jì)算機(jī)系,-33-,10.3.3 虛析構(gòu)函數(shù),如果用動(dòng)態(tài)創(chuàng)建的派生類(lèi)對(duì)象的地址初始化基類(lèi)的指針,創(chuàng)建的過(guò)程不會(huì)有問(wèn)題:仍然是先調(diào)用基類(lèi)構(gòu)造函數(shù),再執(zhí)行派生類(lèi)構(gòu)造函數(shù)。 但是,在用delete運(yùn)算符刪除這個(gè)指針的時(shí)候,由于指針是指向基類(lèi)的,通過(guò)靜態(tài)聯(lián)編,只會(huì)調(diào)用基類(lèi)的析構(gòu)函數(shù),釋放基類(lèi)成員所占用的空間。而派生類(lèi)成員所占用的空間將不會(huì)被釋放。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-34-,,#include using namespace std; class Shape public: Shape()cout<

22、pe類(lèi)析構(gòu)函數(shù)被調(diào)用n;; ; // Shape類(lèi)定義結(jié)束 class Circle : public Shape //派生類(lèi)Circle的定義 public: Circle( int xx= 0, int yy= 0, double rr= 0.0 ) x = xx; y = yy; radius =rr; cout<

23、ape_ptr; shape_ptr = new(Circle)(3,4,5); delete shape_ptr;,例11.5 定義簡(jiǎn)單的Shape類(lèi)和Circle類(lèi),觀察基類(lèi)指針的創(chuàng)建和釋放時(shí)如何調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)。,基類(lèi)Shape的定義,主函數(shù),程序運(yùn)行后在屏幕上顯示: Shape類(lèi)構(gòu)造函數(shù)被調(diào)用 Circle類(lèi)構(gòu)造函數(shù)被調(diào)用 Shape類(lèi)析構(gòu)函數(shù)被調(diào)用,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-35-,10.3.3 虛析構(gòu)函數(shù),為了解決派生類(lèi)對(duì)象釋放不徹底的問(wèn)題,必須將基類(lèi)的析構(gòu)函數(shù)定義為虛析構(gòu)函數(shù)。格式是在析構(gòu)函數(shù)的名字前添加virtual關(guān)鍵字。函數(shù)原型如下: virtual

24、Shape(); 此時(shí),無(wú)論派生類(lèi)析構(gòu)函數(shù)是不是用virtual來(lái)說(shuō)明,也都是虛析構(gòu)函數(shù)。 再用delete shape_ptr來(lái)釋放基類(lèi)指針時(shí),就會(huì)通過(guò)動(dòng)態(tài)聯(lián)編調(diào)用派生類(lèi)的析構(gòu)函數(shù)。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-36-,11.3.3 虛析構(gòu)函數(shù),將例11.5程序中的Shape析構(gòu)函數(shù)作以上修改后,運(yùn)行的結(jié)果將是: Shape類(lèi)構(gòu)造函數(shù)被調(diào)用 Circle類(lèi)構(gòu)造函數(shù)被調(diào)用 Circle類(lèi)析構(gòu)函數(shù)被調(diào)用 Shape類(lèi)析構(gòu)函數(shù)被調(diào)用,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-37-,11.4 純虛函數(shù)和抽象類(lèi),2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-38-,抽象類(lèi)的一般形式,帶有純

25、虛函數(shù)的類(lèi)稱為抽象類(lèi): class 類(lèi)名 virtual 類(lèi)型 函數(shù)名(參數(shù)表)=0; //純虛函數(shù) ... ;,一個(gè)函數(shù)聲明為純虛后,純虛函數(shù)的意思是:我是一個(gè)抽象類(lèi)!不要把我實(shí)例化!純虛函數(shù)用來(lái)規(guī)范派生類(lèi)的行為,實(shí)際上就是所謂的“接口”。它告訴使用者,我的派生類(lèi)都會(huì)有這個(gè)函數(shù)。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-39-,作用,抽象類(lèi)為抽象和設(shè)計(jì)的目的而建立,將有關(guān)的數(shù)據(jù)和行為組織在一個(gè)繼承層次結(jié)構(gòu)中,保證派生類(lèi)具有要求的行為。 對(duì)于暫時(shí)無(wú)法實(shí)現(xiàn)的函數(shù),可以聲明為純虛函數(shù),留給派生類(lèi)去實(shí)現(xiàn)。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-40-,注意,抽象類(lèi)只能作

26、為基類(lèi)來(lái)使用。 不能聲明抽象類(lèi)的對(duì)象。 構(gòu)造函數(shù)不能是虛函數(shù),析構(gòu)函數(shù)可以是虛函數(shù)。 eg. class A public: virtual void fun1()=0; ; A obj;,,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-41-,例,1)了解純虛函數(shù)的定義 2)了解純虛類(lèi)只能作為基類(lèi),派生其他類(lèi)而用 class A public: A()fun(); virtual void fun() cout << “A:fun”<

27、; ; B b;,1 構(gòu)造函數(shù)中調(diào)用的虛函數(shù)不具有動(dòng)態(tài)聯(lián)編,必然是調(diào)用的本類(lèi)中的函數(shù)。 2 Virtual void fun()=0;,virtual void fun() =0;,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-42-,class A public: void foo() bar(); private: virtual void bar() ... ; class B: public A private: virtual void bar() ... ; void bar1 (A *a) a-foo();,bar函數(shù)中調(diào)用a對(duì)象的foo,foo中調(diào)用虛函數(shù)bar,調(diào)用的是哪個(gè)b

28、ar。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-43-,一個(gè)類(lèi)的虛函數(shù)在它自己的構(gòu)造函數(shù)和析構(gòu)函數(shù)中被調(diào)用的時(shí)候,它們就變成普通函數(shù)了,不“虛”了。也就是說(shuō)不能在構(gòu)造函數(shù)和析構(gòu)函數(shù)中讓自己“多態(tài)”。例如: class A public: A() foo(); // 在這里,無(wú)論如何都是A::foo()被調(diào)用! A() foo(); // 同上 virtual void foo(); ; class B: public A public: virtual void foo(); ; void bar() A * a = new B; delete a; ,2020/8/6,北京科技大學(xué)計(jì)算

29、機(jī)系,-44-,多態(tài)有什么用? 在面向?qū)ο蟮木幊讨校紫葧?huì)針對(duì)數(shù)據(jù)進(jìn)行抽象(確定基類(lèi))和繼承(確定派生類(lèi)),構(gòu)成類(lèi)層次。 類(lèi)層次的使用者在使用它們的時(shí)候,如果仍然在需要基類(lèi)的時(shí)候?qū)戓槍?duì)基類(lèi)的代碼,在需要派生類(lèi)的時(shí)候?qū)戓槍?duì)派生類(lèi)的代碼,就等于類(lèi)層次完全暴露在使用者面前。 如果這個(gè)類(lèi)層次有任何的改變(增加了新類(lèi)),都需要使用者“知道”(針對(duì)新類(lèi)寫(xiě)代碼)。這樣就增加了類(lèi)層次與其使用者之間的耦合,有人把這種情況列為程序中的“bad smell”之一。,2020/8/6,北京科技大學(xué)計(jì)算機(jī)系,-45-,總結(jié),多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)最重要的特點(diǎn)之一。本章介紹了多態(tài)性中最重要的兩個(gè)表現(xiàn):運(yùn)行多態(tài)和參數(shù)多態(tài)。參數(shù)多態(tài)就是模板的使用。 運(yùn)行多態(tài)的表現(xiàn)就是: 一種形態(tài)的語(yǔ)句:通過(guò)基類(lèi)指針訪問(wèn)基類(lèi)和派生類(lèi)的同名函數(shù); 多種條件的執(zhí)行:用不同派生類(lèi)對(duì)象的地址初始化這個(gè)基類(lèi)指針;,

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!