friend
關鍵字宣告的函式或類。friend
。
|
|
24 |
duplicate
是類 Rectangle
的一個友元。因此,函式 duplicate
能夠訪問 Rectangle
型別不同物件的成員 width
和 height
(它們是私有的)。但請注意,無論是在 duplicate
的宣告中,還是之後在 main
函式中的使用,函式 duplicate
都未被視作類 Rectangle
的成員。它不是!它只是有權訪問其私有和保護成員,但本身並非成員。
|
|
16 |
Rectangle
是類 Square
的友元,這允許 Rectangle
的成員函式訪問 Square
的私有和保護成員。更具體地說,Rectangle
訪問了描述正方形邊長的成員變數 Square::side
。Square
的空宣告。這是必需的,因為類 Rectangle
用到了 Square
(作為成員函式 convert
的引數),而 Square
又用到了 Rectangle
(宣告其為友元)。Square
將 Rectangle
視為友元類,但 Rectangle
並不將 `Square` 視為友元。因此,Rectangle
的成員函式可以訪問 Square
的保護和私有成員,但反之則不行。當然,如果需要,Square
也可以被宣告為 Rectangle
的友元,從而授予這種訪問許可權。Polygon
類,然後從它派生出另外兩個類:Rectangle
和 Triangle
。Polygon
類將包含兩種多邊形共有的成員。在我們的例子中是:width
和 height
。而 Rectangle
和 Triangle
將是它的派生類,各自擁有不同於其他多邊形的特定特性。A
,我們從它派生出一個帶有另一個成員 B
的類,那麼這個派生類將同時包含成員 A
和成員 B
。class derived_class_name: public base_class_name
{ /*...*/ };
derived_class_name
是派生類的名稱,base_class_name
是其所基於的類的名稱。public
訪問說明符可以被其他任何訪問說明符(protected
或 private
)替換。這個訪問說明符限制了從基類繼承的成員的最寬鬆訪問級別:訪問級別更寬鬆的成員將以此級別被繼承,而訪問級別相同或更嚴格的成員則在派生類中保持其嚴格級別。
|
|
20 10 |
Rectangle
和 Triangle
的物件各自包含從 Polygon
繼承的成員。它們是:width
、height
和 set_values
。Polygon
類中使用的 protected
訪問說明符與 private
類似。它們唯一的區別實際上體現在繼承上:當一個類繼承另一個類時,派生類的成員可以訪問從基類繼承的保護成員,但不能訪問其私有成員。width
和 height
宣告為 protected
而不是 private
,這些成員也可以從派生類 Rectangle
和 Triangle
中訪問,而不僅僅是從 Polygon
的成員中訪問。如果它們是 public,那麼它們可以從任何地方被訪問。訪問許可權 | public | protected | private |
---|---|---|---|
同一個類的成員 | 是 | 是 | 是 |
派生類的成員 | 是 | 是 | 否 |
非成員 | 是 | 否 | 否 |
main
函式、從另一個類或從一個函式中訪問。Rectangle
和 Triangle
繼承的成員具有與它們在基類 Polygon
中相同的訪問許可權。
|
|
public
關鍵字來宣告。
|
|
:
)後面的 public
關鍵字指定了從其後類(本例中為 Polygon
)繼承的成員在派生類(本例中為 Rectangle
)中所能擁有的最寬鬆的訪問級別。由於 public
是最寬鬆的訪問級別,透過指定此關鍵字,派生類將以與基類中完全相同的訪問級別繼承所有成員。protected
繼承,基類的所有 public 成員在派生類中都會變成 protected
。反之,如果指定了最嚴格的訪問級別(private
),那麼所有基類成員都會被繼承為 private
。
|
|
protected
設定為 Daughter
從 mother 繼承的成員的最寬鬆訪問級別。也就是說,所有在 Mother
中是 public
的成員,在 Daughter
中都會變成 protected
。當然,這並不會限制 Daughter
宣告自己的 public 成員。這個“最寬鬆訪問級別”只針對從 Mother
繼承來的成員。class
關鍵字宣告的類預設使用 private 繼承,對用 struct
宣告的類預設使用 public 繼承。derived_constructor_name (parameters) : base_constructor_name (parameters) {...}
|
|
Mother: no parameters Daughter: int parameter Mother: int parameter Son: int parameter |
Daughter
物件和 Son
物件時,呼叫的 Mother
建構函式是不同的。這種差異是由於 Daughter
和 Son
的建構函式宣告不同所致。
|
|
Output
,並且我們希望我們的 Rectangle
和 Triangle
類在繼承 Polygon
成員的同時,也繼承 Output
的成員,我們可以這樣寫:
|
|
|
|
20 10 |
![]() 特殊成員 | ![]() 目錄 | ![]() 多型 |