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

          主站蜘蛛池模板: 九江市| 大丰市| 西畴县| 晋州市| 谢通门县| 安徽省| 讷河市| 桂阳县| 米林县| 门头沟区| 温州市| 丰都县| 津市市| 镇远县| 元氏县| 资溪县| 杭州市| 南汇区| 通榆县| 阿尔山市| 商河县| 长岭县| 海原县| 曲松县| 平度市| 衡水市| 安顺市| 乐清市| 镇原县| 南召县| 资讯 | 勐海县| 射洪县| 资溪县| 泽普县| 射阳县| 新津县| 明星| 北辰区| 克东县| 高唐县|