• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 細談C++多態性的“動”與“靜”

    發表于:2008-06-10來源:作者:點擊數: 標簽:多態
    關鍵字:C++ “動”與“靜” 在我們討論多態的時候,先看看什么是硬編碼和軟編碼:硬編碼就是把代碼寫死了,導致彈性不足,降低了可擴展性,例如在代碼里的: if...else...;switch...case... 這些代碼通常都屬于硬編碼,項目中的這些代碼多了,就相當于說明
    關鍵字:C++ “動”與“靜”

     在我們討論多態的時候,先看看什么是硬編碼和軟編碼:硬編碼就是把代碼寫死了,導致彈性不足,降低了可擴展性,例如在代碼里的: if...else...;switch...case...
      
      這些代碼通常都屬于硬編碼,項目中的這些代碼多了,就相當于說明這個代碼的靈活性、擴展性、彈性等等的少了。

      所以,我們要盡量使用軟編碼,通俗點就是“別把話說死了,留點轉彎的余地”。多態性就是這種軟編碼特性的反映,下面我們一起來研究一下多態性。

      多態性是一種抽象,把事物的特征抽象出來,然后事物的具體形態我們就不關心了。

      例如對工人這種事物來說,他的特征就是工作,至于是什么工人,他做什么工作,我們就不用關心了,只要我們以“工人.工作”這種方式去調用。那他就會為我們工作了。

      那為什么我們不抽象出其他的特征,只抽象出工作這個特征呢?因為我們只對這個特征感興趣,他的什么吃飯、睡覺、如廁等的特性我們都不關心了。有了多態,我們就可以實現軟編碼了!

      講解了多態的概念之后,我們來看看多態的實現(C++的實現):

      多態的實現是通過虛函數表(VTable),每個類如果有虛函數,那它就有一個虛函數表,所有的對象都共享這一個VTable。這個概念也叫做動態聯編,還有靜態聯編,這些概念都是通過在程序執行的時候表現出來的性質來定的,我們下面會看看它的“動”和“靜”究竟體現在哪里。

      先看一段代碼:

      class C0
      ...{
      public:
      void Test()
      ...{
      cout << "call C0 Test()。" << endl;
      }
      };

      這個類沒有虛函數,調用的時候就是靜態調用。調用的代碼如下:

      // 靜態編譯(早綁定 early binding)
      C0 *pO0;
      C0 obj0;
      pO0 = &obj0;
      pO0->Test();
      它的反匯編代碼如下:

      // 直接調用函數(已經知道地址)
      00401432 mov ecx,dword ptr [ebp-0Ch]
      00401435 call @ILT+160(C0::Test) (004010a5)
      下面看看帶虛函數的類:

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>