C++中的各類繼承方式規則

C++中的成員分爲三種類型:公有成員,私有成員,保護成員。
      若是不特別指定,類裏全部的成員都是公有(Public)的,不用特意聲明。可是私有(Private)成員則是要必定聲明的。 shell

  這三種類型才成員的區別在於,對於本類來講:
       公有成員,外部能夠訪問的成員。
       私有成員,外部不能夠訪問的成員。
       保護成員,外部不能夠訪問的成員。 函數

乍看起來,私有成員與保護成員的訪問權限是相同的,使用私有成員就好了,貌似沒有必要再多出來一個保護成員。
       咱們要相信,咱們以爲本身挺明白,弄出C++的大牛比咱們還明白,他們固然知道哪些是須要的哪些是沒用的,若是保護成員沒有用處,還會出如今C++中嗎?
       實際上,保護成員與私有成員的區別體如今繼承上。 spa

繼承分爲:公有繼承,私有繼承,保護繼承。
       公有繼承,基類的公有成員和保護成員做爲派生類的公有成員,外部能夠訪問;
       私有繼承,基類的公有成員和保護成員做爲派生類的私有成員,外部不能夠訪問;
       保護繼承,基類的公有成員和保護成員做爲派生類的保護成員,外部不能夠訪問; 對象

  (外部指基類的外部,即派生類中能夠訪問,在派生類的外部不能訪問該函數)


       這三種繼承中,派生類都不能訪問基類的私有成員。
       從繼承中,咱們能夠看出,保護成員和私有成員有本質上的區別。
       固然,也能夠說在繼承中,保護成員和公有成員沒什麼區別。 繼承


       能夠看出,保護成員就是夾在私有成員和公有成員間的一個第三者,說是第三者可能不太合適,應該是一夫二妻裏的老公,兩邊他都有關係,可是本質上他又和兩邊都不一樣(他是男的。。。) 權限

經過以上的說明咱們也能夠看出,保護成員的做用主要是在繼承時才體現出來的。 co

可能有好事者又要問,那私有繼承和保護繼承有什麼區別,繼承來的成員都是外部不能訪問的啊?對於這個問題,繼承一次好辦,確實沒區別,可是若是再從派生類派生出派生類2,那就有區別了,由於私有成員是不能被再派生出來的派生類2訪問的。 background


C++中的繼承方式有:

  public、private、protected三種(它們直接影響到派生類的成員、及其對象對基類成員訪問的規則)。
  (1)public(公有繼承):繼承時保持基類中各成員屬性不變,而且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象只能訪問基類中的public成員。
  (2)private(私有繼承):繼承時基類中各成員屬性均變爲private,而且基類中private成員被隱藏。派生類的成員也只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象不能訪問基類中的任何的成員。 
  (3)protected(保護性繼承):繼承時基類中各成員屬性均變爲protected,而且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的對象不能訪問基類中的任何的成員。
相關文章
相關標籤/搜索