• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      面向?qū)ο蟪绦蛟O(shè)計中多態(tài)性探討

      2017-06-05 15:04劉變蓮
      電腦知識與技術(shù) 2017年10期
      關(guān)鍵詞:多態(tài)繼承靜態(tài)

      劉變蓮

      摘要:該文主要討論面向?qū)ο蟪绦蛟O(shè)計中的多態(tài)問題,其中包括:靜態(tài)和動態(tài)多態(tài)兩種。用例子解釋說明其中抽象的概念。

      關(guān)鍵詞:多態(tài);動態(tài);靜態(tài);繼承;封裝

      中圖分類號:TP311

      文獻標識碼:A

      文章編號:1009-3044(2017)10-0060-02

      1.面向?qū)ο蟪绦蛟O(shè)計的基本特性:封裝、繼承、多態(tài)

      類是封裝的基本單位,使得創(chuàng)建類和使用類完全分開,保護類中數(shù)據(jù)的安全,同時又可以方便地使用別人創(chuàng)建的類。正如手機大家都會使用,就是建立在手機的制造者使用封裝機制,才使得大家都會用手機而不用關(guān)心手機的內(nèi)部工作細節(jié)一樣;建立新類可以用繼承機制,從而有效利用已有類的代碼,提高開發(fā)效率。正如汽車的設(shè)計也利用繼承已有的汽車設(shè)計方案一樣,而不是搬倒重來,這樣太不合算了。多態(tài)性可以解決有層次關(guān)系的類之間繼承并擴展的問題,可以在一定程度上忽略類之間的區(qū)別,而以統(tǒng)一的方式使用它們的對象,從而在繼承的基礎(chǔ)上得以很好的擴展。同時也可以解決建立新類時,已有運算符使用問題,從而使原有運算符號適合新創(chuàng)建的類(新的數(shù)據(jù)類型)。下面重點討論多態(tài)。多態(tài)分成兩種:靜態(tài)多態(tài)和動態(tài)多態(tài)。

      2.靜態(tài)多態(tài)

      平時在學習時語法很好理解,但是難點在于實際編程時的靈活使用。

      靜態(tài)多態(tài)也叫編譯時多態(tài),也叫早綁定。即,函數(shù)名和函數(shù)代碼的對應(yīng)問題在編譯階段就可以確定,函數(shù)重載和運算符重載都屬于靜態(tài)綁定的情況。

      2.1函數(shù)重載

      函數(shù)重載是指一個函數(shù)名對應(yīng)多份函數(shù)定義代碼。這樣就可以選擇其一來執(zhí)行。選擇的依據(jù)是:參數(shù)個數(shù)或參數(shù)類型的不同,根據(jù)實參和形參匹配的情況決定。下面舉例說明。

      這個例子中的addo函數(shù)就是靜態(tài)多態(tài)的實例。在編譯階段編譯器是通過參數(shù)的不同選擇不同的重載版本,從而就可以確定addO函數(shù)名是調(diào)用(對應(yīng))哪一個版本的代碼,稱這種情況是早綁定,也就是在編譯階段函數(shù)名和函數(shù)代碼完成了綁定。

      下面再舉一個復數(shù)的例子,了解運算符重載的情況。

      2.2運算符重載

      每一種計算機編程語言都包含了許多運算操作符號。但是這些運算符只適用于基本類型的數(shù)據(jù)。新定義的類,屬于新數(shù)據(jù)類型,也可以同基本數(shù)據(jù)類型一樣完成加、減、乘、除等常見的運算。條件是在新定義類的內(nèi)部添加運算符重載函數(shù)。其中的運算符重載函數(shù)有兩種形式:類的成員函數(shù)和類的友元函數(shù)。

      一個新定義的復數(shù)類,也可以完成兩個復數(shù)的加法和減法,同時復數(shù)對象也可以整體輸入和輸出。

      只要在定義復數(shù)類時,在其中增加運算符重載函數(shù)即可。

      下面的程序功能是:定義復數(shù)類,其中有加法和減法的2

      3.動態(tài)多態(tài)一虛函數(shù)

      上面說明了靜態(tài)多態(tài)的情況,下面說明動態(tài)多態(tài)。

      動態(tài)多態(tài)是指程序運行時,根據(jù)指針指向?qū)ο蟮牟煌?,從而調(diào)用不同層次(有繼承關(guān)系)對象的同名函數(shù)。保證基類和派生類之間同名函數(shù)用統(tǒng)一的調(diào)用形式訪問,從而方便擴展。C++語言是用虛函數(shù)實現(xiàn)動態(tài)多態(tài)的。

      虛函數(shù)是實現(xiàn)動態(tài)多態(tài)的基礎(chǔ),原因是只要函數(shù)被聲明為虛函數(shù)了,編譯器就會形成類對應(yīng)的虛函數(shù)表。其中的虛函數(shù)表中存儲了每一個類中虛函數(shù)的地址,同時,包含虛函數(shù)的類對象內(nèi)存中也存儲了指向虛函數(shù)表的指針,從而在程序運行時,可以正確找到相應(yīng)虛函數(shù)的地址,以便正確調(diào)用它。但是要求用基類指針或基類引用指向基類對象或派生類對象,同時要保證基類中的虛函數(shù)和派生類的虛函數(shù),函數(shù)原型必須一致才行。下面舉例說明。

      這些是使用虛函數(shù)的條件。即定義基類指針變量,它可以指向派生類對象,也可以指向基類對象,同時,基類的虛函數(shù)和派生類的虛函數(shù)必須保持原型一致,這樣才能保證在編譯時,編譯器為包含虛函數(shù)的類生成虛函數(shù)表,從而才能保證程序運行時,指針指向不同對象來調(diào)用不同類對象中的虛函數(shù)。如下是該程序的相應(yīng)虛函數(shù)表及對象的內(nèi)存結(jié)構(gòu)圖。

      編譯程序時,編譯器為虛函數(shù)的調(diào)用建立了虛函數(shù)表,及對象的內(nèi)存中存儲了指向虛函數(shù)表的指針,才能為后期程序運行時順利找到對應(yīng)虛函數(shù)做了前期準備,才能完成動態(tài)多態(tài)。

      綜上所述,面向?qū)ο缶幊痰娜筇匦允牵悍庋b、繼承和多態(tài)。封裝能保證數(shù)據(jù)的安全,同時使創(chuàng)建類和使用類分離。繼承是復用類代碼,同時多態(tài)使復用基類代碼的同時可以改造基類的代碼,并且還可以保持基類和派生類對象使用接口的一致性,為擴展提供了方便。

      猜你喜歡
      多態(tài)繼承靜態(tài)
      分層多態(tài)加權(quán)k/n系統(tǒng)的可用性建模與設(shè)計優(yōu)化
      最新進展!中老鐵路開始靜態(tài)驗收
      參差多態(tài)而功不唐捐
      猜猜他是誰
      淺談杜審言、杜甫的祖孫關(guān)系:推崇、繼承、發(fā)展
      具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
      50t轉(zhuǎn)爐靜態(tài)控制模型開發(fā)及生產(chǎn)實踐
      煙堿型乙酰膽堿受體基因多態(tài)與早發(fā)性精神分裂癥的關(guān)聯(lián)研究
      富源县| 五指山市| 板桥市| 屯留县| 龙州县| 乌兰县| 永州市| 山西省| 甘德县| 始兴县| 化德县| 潜江市| 九龙城区| 平武县| 四会市| 佛学| 福贡县| 包头市| 南通市| 晋宁县| 安岳县| 民权县| 阜城县| 堆龙德庆县| 炉霍县| 布拖县| 清新县| 北碚区| 遵义市| 华安县| 丹阳市| 盐亭县| 呼玛县| 调兵山市| 武平县| 呼伦贝尔市| 松溪县| 定襄县| 新乐市| 广水市| 奇台县|