亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c++

?? c++技巧
??
?? 第 1 頁 / 共 2 頁
字號:

  1. inline 定義的類的內聯函數,函數的代碼被放入符號表中,在使用時直接進行替換,(像宏一樣展開),沒有了調用的開銷,效率也很高。 

  2. 很明顯,類的內聯函數也是一個真正的函數,編譯器在調用一個內聯函數時,會首先檢查它的參數的類型,保證調用正確。然后進行一系列的相關檢查,就像對待任何一個真正的函數一樣。這樣就消除了它的隱患和局限性。 

  3. inline 可以作為某個類的成員函數,當然就可以在其中使用所在類的保護成員及私有成員。 



在何時使用inline函數:

  首先,你可以使用inline函數完全取代表達式形式的宏定義。

  另外要注意,內聯函數一般只會用在函數內容非常簡單的時候,這是因為,內聯函數的代碼會在任何調用它的地方展開,如果函數太復雜,代碼膨脹帶來的惡果很可能會大于效率的提高帶來的益處。 內聯函數最重要的使用地方是用于類的存取函數。 

如何使用類的inline函數: 

簡單提一下inline 的使用吧:

1.在類中定義這種函數:

class ClassName{

.....

....

GetWidth(){return m_lPicWidth;}; // 如果在類中直接定義,可以不使用inline修飾

....

....

} 

2.在類中聲明,在類外定義:

class ClassName{

.....

....

GetWidth(); // 如果在類中直接定義,可以不使用inline修飾

....

....

} 

inline GetWidth(){

return m_lPicWidth;

}

  在本篇中,談了一種特殊的函數,類的inline函數,它的源起和特點在某種說法上與const很類似,可以與const搭配起來看。另外,最近有許多朋友與我Mail交往,給我談論了許多問題,給了我很多啟發,在此表示感謝。 


C++辨析系列談之四
4/26/2001 9:23:18· 鄭力群 ·yesky


  前言

  面向對象程序設計的基本觀點是用程式來仿真大千世界,這使得它的各種根本特性非常人性化,如封裝、繼承、多態等等,而虛擬函數就是C++中實現多態性的主將。為了實現多態性,C++編譯器也革命性地提供了動態聯編(或叫晚捆綁)這一特征。

  虛擬函數亦是MFC編程的關鍵所在,MFC編程主要有兩種方法:一是響應各種消息,進行對應的消息處理。二就是重載并改寫虛擬函數,來實現自己的某些要求或改變系統的某些默認處理。

  虛函數的地位是如此的重要,對它進行窮根究底,力求能知其然并知其所以然 對我們編程能力的提高大有好處。下面且聽我道來。

  多態性和動態聯編的實現過程分析

  一、基礎略提(限于篇幅,請參閱相應的C++書籍):

  1、多態性:使用基礎類的指針動態調用其派生類中函數的特性。

  2、動態聯編:在運行階段,才將函數的調用與對應的函數體進行連接的方式,又叫運行時聯編或晚捆綁。

  二、過程描述:

  1、編譯器發現一個類中有虛函數,編譯器會立即為此類生成虛擬函數表 VTABLE(后面有對VTABLE的分析)。虛擬函數表的各表項為指向對應虛擬函數的指針。

  2、編譯器在此類中隱含插入一個指針VPTR(對VC編譯器來說,它插在類的第一個位置上)。

  有一個辦法可以讓你感知這個隱含指針的存在,雖然你不能在類中直接看到它,但你可以比較一下含有虛擬函數時的類的尺寸和沒有虛擬函數時的類的尺寸,你能夠發現,這個指針確實存在。 

  class CNoVirtualFun
   {
    private:
    LONG lMember;
    public:
    LONG GetMemberValue();
   } class CHaveVirtualFun
   {
    private:
     LONG lMember;
    public:
     virtual LONG GetMemberValue();
    } 

   CNoVirtualFun obj;
   sizeof(obj) -> == 4; 
   CHaveVirtualFun obj;
   sizeof(obj) -> == 8; 

  3、在調用此類的構造函數時,在類的構造函數中,編譯器會隱含執行VPTR與VTABLE的關聯代碼,將VPTR指向對應的VTable。這就將類與此類的VTABLE聯系了起來。

  4、在調用類的構造函數時,指向基礎類的指針此時已經變成指向具體的類的this指針,這樣依靠此this指針即可得到正確的VTABLE,從而實現了多態性。在此時才能真正與函數體進行連接,這就是動態聯編。


