C++ 和C# 繼承機制的差異之淺見

來源:互聯網
上載者:User

C++繼承方式總共分為以下幾種:

public、private、protected三種(它們直接影響到衍生類別的成員、及其對象對基類成員訪問的規則)。

(1)public(公有繼承):繼承時保持基類中private成員被隱藏,其它各成員屬性不變,被繼承為衍生類別的成員。so衍生類別的成員只能訪問基類中的public/protected成員,而不能訪問private成員;衍生類別的對象只能訪問基類中的public成員。

(2)private(私人繼承):繼承時基類中private成員被隱藏,其它各成員屬性均變為private,被繼承為衍生類別的成員。衍生類別的成員也只能訪問基類中的public/protected成員,而不能訪問private成員;衍生類別的對象不能訪問基類中的任何的成員。

(3)protected(保護性繼承):繼承時基類中private成員被隱藏,其它各成員屬性均變為protected,被繼承為衍生類別的成員。衍生類別的成員只能訪問基類中的public/protected成員,而不能訪問private成員;衍生類別的對象不能訪問基類中的任何的成員。

但是C#的繼承只能通過成員變數的許可權控制來實現。

在C++中,一個變數如果通過不同的繼承方式,那麼它在繼承的過程中可訪問程度會發生很大變化。

如 

Class A{public int a1(){};protected int a2(){};private int a3(){};}Class B1:protected A{ a1;//可訪問,變為自身的preotected a2;//可訪問,變為自身的preotected     //a3;不可訪問}Class B2:private A{ a1;//可訪問,變為自身的private a2;//可訪問,變為自身的private     //a3;不可訪問}Class C1:protected B1{       a1;//是B1的保護成員,被繼承,變為自身的保護成員       a2;//是B1的保護成員,被繼承,變為自身的保護成員}Class C2:protected B2{       //a1;是B2的私人成員,已經無法再被繼承       //a2;是B2的私人成員,已經無法再被繼承}

所以,一個可以被繼承的成員變數在不同的繼承方式中,最後有可能丟失無法再被繼承。而C#中,沒有繼承方式的概念。一個成員變數如果可以被繼承,那麼他就會被衍生類別一直繼承。

就像一個家族的傳家之寶,C++中由於某一代的原因,這個傳家之寶可能會不傳給下一代,致使後代都得不到。而C#中,這個傳家之寶會一直被傳遞下去(除非在傳遞過程中發生其它的人為因素)。

當然了,本文的探究僅限於繼承的可訪問性

(後繼文章將就C#的成員修飾符做一定的簡要分析)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.