国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

關于C#和C++的重載(Overload)、隱藏(Hide)、覆蓋(Override)幾個區別比較和得出的疑問

2019-11-18 17:15:32
字體:
來源:轉載
供稿:網友

這里只談函數(方法)重載,C#獨有的屬性重載不在討論之內。
1. Overload:
    基本上一致,C#多出了ref、out相關的,C++多出了const(指針和引用時)相關的。

2. Hide:
    C#引入new;
    C++一般情況下類似,派生類會按名稱隱藏基類的方法除外。(后面提供解釋)
   
3. Override:
    C#引入override,不能省略(缺省為new),不能更改訪問控制;
    C++能且只能省略virtual(當然是指定義時,C#聲明和定義方法不得分開),可以更改訪問控制。
    只是,在虛擬機制下(如Base * b = new  Derived();   b->Foo();),運行時類型的訪問控制并不能影響虛擬   機制準確的對運行時類型對應方法的尋址。即是說,就算Foo在Derived為PRivate,調用的也是Derived對應的Foo。

    由《Effective C++》(M50)中:“ 這不很合理,但ARM對這種行為提供了解釋。假設調用f時,你真的是想調用Derived中的版本,但不小心用錯了參數類型。進一步假設Derived是在繼承層次結構的下層,你不知道Derived 間接繼承了某個基類BaseClass,而且BaseClass中聲明了一個帶int參數的虛函數f。這種情況下,你就    會無意中調用了BaseClass::f,一個你甚至不知道它存在的函數!在使用大型類層次結構的情況下,這種錯誤會時常發生;所以為了防患于未然, Stroustrup決定讓派生類成員按名字隱藏掉基類成員。”
    既然如此,為什么C#中不這么處理呢?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 桃园县| 宜宾市| 元阳县| 尼玛县| 会宁县| 左贡县| 金平| 东至县| 八宿县| 利辛县| 股票| 长治县| 突泉县| 顺昌县| 金坛市| 珲春市| 交城县| 延庆县| 荥经县| 青阳县| 珠海市| 辽中县| 英吉沙县| 蓝山县| 闻喜县| 五大连池市| 庄浪县| 溆浦县| 龙海市| 邓州市| 庆云县| 土默特右旗| 中山市| 临湘市| 潼南县| 双城市| 镶黄旗| 新乐市| 夏河县| 新民市| 伊通|