so true

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

          C++語言的Bug

          class A
          {
          public:
           virtual void func()
           {
            AfxMessageBox("A::func()");
           }
          };

          class B : public A
          {
          private:
           void func()
           {
            AfxMessageBox("B::func()");
           }
          };

          A* pa=new B();
          pa->func();
          結果是調用了B的func函數,突破了private的限制。

          說的明白一點,就是在Java中,要求子類在覆蓋父類的函數時,不能降低可見性,只能擴大或至少相等。而對于C++卻沒有這樣的限制,正如上面的例子掩飾的那樣。
          此外,在Java中,如果父類中把函數聲明為private的,那么對于子類而言,該函數根本就不可見,根本就產生不了override,即便在子類中定義一個函數名、參數類型、返回值、修飾符也為private的函數也不會與父類產生任何關系。

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

          主站蜘蛛池模板: 五河县| 威宁| 宝鸡市| 甘洛县| 长垣县| 卓资县| 曲靖市| 鄂托克旗| 桑植县| 剑河县| 右玉县| 旌德县| 青州市| 乐至县| 犍为县| 江达县| 曲松县| 天柱县| 万盛区| 青神县| 宜阳县| 福州市| 信阳市| 上饶县| 沁水县| 久治县| 钟祥市| 吉林市| 宁强县| 临邑县| 佛教| 南宁市| 石林| 芜湖市| 祁东县| 喀什市| 东城区| 松江区| 林口县| 明溪县| 邵阳市|