三、VTABLE 分析:

  分析1:虛擬函數表包含此類及其父類的所有虛擬函數的地址。如果它沒有重載父類的虛擬函數,VTABLE中對應表項指向其父類的此函數。反之,指向重載后的此函數。

  分析2:虛擬函數被繼承后仍舊是虛擬函數,虛擬函數非常嚴格地按出現的順序在 VTABLE 中排序,所以確定的虛擬函數對應 VTABLE 中一個固定的位置n,n是一個在編譯時就確定的常量。所以,使用VPTR加上對應的n,就可得到對應函數的入口地址。

  四、編譯器調用虛擬函數的匯編碼(參考Think in C++):

  push FunParam ;先將函數參數壓棧

  push si ;將this指針壓棧,以確保在當前類上操作

  mov bx,word ptr[si] ;因為VC++編譯器將VPTR放在類的第一個位置上,所以bx內為VPTR

  call word ptr[bx+n] ;調用虛擬函數。n = 所調用的虛擬函數在對應 VTABLE 中的位置 



   純虛函數:

  一、引入原因:

  1、為了方便使用多態特性,我們常常需要在基類中定義虛擬函數。

  2、在很多情況下,基類本身生成對象是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成對象明顯不合常理。

  為了解決上述問題,引入了純虛函數的概念,將函數定義為純虛函數(方法:virtual ReturnType Function()= 0;),則編譯器要求在派生類中必須予以重載以實現多態性。同時含有純虛擬函數的類稱為抽象類,它不能生成對象。這樣就很好地解決了上述兩個問題。

  二、純虛函數實質:

  1、類中含有純虛函數則它的VTABLE表不完全,有一個空位,所以,不能生成對象(編譯器絕對不允許有調用一個不存在函數的可能)。在它的派生類中,除非重載這個函數,否則,此派生類的VTABLE表亦不完整,亦不能生成對象,即它也成為一個純虛基類。



  虛函數與構造、析構函數:

  1、構造函數本身不能是虛擬函數;并且虛機制在構造函數中不起作用(在構造函數中的虛擬函數只會調用它的本地版本)。

  想一想,在基類構造函數中使用虛機制,則可能會調用到子類,此時子類尚未生成,有何后果!?。

  2、析構函數本身常常要求是虛擬函數;但虛機制在析構函數中不起作用。

  若類中使用了虛擬函數,析構函數一定要是虛擬函數,比如使用虛擬機制調用delete,沒有虛擬的析構函數,怎能保證delete的是你希望delete的對象。

  虛機制也不能在析構函數中生效,因為可能會引起調用已經被delete掉的類的虛擬函數的問題。

  對象切片:

  向上映射(子類被映射到父類)的時候,會發生子類的VTABLE 完全變成父類的VTABLE的情況。這就是對象切片。

  原因:向上映射的時候,接口會變窄,而編譯器絕對不允許有調用一個不存在函數的可能,所以,子類中新派生的虛擬函數的入口在VTABLE中會被強行“切”掉,從而出現上述情況。

  虛擬函數使用的缺點

  優點講了一大堆,現在談一下缺點,虛函數最主要的缺點是執行效率較低,看一看虛擬函數引發的多態性的實現過程,你就能體會到其中的原因。



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久日韩粉嫩一区二区三区| 欧美一区二区美女| 琪琪久久久久日韩精品| 中文字幕乱码一区二区免费| 欧美视频在线观看一区二区| 极品少妇一区二区| 五月综合激情婷婷六月色窝| 国产日韩欧美制服另类| 这里只有精品99re| 91亚洲精品一区二区乱码| 国产综合久久久久久鬼色| 亚洲成人免费观看| 亚洲男人的天堂在线aⅴ视频| 亚洲精品一区二区三区影院| 欧美日韩久久久| 99riav久久精品riav| 国产精品一区久久久久| 日韩av电影免费观看高清完整版 | 久久久久国产成人精品亚洲午夜| 色成年激情久久综合| 国产伦精品一区二区三区视频青涩 | 欧美一区二区三区性视频| eeuss鲁片一区二区三区在线看| 另类综合日韩欧美亚洲| 午夜在线成人av| 伊人色综合久久天天| 国产精品久久久久久久久久免费看| 欧美一级黄色片| 69成人精品免费视频| 欧美日韩国产影片| 在线免费一区三区| 91免费视频大全| 成人网在线免费视频| 国产福利一区二区三区视频在线| 理论电影国产精品| 久久国产精品99久久人人澡| 青青国产91久久久久久| 日韩高清一级片| 日本亚洲一区二区| 久久精品国产精品亚洲红杏| 美国欧美日韩国产在线播放| 日本视频免费一区| 日精品一区二区| 亚洲不卡在线观看| 日日夜夜免费精品视频| 日本不卡不码高清免费观看| 秋霞影院一区二区| 精品一区二区三区的国产在线播放| 麻豆视频观看网址久久| 国模少妇一区二区三区| 国产乱码字幕精品高清av| 国产99久久久精品| 99久久精品情趣| 91偷拍与自偷拍精品| 精品视频999| 91精品一区二区三区在线观看| 日韩欧美资源站| 久久久久久电影| 中文无字幕一区二区三区| 国产精品电影一区二区| 一区二区在线观看视频在线观看| 亚洲一区二区三区自拍| 喷白浆一区二区| 国产精品亚洲第一区在线暖暖韩国| 岛国精品一区二区| 色综合久久88色综合天天免费| 樱花草国产18久久久久| 国产精品丝袜久久久久久app| 成人免费在线播放视频| 亚洲丰满少妇videoshd| 精品综合免费视频观看| 成人av在线观| 欧美精品久久99| 久久亚洲春色中文字幕久久久| 国产精品成人免费在线| 亚洲午夜久久久久久久久电影网 | 日韩激情一区二区| 精品一区二区国语对白| av在线播放一区二区三区| 欧美精品在线视频| 国产清纯在线一区二区www| 亚洲一区在线视频| 激情国产一区二区| 91麻豆国产精品久久| 日韩一区二区免费高清| 综合色天天鬼久久鬼色| 蜜臀av性久久久久蜜臀aⅴ | 欧美精品国产精品| 国产视频在线观看一区二区三区| 一级中文字幕一区二区| 国内精品久久久久影院一蜜桃| 日本二三区不卡| 精品久久久久久久久久久久久久久久久 | 91精品1区2区| 久久久综合精品| 亚洲五码中文字幕| 成人激情开心网| 欧美一级视频精品观看| 中文字幕一区二区三区乱码在线 | 国产一区二区网址| 欧洲精品一区二区三区在线观看| 久久久不卡影院| 日韩av成人高清| 欧美影院一区二区| 亚洲色图制服丝袜| 国产成人一级电影| 日韩欧美一区二区久久婷婷| 亚洲啪啪综合av一区二区三区| 精品亚洲欧美一区| 这里只有精品电影| 夜夜嗨av一区二区三区四季av| 美日韩一级片在线观看| 亚洲精品中文在线| 成人午夜电影久久影院| 亚洲精品一区二区三区精华液| 亚洲国产视频一区| 色综合中文字幕国产 | 中文字幕精品—区二区四季| 日本一区中文字幕| 91福利视频久久久久| 国产精品入口麻豆九色| 激情欧美一区二区| 日韩一区和二区| 日韩黄色免费网站| 欧美精品aⅴ在线视频| 亚洲综合在线视频| 99国产精品久久久久久久久久 | 91精品国产综合久久香蕉的特点| 一区二区三区四区在线免费观看| 波多野结衣精品在线| 国产日韩精品一区二区浪潮av| 久久精品久久精品| 精品黑人一区二区三区久久| 麻豆精品视频在线观看视频| 欧美一区二区三区视频在线| 天堂久久久久va久久久久| 欧美三级日韩三级| 亚洲一区二区三区在线播放| 在线中文字幕一区二区| 亚洲一区在线观看视频| 欧美怡红院视频| 五月天中文字幕一区二区| 欧美日免费三级在线| 午夜在线电影亚洲一区| 欧美一级片在线| 老司机精品视频导航| 久久青草欧美一区二区三区| 国产成人精品影院| 国产精品国产馆在线真实露脸| 99久久精品国产导航| 亚洲精品成人精品456| 欧美日韩午夜在线| 日韩国产精品久久| 精品少妇一区二区| 粗大黑人巨茎大战欧美成人| 亚洲欧美一区二区三区极速播放| 综合自拍亚洲综合图不卡区| 成av人片一区二区| 亚洲一区二区三区四区中文字幕| 这里只有精品免费| 国产成人在线观看免费网站| 综合久久国产九一剧情麻豆| 欧美亚州韩日在线看免费版国语版| 丝袜诱惑亚洲看片| 精品美女在线播放| 波多野结衣中文字幕一区二区三区| 亚洲人亚洲人成电影网站色| 欧美性大战xxxxx久久久| 免费av成人在线| 国产精品久久久久久久午夜片| 欧美午夜片在线看| 精品亚洲成a人| 中文字幕在线播放不卡一区| 欧美日韩一区二区三区四区五区 | 久久蜜桃av一区二区天堂 | 青青草一区二区三区| 国产精品色在线| 欧美片网站yy| 国产sm精品调教视频网站| 亚洲国产wwwccc36天堂| 久久久精品日韩欧美| 欧美色电影在线| 成人综合在线视频| 日韩av午夜在线观看| 中文字幕日韩一区二区| 欧美一二三区精品| 色综合久久天天| 国产在线观看免费一区| 亚洲国产精品久久一线不卡| xvideos.蜜桃一区二区| 欧美最猛性xxxxx直播| 国产精品18久久久久久久久 | 99久久免费国产| 人妖欧美一区二区| 亚洲天堂网中文字| 欧美精品一区二区三区蜜桃| 欧美吞精做爰啪啪高潮| www.性欧美| 国产做a爰片久久毛片| 亚洲成人先锋电影|