衆所周知,面向對象編程語言的特徵之一就是封裝,不一樣編程語言對於封裝提供的實現有所不一樣,但原理大致上是相同的。C++提供了三種不一樣程度的訪問權限來實現,主要是經過public、private、protected三個關鍵字實現的。下面咱們來詳細分析一下這三個關鍵字的具體做用和區別。html
這三個關鍵字主要用來控制類或者結構體成員變量和成員函數的訪問權限,稱爲成員訪問限定符,分別表明公有的、受保護的、私有的,它們所表達的封裝程度不一樣,在使用時須要特別注意。編程
訪問權限限定符的使用又跟類自己的性質有關,即繼承對訪問權限的使用有必定的影響,本文主要探討無繼承狀況下的訪問。安全
被public限定符所修飾的成員變量和函數能夠被類的函數、子類的函數、友元函數,也能夠由類的對象來訪問,便可以使用成員運算符來訪問。這裏的友元函數,能夠是該類的友元函數,也能夠是該類的友元類的成員函數。使用形式以下:編程語言
class temp{
public:
int a; //修飾成員變量
temp() //修飾成員函數,這裏修飾構造函數
{
//初始化類對象成員
}
}
protected限定符修飾的成員變量和成員函數能夠被該類的成員函數訪問,可是不能被類對象所訪問,即不能經過類對象的成員運算符來訪問。另外,這些成員能夠被子類的函數和友元函數訪問,相比public成員 少了一個可使用類對象直接訪問的特性。具體使用與public相似,這裏再也不貼出代碼。函數
被private限定符修飾的成員變量只能被該類的方法和友元函數訪問,子類函數沒法訪問,在這三個限定符中封裝程度是最高的,通常來講,應該儘量將類的成員變量聲明爲private而不是其餘,減小成員變量的暴露,只提供getter和settter方法給外界訪問,這樣能提升類的安全性。具體使用與public相似。spa
C++與Java不一樣,C++中的類沒有公有私有之分,在使用時直接聲明便可,訪問權限限定符只用於修飾類的成員變量和成員函數。.net
《C++ Primer》htm
https://www.cnblogs.com/dongsheng/p/3344011.html對象
https://blog.csdn.net/zxf529/article/details/1746728blog