第五章 多態(tài)性_第1頁
第五章 多態(tài)性_第2頁
第五章 多態(tài)性_第3頁
第五章 多態(tài)性_第4頁
第五章 多態(tài)性_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第五章、多態(tài)性本章介紹多態(tài)性的基本概念、運算符重載實現(xiàn)方法、本章介紹多態(tài)性的基本概念、運算符重載實現(xiàn)方法、虛函數(shù)等內(nèi)容。虛函數(shù)等內(nèi)容。面向?qū)ο蟮某绦蛟O(shè)計3/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 本章主要內(nèi)容: 多態(tài)性概述 運算符重載 類型轉(zhuǎn)換 虛函數(shù)面向?qū)ο蟮某绦蛟O(shè)計4/21多態(tài)性概念 多態(tài)性就是不同對象收到相同的消息時,產(chǎn)生不同的動作。 直觀地說,多態(tài)性是指用一個名字定義不同的函數(shù),這些函數(shù)執(zhí)行不同但又類似的操作,從而可以使用相同的調(diào)用方式來調(diào)用這些具有不同功能的同名函數(shù)。 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類

2、型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計5/21 多態(tài)的實現(xiàn) 多態(tài)從實現(xiàn)的角度來講可以劃分為兩類:編譯時的多態(tài)和運行時的多態(tài)。 編譯時的多態(tài)是通過靜態(tài)聯(lián)編來實現(xiàn)的。靜態(tài)聯(lián)編就是在編譯階段完成的聯(lián)編。編譯時多態(tài)性主要是通過函數(shù)重載和運算符重載實現(xiàn)的。 運行時的多態(tài)是用動態(tài)聯(lián)編實現(xiàn)的。動態(tài)聯(lián)編是運行階段完成的聯(lián)編。運行時多態(tài)性主要是通過虛函數(shù)來實現(xiàn)的。 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計6/21編譯期多態(tài)運算符重載 簡單地說,多態(tài)就是給不同類型的對象發(fā)送相同的消息時,對象會做出不同的響應(yīng)。 一般情況下,我們所說的面向?qū)ο蟪?/p>

3、序設(shè)計中的多態(tài),所指的都是由虛函數(shù)實現(xiàn)的運行時多態(tài)。 從概念上看,C+的運算符重載技術(shù)也可以看成是一種實現(xiàn)多態(tài)的手段。第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計7/21什么是運算符重載 C+中現(xiàn)有的絕大多數(shù)運算符只能以基本數(shù)據(jù)類型的量作為其操作的對象。運算符重載就是要給現(xiàn)有的運算符賦予新的功能,使其可以操作類的對象。 運算符重載的本質(zhì)是函數(shù)重載。如果為某個類設(shè)計了運算符op的重載函數(shù),則當使用op操作該類的對象時,編譯器將調(diào)用運算符重載函數(shù)完成操作任務(wù)。 由于運算符重載函數(shù)的調(diào)用方式是靜態(tài)綁定,所以可以將運算符重載稱之為編譯期多態(tài)

4、。第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計8/21C+對運算符重載的限定1)只能重載現(xiàn)有的運算符,而不能創(chuàng)造新的運算符; 2) 現(xiàn)有運算符中,以下幾個不能被重載,它們是:用于訪問對象成員的“.”操作符、成員指針運算符“*”、域解析操作符“:”、條件運算符“?:”、sizeof運算符、typeid運算符、和四個類型轉(zhuǎn)換操作符:const_cast、static_cast、dynamic_cast、reinterpret_cast ; 3) 運算符重載不能改變原運算符的優(yōu)先級和結(jié)合性; 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運

