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