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 |
特殊成員 | 目錄 | 多型 |