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 閱讀(1060) 評論(0)  編輯  收藏 所屬分類: C&C++

          主站蜘蛛池模板: 凌源市| 化德县| 彭阳县| 平原县| 青岛市| 抚宁县| 斗六市| 定远县| 象州县| 全南县| 内丘县| 介休市| 江城| 贵德县| 满洲里市| 如东县| 秭归县| 通化市| 浑源县| 宣汉县| 建湖县| 康保县| 墨竹工卡县| 石狮市| 广汉市| 杂多县| 朝阳县| 郁南县| 余江县| 三穗县| 托里县| 临潭县| 舞钢市| 绥江县| 元阳县| 自治县| 涟源市| 道孚县| 利津县| 垦利县| 陈巴尔虎旗|