freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c程序設(shè)計(jì)教程:第9章-多態(tài)性和虛-展示頁(yè)

2024-10-10 16:15本頁(yè)面
  

【正文】 定使用動(dòng)態(tài)聯(lián)編 。 虛函數(shù)實(shí)現(xiàn)多態(tài)性的條件 ? 關(guān)鍵字 virtual 指示 C++編譯器對(duì)調(diào)用虛函數(shù)進(jìn)行 動(dòng)態(tài)聯(lián)編 。 在上節(jié)的例子中 , 基類 Point聲明成員函數(shù) area為“ virtual void area(void)。 //聲明虛函數(shù) }。 虛函數(shù)只能是類中的一個(gè)成員函數(shù) , 但不能是靜態(tài)成員 , 關(guān)鍵字 virtual用于類中該函數(shù)的聲明中 。一旦基類定義了虛函數(shù),該基類的派生類中的同名函數(shù)也自動(dòng)成為虛函數(shù)。 時(shí) , 才能確定 p指向的是派生類 Circle的對(duì)象 ,應(yīng)該調(diào)用 Circle::area()函數(shù) 。 這有點(diǎn)像名字支配規(guī)律 ,不過(guò)虛函數(shù)是動(dòng)態(tài)綁定的 , 是在執(zhí)行期 “ 間接 ”調(diào)用實(shí)際上欲綁定的函數(shù) 。 如圖 ,派生類 Circle的函數(shù)指針調(diào)用的是 Circle::area()。 如果派生類沒(méi)有改寫(xiě)繼承基類的虛函數(shù) , 則函數(shù)指針調(diào)用基類的虛函數(shù) 。 當(dāng)調(diào)用虛函數(shù)時(shí),先通過(guò) vptr找到虛函數(shù)表,然后再找出虛函數(shù)的真正地址。 圖 虛函數(shù)和虛函數(shù)表示意圖 ? 由此可見(jiàn), 虛函數(shù)的地址翻譯取決于對(duì)象的內(nèi)存地址。 Point只有一個(gè)虛函數(shù),所以虛函數(shù)表里也只有一項(xiàng)。 } ? 當(dāng)編譯系統(tǒng)編譯含有虛函數(shù)的類時(shí),為它建立一個(gè)虛函數(shù)表,表中的每一個(gè)元素都指向一個(gè)虛函數(shù)的地址。 ? 假設(shè)使用關(guān)鍵字 virtual聲明 Point類的 area函數(shù) ,將這種函數(shù)稱為虛函數(shù) 。 顯然 , 目前是做不到的 。至于 “ parea()”調(diào)用哪個(gè)函數(shù),等程序運(yùn)行到這里時(shí)再?zèng)Q定。c。編譯器編譯成員函數(shù)是根據(jù)數(shù)據(jù)類型,類型是事先決定了的,所以由靜態(tài)聯(lián)編決定。引用的情況與指針一樣,所以 (6)也輸出 0。 p的原始類型是 Point,使用 Point的指針只能調(diào)用對(duì)象 c的基類的 area函數(shù)。 //(3) coutarea of Circle is parea()endl。對(duì)于程序中的如下代碼段: Point *p=amp。 它們的原始類型決定它們只能調(diào)用各自的同名函數(shù) area。 圖 Point和派生類 Circle的 UML表示圖 , 類圖中只給出同名函數(shù) , 并且在它們的右邊給出聲明的類指針與類的關(guān)系 。 如果聲明如下兩個(gè)指針: Point * pPiont。 這些成員函數(shù)的地址翻譯過(guò)程與其對(duì)象的內(nèi)存地址無(wú)關(guān) 。 圖 Point的對(duì)象 a和 Circle對(duì)象 c的內(nèi)存分配關(guān)系示意圖 。 (4)和 (5)的道理與此一樣 , 輸出為 0。名字支配規(guī)律決定它們調(diào)用各自的同名函數(shù) area。 根據(jù)編號(hào)解釋如下: ? 編譯器對(duì) (1)的解釋是:顯式的 ()表達(dá)式明確告訴編譯器,它調(diào)用的是對(duì)象 a的成員函數(shù)area,輸出 0。 //(5) coutarea of Circle is ()endl。 //(4) Point amp。c。 //(1) coutarea of Circle is ()endl。 Circle c(, , )。 } }。 public: Circle(double a, double b,double r) :Point(a,b) { radius=r。 } }。 y=j。 class Point { private: double x,y。 include iostream using namespace std。類的對(duì)象和調(diào)用的函數(shù)一一對(duì)應(yīng),編譯時(shí)即可確定調(diào)用關(guān)系,從而產(chǎn)生編譯時(shí)的多態(tài)性。 靜態(tài)聯(lián)編中的賦值兼容性及名字支配規(guī)律 ? 派生一個(gè)類的原因并非總是為了添加新的數(shù)據(jù)成員或成員函數(shù),有時(shí)是為了重新定義基類的函數(shù)。動(dòng)態(tài)聯(lián)編所支持的多態(tài)性稱為 運(yùn)行時(shí)的多態(tài)性 ,這由虛函數(shù)來(lái)支持 。 ? 靜態(tài)聯(lián)編所支持的多態(tài)性稱為 編譯時(shí)的多態(tài)性 。 ? 本章將重點(diǎn)集中于介紹運(yùn)行時(shí)的多態(tài)性,并結(jié)合圖解和程序?qū)嵗龓椭x者更好地理解多態(tài)性。 ? 聯(lián)編是描述編譯器決定在程序運(yùn)行時(shí),一個(gè)函數(shù)調(diào)用應(yīng)執(zhí)行哪段代碼的一個(gè)術(shù)語(yǔ),是實(shí)現(xiàn)多態(tài)性的基礎(chǔ)。第 9章 多態(tài)性和虛函數(shù) ? C++支持兩種多態(tài)性,即編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性通過(guò)使用重載函數(shù)或模板獲得,運(yùn)行時(shí)的多態(tài)性通過(guò)使用繼承和虛函數(shù)來(lái)獲得。由于多態(tài)性是一個(gè)與實(shí)現(xiàn)有關(guān)的概念,因而難于理解和掌握。 多 態(tài) 性 ? 多態(tài)性也稱后約束 (late binding) 或動(dòng)態(tài)約束 (dynamic binding) , 它常用虛函數(shù) (virtual functions) 來(lái)實(shí)現(xiàn) 。當(dāng)調(diào)用重載函數(shù)時(shí) , 編譯器可以根據(jù)調(diào)用時(shí)所使用的實(shí)參在編譯時(shí)就確定下來(lái)應(yīng)調(diào)用哪個(gè)函數(shù) 。 虛函數(shù)類似于重載函數(shù) , 但與重載函數(shù)的實(shí)現(xiàn)策略不同 , 即對(duì)虛函數(shù)的調(diào)用使用動(dòng)態(tài)聯(lián)編 。例如在第 8章的 【 例 】 中,類 Point和類Rectangle各有一個(gè) Show( void)函數(shù),各自完成不同的功能。 【 例 】 分析下面程序的輸出結(jié)果。 const double PI=。 public: Point(double i, double j) { x=i。 } double area( ) { return 0。 class Circle : public Point { private: double radius。 } double area( ) { return PI*radius*radius。 void main(){ Point a(,)。 coutarea of Point is ()endl。 //(2) Point *p=amp。 //(3) coutarea of Circle is parea()endl。rc=c。 } //(6) ? 為了便于理解 , 在注釋中給出相應(yīng)編號(hào) 。同理,對(duì)于 (2)而言,顯式的()表達(dá)式明確表示調(diào)用的是對(duì)象 c的成員函數(shù) area,輸出 。 ? (3)和 (4)的問(wèn)題實(shí)質(zhì)是:如果基類和派生類都定義了 “ 相同名稱之成員函數(shù) ” , 通過(guò)對(duì)象指針調(diào)用成員函數(shù)時(shí) ,是決定該指針的基類類型 , 還是決定指針實(shí)際所指的類型 ? 也 就 是 說(shuō) , 表 達(dá) 式 “ parea()” 應(yīng) 該 調(diào) 用Point::area(), 還是調(diào)用 C
點(diǎn)擊復(fù)制文檔內(nèi)容
化學(xué)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1