so true

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

          C++中突破private的方法

          突破private的方法:
          =====================================
          對于private變量:
          方法一:
          class Y
          {
          public:
           Y(int y=0):m_n(y){};
           int getInt(){return m_n;}
          private:
           int m_n;
          };

          Y y(34);
          cout<<y.getInt()<<endl;
          int* pi=(int*)(&y);
          *pi=347;
          cout<<y.getInt()<<endl;
          方法二:
          int tmp;
          __asm
          {
           mov eax,y.m_n
           mov tmp,eax
           add y.m_n,5
          }
          cout<<tmp<<' '<<y.getInt()<<endl;
          ========================================
          對于private函數:
          class C1
          {
          public:
           virtual void test()
           {
            cout<<"public C1::test()"<<endl;
           }
          };

          class C2: public C1
          {
          private:
           virtual void test()
           {
            cout<<"private C2::test()"<<endl;
           }
          };

          C2 c2;
          C1 * pC1=&c2;
          pC1->test();
          方法二:
          class O;
          typedef void (O::*pO)();

          class O
          {
          public:
           static pO getFunTest()
           {
            return &O::test;
           }
          private:
           void test()
           {
            cout<<"this is a private function of class O:test()"<<endl;
           }
          };
          pO pp=O::getFunTest();
          O o;
          (o.*pp)();

          posted on 2008-07-10 15:58 so true 閱讀(432) 評論(0)  編輯  收藏 所屬分類: C&C++

          主站蜘蛛池模板: 常熟市| 石屏县| 鸡泽县| 寻乌县| 临洮县| 阿克| 启东市| 资溪县| 辽宁省| 凌云县| 通海县| 梁平县| 长葛市| 明水县| 禄劝| 平潭县| 合川市| 大安市| 施秉县| 天峨县| 江西省| 南溪县| 阿坝| 宝应县| 鹤壁市| 泽普县| 普陀区| 连州市| 宜兰县| 大同县| 新民市| 巴林右旗| 农安县| 卓资县| 屏东市| 沙坪坝区| 广昌县| 介休市| 图木舒克市| 扎兰屯市| 合作市|