so true

          心懷未來,開創未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數據加載中……

          多態的兩種實現方法

          多態體現在父類和派生類之間,通過函數覆蓋,實現在運行過程中動態調用函數。
          必要條件:
          (1)父類中將該函數聲明為virtual
          (2)子類中完全一致的覆蓋父類中的函數,要求返回值、函數名、參數都一致
          (3)通過指針或者借助于函數來實現
          方法一(利用指針):
          #include <iostream.h>
          class A
          {
          public:
           virtual void func()
           {
            cout<<"A::func()"<<endl;
           }
          }

          class B: public A
          {
          public:
           void func()
           {
            cout<<"B::func()"<<endl;
           }
          }

          void main()
          {
           A tmp=new B();//A tmp=new B;也行
           tmp->func();

           B tmp2;
           ((A *)&tmp2)->func();
          }

          方法二(利用函數):
          #include <iostream.h>
          class A
          {
          public:
           virtual void func()
           {
            cout<<"A::func()"<<endl;
           }
           void test()
           {
            func();//***//
           }
          }

          class B: public A
          {
          public:
           void func()
           {
            cout<<"B::func()"<<endl;
           }
          }

          void main()
          {
           B tmp;
           tmp.test();
          }
          對于//***//行,有很多說道,“func();”等價于“this.func()”,能否實現多態,關鍵是看這里的this指向父類還是子類,由于this指針必須得指向某個對象,當我們用“B tmp”或者“A tmp=new B”構造完對象tmp后,由于tmp本質上都是一個B的對象,因此該this指針就是指向子類的。

          posted on 2008-02-23 19:28 so true 閱讀(1067) 評論(0)  編輯  收藏 所屬分類: C&C++

          主站蜘蛛池模板: 清原| 高阳县| 津南区| 茌平县| 苗栗县| 安仁县| 天柱县| 河西区| 突泉县| 缙云县| 浦东新区| 绍兴县| 南汇区| 敖汉旗| 屏东县| 穆棱市| 伽师县| 秦安县| 钦州市| 罗源县| 板桥市| 郁南县| 和龙市| 大埔区| 丰城市| 共和县| 胶州市| 永靖县| 齐齐哈尔市| 于田县| 淮南市| 淮阳县| 泸水县| 南宫市| 阿荣旗| 平定县| 武川县| 榆社县| 柏乡县| 和政县| 尼木县|