5、算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計9/21 C+對運算符重載的限定(續(xù)) 4)運算符重載不能改變原運算符的操作數(shù)個數(shù);即一元運算符被重載后,還是一元運算符,二元運算符被重載后,還是二元運算符; 5)重載后的運算符必須至少有一個操作數(shù)是類的對象。這條限定防止編程者為基本數(shù)據(jù)類型重載運算符。否則,編程者有可能重載加法運算符“+”,來完成基本數(shù)據(jù)類型的減法運算; 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計10/21 C+對運算符重載的限定(續(xù)) 6) 運算符重載函數(shù)可以是類的成員函數(shù),也可以是類的友元函數(shù)。但是

6、以下的運算符只能通過成員函數(shù)進行重載。它們是:賦值運算符“=”、函數(shù)調(diào)用操作符“()”、數(shù)組下標操作符“”、使用指針訪問對象成員的操作符“-” 。 關(guān)鍵字operator用來聲明和定義運算符重載函數(shù)。運算符重載函數(shù)可以是類的非靜態(tài)成員函數(shù),也可以是類的友元函數(shù)。第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計11/21類的成員函數(shù)實現(xiàn)運算符重載 當運算符重載函數(shù)被定義為類的成員函數(shù)時,聲明和定義的語法格式如下: 在類中聲明運算符重載函數(shù)(類的成員函數(shù)) : 返回值類型 operator 運算符 (形參列表); 定義運算符重載函數(shù)(類的成

7、員函數(shù)) : 返回值類型 類名:operator 運算符 (形參列表) 函數(shù)體; 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計12/21類的成員函數(shù)實現(xiàn)運算符重載 形參列表中是運算符的操作對象,需要注意,因為被定義為是類的成員函數(shù),所以參數(shù)的個數(shù)應(yīng)該比運算符實際的操作數(shù)個數(shù)少一個,因為調(diào)用函數(shù)的對象本身就是運算符的一個操作數(shù)。例如,如果為A類重載了加法運算符“+”,用來完成兩個A類對象的相加操作,且運算符重載函數(shù)為類的成員函數(shù),則函數(shù)的聲明語句為: A operator+ (A a); 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運

8、算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計13/21重載一元運算符 一元運算符有前置(運算符在操作數(shù)之前,如-a,&a)和后置(運算符在操作數(shù)之后,如a+,a-)之分。 C+語法規(guī)定,當使用類的成員函數(shù)實現(xiàn)一元運算符重載時,前置一元運算符的重載函數(shù)沒有形式參數(shù);而后置一元運算符的重載函數(shù)有一個int型的形式參數(shù),這個int型參數(shù)的作用就是幫助編譯器區(qū)分前置和后置的一元運算符重載函數(shù),所以在定義函數(shù)時,無需寫出參數(shù)名。第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計14/21雙目運算符重載: 在類中聲明運算符重載

9、函數(shù)(類的成員函數(shù)) : 返回值類型 operator 運算符 (形參列表); 定義運算符重載函數(shù)(類的成員函數(shù)) : 返回值類型 類名:operator 運算符 (形參列表) 函數(shù)體; 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計15/21友元函數(shù)實現(xiàn)運算符重載 將運算符重載函數(shù)聲明和定義為類的友元函數(shù)的語法格式如下: 首先在類中使用關(guān)鍵字friend,將運算符重載函數(shù)聲明為類的友元函數(shù): friend 返回值類型 operator運算符(形參列表); 在類外定義友元函數(shù)時,不能使用關(guān)鍵字friend: 返回值類型 operato

10、r運算符(形參列表) 函數(shù)體; 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計16/21友元函數(shù)實現(xiàn)運算符重載 友元函數(shù)不是類的成員函數(shù),所以函數(shù)內(nèi)部沒有隱含的this指針,函數(shù)的參數(shù)個數(shù)和運算符的操作數(shù)個數(shù)相同。但對于一元運算符重載函數(shù)而言,在后置運算符重載函數(shù)中應(yīng)多聲明了一個int型參數(shù),該參數(shù)的唯一作用就是區(qū)分前置和后置重載函數(shù)。第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計17/21成員函數(shù)與友元函數(shù)實現(xiàn)運算符重載異同1) 成員函數(shù)較友元函數(shù)多一個參數(shù);2) 雙目運算

