1、背景介绍
在C++中,类(class)的三种访问修饰符(access specifiers)用于控制类的成员(属性和方法)的访问权限。这些修饰符决定了类成员在类的外部是否可以被访问。以下是这三种访问修饰符的详细说明:
-
public(公有):
- 公有成员在类的内部和外部都可以被访问。
- 公有成员为类的接口部分,通常包括允许外部访问的方法和属性。
-
private(私有):
- 私有成员只能在类的内部被访问,不能在类的外部直接访问。
- 私有成员通常包括那些实现类的内部逻辑和状态的细节,不应该被外部直接访问。
-
protected(保护):
- 保护成员在类的内部可以被访问,在类的外部不能被直接访问。
外部可以理解为创建的类对象,内部为类的成员函数。
2、类中属性访问权限示例介绍
下面结合代码介绍public、private、protected修饰符对类中成员变量与成员函数的权限访问限制。
2.1、public修饰
公有(public)成员:在程序类的外部和内部均可访问。如下,定义的类成员函数与变量,均使用public修饰,因此创建的类对象(Box boxObj),可以访问类的函数与变量。同时,类中成员函数(Area())可以访问变量,如下所示。
#include<iostream>
using namespace std;
class Box
{
//类变量修饰
public:double width;//宽度double length;//长度//类函数修饰
public:double Area();//计算面积
};
double Box::Area()
{return width*length;
}int main()
{Box boxObj;boxObj.length = 4;boxObj.width = 2;cout << "width of box is " << boxObj.width << endl;cout << "length of box is " << boxObj.length<< endl;cout << "area of box is " << boxObj.Area() << endl;return 0;
}
运行结果如下:
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效果一样。