1、背景介紹?
? ? ? ? ?在C++中,類(class)中成員的三種訪問修飾符(access specifiers)用于控制類的成員(屬性和方法)的訪問權限。這些修飾符決定了類成員在類的外部和內部是否可以被訪問。以下是這三種訪問修飾符的詳細說明:
-
public(公有):
- 公有成員在類的內部和外部都可以被訪問。
- 公有成員為類的接口部分,通常包括允許外部訪問的方法和屬性。
-
private(私有):
- 私有成員只能在類的內部被訪問,不能在類的外部直接訪問。
- 私有成員通常包括那些實現類的內部邏輯和狀態的細節,不應該被外部直接訪問。
-
protected(保護):
- 保護成員在類的內部可以被訪問,在類的外部不能被直接訪問。
? ? ? ?外部可以理解為創建的類對象,內部為類的成員函數。
2、類中屬性訪問權限示例介紹
? ? ?下面結合代碼介紹public、private、protected修飾符對類中成員變量與成員函數的權限訪問限制。
2.1、public修飾
? ? ? 公有(public)成員:在程序類的外部和內部均可訪問。如下,定義的類成員函數與變量,均使用public修飾,因此創建的類對象(Box boxObj),可以訪問類的函數與變量。同時,類中成員函數(Area())可以訪問變量,如下所示。
2.2、private修飾
? ? ?私有(private)成員:類的外部是不可訪問的,只有類可以訪問私有成員。如下圖,變量length為私有變量,在外部定義的對象(Box boxObj)已經無法訪問變量length。但是類的成員函數(Area()、SetLength())函數可以訪問變量length。
? ? ? 修改后的可運行代碼如下:
#include<iostream>
using namespace std;
class Box
{
//類變量修飾
public:double width;//寬度
private:double length;//長度//類函數修飾
public:double Area();//計算面積void SetLength(double length);
};
double Box::Area()
{return width*length;
}
void Box::SetLength(double length)
{this->length = length;//this可以看成創建一個特殊類對象,這個對象可以訪問類的所有成員(變量和函數)
}int main()
{Box boxObj;boxObj.SetLength(4);boxObj.width = 2;cout << "width of box is " << boxObj.width << endl;cout << "area of box is " << boxObj.Area() << endl;return 0;
}
運行結果如下:
2.3、protected修飾
? ? ?在同一類中,受保護的protected對象與private相同,類的外部是不可訪問的,只有類成員函數可以訪問私有成員。protected修飾的length變量,無法被外部(BoxObj)進行訪問,但是可以被類中成員函數(Area setLength)訪問。
3、小結
? ? ?public、private、protected修飾符可以控制成員變量與成員函數訪問權限,從類的成員訪問權限上看,private、protected效果一樣。但是在后續繼承中,是存在差異的。