11、符均可以采用兩種方式實現(xiàn),單目運算符有時候只能采用友元來實現(xiàn);如: obj = 100 + obj;3) 調(diào)用方式可以采用習慣方式,也可采用專門方式調(diào)用;4) C+中的大部分運算符,可以聲明為成員或友元函數(shù)。 第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計18/21賦值運算符”=”的重載采用默認的賦值運算符實現(xiàn)的數(shù)據(jù)成員賦值是一種淺拷貝,涉及到深層次應(yīng)用的使用會產(chǎn)生一定的問題。第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計19/21這就是指針懸掛(Dangling Point

12、er)問題 導致懸掛指針的兩個經(jīng)典場景: 1、對已釋放的C+對象進行重引用,即釋放重引用漏洞; 2、函數(shù)返回本地變量指針,但該變量只在函數(shù)內(nèi)部定義,導致函數(shù)執(zhí)行完后此指針變成無效指針。第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計20/21深層復制解決賦值“=”的指針懸掛增加自定義賦值運算符重載函數(shù)第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4面向?qū)ο蟮某绦蛟O(shè)計21/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 運算符重載 小結(jié) 友元函數(shù)實現(xiàn) 普

13、通函數(shù)實現(xiàn) 指針懸掛的解決面向?qū)ο蟮某绦蛟O(shè)計22/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 類型轉(zhuǎn)換 系統(tǒng)預定義類型間的轉(zhuǎn)換 隱式類型轉(zhuǎn)換1)賦值表達式A=B,B先轉(zhuǎn)換成A類型再賦值2)char/short與int運算時,轉(zhuǎn)換成int類型3)操作對象不一致時,級別低轉(zhuǎn)級別高類型 顯式類型轉(zhuǎn)換(強制類型轉(zhuǎn)換) 類型名() 如:int(a + b)面向?qū)ο蟮某绦蛟O(shè)計23/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 類類型與系統(tǒng)預定義類型間的轉(zhuǎn)換 1、轉(zhuǎn)換構(gòu)造函數(shù)(構(gòu)造函數(shù)實現(xiàn)數(shù)據(jù)到類轉(zhuǎn)換) 在中定

14、義一個只有一個參數(shù)的構(gòu)造函數(shù),參數(shù)是待轉(zhuǎn)換類型的數(shù)據(jù),在函數(shù)體中指定轉(zhuǎn)換的方法。類名(待轉(zhuǎn)換類型的數(shù)據(jù)) 如: Complex(7.7) 面向?qū)ο蟮某绦蛟O(shè)計24/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 類類型與系統(tǒng)預定義類型間的轉(zhuǎn)換 2、類型轉(zhuǎn)換函數(shù) 類型轉(zhuǎn)換函數(shù)的作用是將一個類的對象轉(zhuǎn)換成另一類型的數(shù)據(jù)。operator 目標類型()函數(shù)體 如: double(com);面向?qū)ο蟮某绦蛟O(shè)計25/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 C+中的強制類型轉(zhuǎn)換 顯示轉(zhuǎn)換(explicit c

15、onversion)也稱強制類型轉(zhuǎn)換,主要包括一下四種強制類型轉(zhuǎn)換操作符: const_cast,字面上理解就是去const屬性。 static_cast,命名上理解是靜態(tài)類型轉(zhuǎn)換。 如int轉(zhuǎn)換成char。 dynamic_cast,命名上理解是動態(tài)類型轉(zhuǎn)換。 如子類和父類之間的多態(tài)類型轉(zhuǎn)換。 reinterpreter_cast,僅僅重新解釋類型,但沒有進行二進制的轉(zhuǎn)換。強制類型轉(zhuǎn)換的一般格式:強制類型轉(zhuǎn)換的一般格式: cast_name(expression)面向?qū)ο蟮某绦蛟O(shè)計26/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 C+中的強制

