2:出現繼承和派生之後會出現三種類的用戶:普通類使用者,基類設計者(實現類),派生類設計者(實現類)。
基類中的 protect 成員可以爲基類設計者直接使用,也可以爲派生類設計者直接使用;
基類中的 private 成員可以爲基類設計者直接使用,派生類設計者不可以直接使用。
3:基類的實現如果希望派生類設計時可以用,則應聲明爲 protect ,如果不希望派生類設計可以用,聲明爲 private。
4:友元不具有傳遞性,也不具有繼承性。
5:一個類 Base 的友元可以訪問其所有成員,包括 在 Base 的派生類中 屬於 Base的部分數據成員,其友元也可以訪問。雖然這看起來很怪,但是仔細考慮 一個類的成員的訪問屬性只有該類自己控制,在派生類中的繼承而來的成員也由該被繼承的類控制,而不由派生類控制。
6:雖然在繼承的關係中我們希望保護數據的安全性,像 1 中所說那樣,但是有時候我們的確需要改變一個成員的訪問屬性,那麼可以人爲強制用 using 聲明。 在對應的訪問說明符下 using base::mem; 這樣一句話,就可以改 mem 在派生類中爲特定訪問屬性
注:派生類只可以對其可以訪問的名字提供 using 聲明。如果自己都訪問不了怎麼保證其用戶可以訪問。本質還是保護數據。
7:struct 和 class 聲明的類的唯一差別就是默認的成員屬性和繼承屬性,struct 默認爲 public,class 默認爲 private
8:所有關於訪問的屬性問題,歸根結底是爲了保護數據的安全性和程序的安全性。
9:派生類的作用域是嵌套在基類的作用域之內的。而且一直嵌套到最頂層。
10:即使動態類型與靜態類型不一致,但是決定我們能否訪問一個成員或者變量的決定權在與靜態類型。
11:由於作用域的嵌套關係,那麼派生類中的同名成員將會隱藏基類中的成員。但是我們可以用作用域運算符來使用隱藏的基類成員。
12:名字查找先與類型檢查。一旦查找成功就不在查找了