訪問控制與封裝
在C++語言中,使用訪問說明符(access specifers)加強類的封裝性:
- 定義在
public
說明符之后的成員在整個程序內(nèi)可被訪問,public成員定義類的接口。 - 定義在
private
說明符之后的成員可以被類的成員函數(shù)訪問但不能被使用該類的代碼訪問勤讽,即部分封裝了類的實現(xiàn)細節(jié)意狠。 - 定義在
protected
說明符之后的成員
class和struct
上述兩個關(guān)鍵字都可以用于定義類,區(qū)別是二者的默認訪問權(quán)限言询。如果沒有多態(tài)和虛擬繼承,在C++中傲宜,struct和class的存取效率完全相同运杭,存取class的數(shù)據(jù)成員與非虛函數(shù)效率和struct完全相同,不管該數(shù)據(jù)成員是定義在基類還是派生類函卒。
使用struct則第一個訪問符說明之前的成員是public辆憔,class則相反,為private报嵌。
友元
類可以允許其他類或者函數(shù)訪問其非公有成員虱咧,方法是令其它類或者函數(shù)成為它的友元(friend)。如果類想把一個函數(shù)作為其友元沪蓬,只需要增加一條以friend關(guān)鍵字開頭的函數(shù)聲明語句即可彤钟。
友元聲明只能出現(xiàn)在類定義的內(nèi)部,但是類內(nèi)的位置不限跷叉。一般來說最好在類定義開始或結(jié)束前的位置進行集中聲明逸雹。
許多編譯器不強制友元函數(shù)在使用之前在類的外部聲明营搅。