16、類型轉(zhuǎn)換 1) static_cast(a)將地址a轉(zhuǎn)換成類型T,T和a必須是指針、引用、算術(shù)類型或枚舉類型。表達式static_cast(a),a的值轉(zhuǎn)換為模板中指定的類型T。在運行時轉(zhuǎn)換過程中,不進行類型檢查來確保轉(zhuǎn)換的安全性。 static_cast它能在內(nèi)置的數(shù)據(jù)類型間互相轉(zhuǎn)換,對于類只能在有聯(lián)系的指針類型間進行轉(zhuǎn)換??梢栽诶^承體系中把指針轉(zhuǎn)換來、轉(zhuǎn)換去,但是不能轉(zhuǎn)換成繼承體系外的一種類型。面向?qū)ο蟮某绦蛟O(shè)計27/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 C+中的強制類型轉(zhuǎn)換 2)dynamic_cast(a)完成類層次結(jié)構(gòu)中的提升。

17、T必須是一個指針、引用或無類型的指針。a必須是決定一個指針或引用的表達式。表達式dynamic_cast(a) 將a值轉(zhuǎn)換為類型為T的對象指針。如果類型T不是a的某個基類型,該操作將返回一個空指針。 與static_cast一樣,dynamic_cast的轉(zhuǎn)換也需要目標類型和源對象有一定的關(guān)系:繼承關(guān)系。 dynamic_cast要比static_cast安全,如果轉(zhuǎn)換不了,dynamic_cast會返回NULL。面向?qū)ο蟮某绦蛟O(shè)計28/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 C+中的強制類型轉(zhuǎn)換3) const_cast(a)/b 去掉類

18、型中的常量,除了const或不穩(wěn)定的變址數(shù),T和a必須是相同的類型。表達式const_cast(a)被用于從一個類中去除以下這些屬性:const, volatile, 和unaligned。面向?qū)ο蟮某绦蛟O(shè)計29/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 C+中強制類型轉(zhuǎn)換: 任何指針都可以轉(zhuǎn)換成其它類型的指針,T必須是一個指針、引用、算術(shù)類型、指向函數(shù)的指針或指向一個類成員的指針。表達式reinterpret_cast(a)能夠用于諸如char* 到 int*,或者One_class* 到 Unrelated_class*等類似這樣的轉(zhuǎn)換,

19、因此可能是不安全的。面向?qū)ο蟮某绦蛟O(shè)計30/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 類型轉(zhuǎn)換 構(gòu)造函數(shù)實現(xiàn)的賦值“=” 強制類型轉(zhuǎn)換面向?qū)ο蟮某绦蛟O(shè)計31/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù) 多態(tài)從實現(xiàn)的角度來講可以劃分為兩類:編譯時的多態(tài)和運行時的多態(tài)。 編譯時的多態(tài)是通過靜態(tài)聯(lián)編來實現(xiàn)的。靜態(tài)聯(lián)編就是在編譯階段完成的聯(lián)編。編譯時多態(tài)性主要是通過函數(shù)重載和運算符重載實現(xiàn)的。 運行時的多態(tài)是用動態(tài)聯(lián)編實現(xiàn)的。動態(tài)聯(lián)編是運行階段完成的聯(lián)編。運行時多態(tài)性主要是通過虛函數(shù)虛函數(shù)來實

20、現(xiàn)的。 面向?qū)ο蟮某绦蛟O(shè)計32/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù) 虛函數(shù)提供了一種更為靈活的多態(tài)性機制。虛函數(shù)允許函數(shù)調(diào)用與函數(shù)體之間的聯(lián)系在運行時才建立,也就是在運行時才決定如何動作,即所謂的動態(tài)聯(lián)編。 面向?qū)ο蟮某绦蛟O(shè)計33/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù)的引入 C+規(guī)定:基類的對象指針可以指向它的公有派生的對象,但是當其指向公有派生類對象時,只能訪問派生類中從基類繼承來的成員,而不能訪問公有派生類中定義的成員。面向?qū)ο蟮某绦蛟O(shè)計34/21第五章、多態(tài)性

