1. 程式人生 > >C++繼承型別:公有、保護、私有、虛擬

C++繼承型別:公有、保護、私有、虛擬

公有繼承(public)、保護繼承(protected)、私有繼承(private)是常用的三種繼承方式,除了這些繼承型別外還有一種虛擬繼承。

  1. 公有繼承(public)

    公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,即基類的公有成員在派生類中還是公有成員,基類的保護成員在派生類中還是保護成員,而基類的私有成員仍然是私有的,不能被派生類及派生類的子類所訪問。

  2. 保護繼承(protected)

    保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函式或友元訪問,也可被派生類的子類訪問,基類的私有成員仍然是私有的,不可被派生類及派生類的子類訪問。

  3. 私有繼承(private)

    私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,只可以被派生類訪問,但是不能被這個派生類的子類所訪問。

  4. 虛擬繼承(virtual)

    虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如:類D繼承自類B1、B2,而類B1、B2都繼承自類A,因此在類D中兩次出現類A中的變數和函式。為了節省記憶體空間,可以將B1、B2對A的繼承定義為虛擬繼承,而A就成了虛擬基類,虛擬繼承與變數的可見性關係不大,在此不做討論。

訪問可見性

各種繼承的成員對於派生類和全域性函式而言,可見性如下,其中“public繼承的派生類中”,指的是以public型別從基類繼承出的派生類中對於基類中的各種成員的可訪問性,“public繼承的派生類的物件”指的是以public型別從基類繼承出的派生類的物件在全域性函式(例如main函式)中對於基類中成員的可訪問性。

可見性 public protected private
基類中 public protected private
public繼承的派生類中 public protected private
protected繼承的派生類中 protected protected 不可見
private繼承的派生類中 private private 不可見
public繼承的派生類的物件 public 不可見 不可見
protected繼承的派生類的物件 不可見 不可見 不可見
private繼承的派生類的物件 不可見 不可見 不可見