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

          主站蜘蛛池模板: 宁乡县| 满城县| 霸州市| 洛阳市| 常宁市| 麻阳| 苗栗市| 章丘市| 文山县| 临洮县| 辉县市| 纳雍县| 泾川县| 佛坪县| 莫力| 新闻| 宜兰县| 清涧县| 江北区| 西华县| 甘南县| 裕民县| 措勤县| 栾川县| 太仆寺旗| 顺平县| 黔西县| 长宁区| 西安市| 霍林郭勒市| 土默特右旗| 凯里市| 武川县| 南乐县| 福贡县| 巨鹿县| 兴安盟| 缙云县| 上犹县| 德昌县| 百色市|