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

          主站蜘蛛池模板: 台南县| 贡嘎县| 嵊泗县| 同心县| 石嘴山市| 綦江县| 南华县| 湖北省| 九龙县| 嵩明县| 岗巴县| 英山县| 濮阳市| 漳平市| 弋阳县| 青冈县| 姜堰市| 成安县| 安西县| 江门市| 龙州县| 铅山县| 克拉玛依市| 华阴市| 襄汾县| 阆中市| 海门市| 剑阁县| 崇文区| 新津县| 富锦市| 许昌县| 邵东县| 荔波县| 江城| 玉屏| 襄汾县| 思茅市| 南丹县| 吉首市| 资源县|