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++

          主站蜘蛛池模板: 元江| 重庆市| 剑川县| 大荔县| 虹口区| 太原市| 英山县| 宜兴市| 珠海市| 平江县| 双牌县| 日照市| 玉屏| 襄垣县| 黄浦区| 洞头县| 芜湖市| 遂平县| 厦门市| 大兴区| 塔城市| 仪征市| 扎鲁特旗| 光泽县| 伊宁市| 枞阳县| 麟游县| 长岛县| 清苑县| 竹山县| 克拉玛依市| 普安县| 明星| 安庆市| 三门峡市| 丁青县| 基隆市| 文登市| 郑州市| 孝感市| 南陵县|