C++ Primer Chapter 15-4

1:對於這些歸根結底是爲了保護數據, private 無論如何都是 private,因爲從一開始就是 private,則至始至終都是要保護其數據對外不可見性 protect 只有在後續 private 繼承要求變爲 private 時,纔會改變其屬性,public 則無論何時何種繼承就會變爲何種類型。反觀這些變化,會發現只能從 public 到public, protect,private; protect 到 protect ,private ; private 到 private; 也就是訪問屬性只可能越來越苛刻,只會升級,不會降級

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:名字查找先與類型檢查。一旦查找成功就不在查找了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章