• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    什么是虛擬函數(Virtual Function)?

    虛函數是在超類中定義的函數,它必須存在于子類中才能有完整的類定義。虛函數依賴于稱為虛繼承的面向對象編程范式,這在C中最常見的是使用“virtual”關鍵字。要定義虛函數,有兩個類是必需的,一個超類和一個子類。超類是首...
    虛函數是在超類中定義的函數,它必須存在于子類中才能有完整的類定義。虛函數依賴于稱為虛繼承的面向對象編程范式,這在C中最常見的是使用“virtual”關鍵字。要定義虛函數,有兩個類是必需的,一個超類和一個子類。超類是首先聲明函數的地方,也可能是定義函數的地方。子類是定義函數或重寫函數的地方,這取決于函數是否在超類中定義。要定義虛函數,需要兩個類,一個超類和一個子類。虛函數可以用兩種方法之一來定義:第一,它可以定義為存根,在存根中它有一個空的主體,什么也不做;第二個,它可以定義為一個純虛函數,在超類的頭文件中,它被定義為NULL。這兩種方法各有優缺點。將函數定義為存根可以確保所有子類都能實現它,即使它什么都不做。但是,如果忘記重寫函數并在子類中正確實現它,不會出現任何錯誤或警告來指出這一點。另一方面,定義純虛函數要求每個子類都有自己的函數定義,如果不是這樣,就會出現錯誤。但是,虛擬函數與非虛函數遵循相同的繼承規則,因此,兩級以上的繼承層次結構可能不需要顯式定義虛函數,例如可以考慮一個聲明虛函數的類a,它是在子類B中實現的,B類有自己的子類,C類不需要顯式定義類a~s函數,因為它繼承了B類的定義如有必要,C類可以重寫類B~s函數,也可以在調用類B~s函數的同時重寫它。另一個極端是,如果虛函數在子類中聲明為虛函數,則不必在該子類中定義。例如,可以考慮聲明虛函數并有兩個子類B的類a另外,我們可以想象B類有D和E的子類,C類有F和G的子類。B類到G類都必須定義A~s類的虛函數。如果B類有A~s函數的實現,D類和E類不需要重做。也許C~s子類需要實現A~s函數,但是它們都做了一些不同的事情,所以在C類中定義函數本身就沒什么用了。在這種情況下,函數在C類中可能被聲明為虛函數,并且不需要實現。虛擬函數學習起來可能會令人望而生畏,但如果使用得當,它們可以減少代碼重復并使代碼更易于理解一般來說,虛函數有很多缺陷,尤其是在多重繼承方面。在多重繼承中,模糊定義的虛函數可能會相互沖突,因此在這種情況下應謹慎使用
    • 發表于 2020-08-06 19:59
    • 閱讀 ( 700 )
    • 分類:電腦網絡

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    admin
    admin

    0 篇文章

    作家榜 ?

    1. xiaonan123 189 文章
    2. 湯依妹兒 97 文章
    3. luogf229 46 文章
    4. jy02406749 45 文章
    5. 小凡 34 文章
    6. Daisy萌 32 文章
    7. 我的QQ3117863681 24 文章
    8. 華志健 23 文章

    推薦文章

    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