21、第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù)的作用和定義(1) 虛函數(shù)同派生類的結(jié)合可使C+支持運行時的多態(tài)性,實現(xiàn)了在基類定義派生類所擁有的通用接口,而在派生類定義具體的實現(xiàn)方法,即常說的“同一接口,多種方法”,它幫助程序員處理越來越復雜的程序。面向?qū)ο蟮某绦蛟O(shè)計35/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù)的定義和作用(2)面向?qū)ο蟮某绦蛟O(shè)計36/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù)的定義和作用(3) 定義虛函數(shù)的方法如下: vi

22、rtual 函數(shù)類型 函數(shù)名(形參表) / 函數(shù)體 如果在基類中聲明虛成員函數(shù),則在所有派生類中該函數(shù)都是虛函數(shù),即使在派生類中聲明該函數(shù)時沒有使用關(guān)鍵字virtual。 當使用基類指針或引用調(diào)用虛成員函數(shù)時,實際調(diào)用的是指針指向的具體對象所屬類中定義(覆蓋)的成員函數(shù)。這種函數(shù)調(diào)用方式稱為多態(tài)調(diào)用。 面向?qū)ο蟮某绦蛟O(shè)計37/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù)的定義與作用(4) 注意:虛函數(shù)的聲明應(yīng)該放在基類中,如果只在派生類中將成員函數(shù)聲明為虛函數(shù),則即使基類指針實際指向的是派生類的對象,也不能通過該指針調(diào)用派生類中的虛成員函

23、數(shù)。如果想在某個類層次中實現(xiàn)多態(tài),則應(yīng)該在這個層次中的基類里聲明虛函數(shù)。 說明: 不能將類的靜態(tài)成員函數(shù)聲明為虛函數(shù) ; 不能將類的構(gòu)造函數(shù)聲明為虛函數(shù); 應(yīng)該把類的析構(gòu)函數(shù)聲明為虛函數(shù)。面向?qū)ο蟮某绦蛟O(shè)計38/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù)與動態(tài)綁定(1) 為什么只有虛成員函數(shù)才能實現(xiàn)多態(tài)調(diào)用呢?這是由編譯器處理函數(shù)調(diào)用的方式?jīng)Q定的。非虛函數(shù)的調(diào)用方式為靜態(tài)綁定靜態(tài)綁定,而虛函數(shù)的調(diào)用方式為動態(tài)綁動態(tài)綁定定。 綁定是指將函數(shù)調(diào)用和實際的函數(shù)相連接的過程。分為靜態(tài)綁定和動態(tài)綁定。 面向?qū)ο蟮某绦蛟O(shè)計39/21第五章、多態(tài)性第五章、多態(tài)性多態(tài)性概念5.1運算符重載5.2類型轉(zhuǎn)換5.3 虛函數(shù)5.4 虛函數(shù)與動態(tài)綁定(2) 靜態(tài)綁定是在程序編譯時,就確定要調(diào)用的函數(shù),并用函數(shù)的相對地址直接調(diào)用函數(shù),所以靜態(tài)綁定又被稱為編譯期綁定或前期綁定。 動態(tài)綁定是指,在程序編譯期無法確定要調(diào)用的函數(shù),在程序的運行過程中,根據(jù)調(diào)用函數(shù)的指針或引用變量所引用的對象的具體類型動態(tài)地確定要調(diào)用的函數(shù)。所以動態(tài)綁定又被稱為運行期綁定或后期綁定。C+中的虛成員函數(shù)使用動態(tài)綁定方式進行調(diào)用

溫馨提示

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

評論

0/150

提交評論