孝昌建设局网站/新冠疫情最新情况
访问限定符 public/protected/private
在 C++ 中,访问限定符有三种:public、protected、private,它们用于控制类的数据成员和成员函数的访问权限。具体来说:
- public:表示该成员对外部代码可见,可以在类的外部访问和调用。
- protected:表示该成员对外部代码不可见,只能在类的成员函数或其派生类中访问和调用。
- private:表示该成员对外部代码完全不可见,只能在类的成员函数中访问和调用。
访问限定符可以用来实现类的封装,即将数据成员和成员函数组合在一起,形成一个独立的单元,并且对外部世界隐藏其内部细节,只暴露必要的接口。这样可以提高程序的安全性和可维护性,可以防止数据被误操作或不合法的访问,也可以隔离内部实现的变化,从而不会影响外部的调用。
下面通过一个简单的示例来说明访问限定符的使用。
class Rectangle {
private:double length;double width;public:void setLength(double l) {length = l;}void setWidth(double w) {width = w;}double getArea() {return length * width;}
};int main() {Rectangle r;r.setLength(3.0);r.setWidth(4.0);double area = r.getArea(); // 正常编译和执行r.length = 5.0; // 编译错误,length 是私有成员,外部代码不能直接访问return 0;
}
在上面的示例中,Rectangle 类中有两个私有数据成员 length 和 width,分别表示矩形的长和宽。这些成员只能在类的成员函数中访问和修改,外部代码不能直接访问。另外,Rectangle 类中有三个公有成员函数 setLength、setWidth 和 getArea,分别用于设置矩形的长和宽,以及计算矩形的面积。这些函数对外部代码可见,可以在类的外部调用。
在 main 函数中,我们创建了一个 Rectangle 类的对象 r,并通过 setLength 和 setWidth 函数设置了其长和宽。然后调用 getArea 函数计算矩形的面积,并将结果赋值给 area 变量。由于 getArea 函数是公有成员函数,对外部代码可见,所以可以在类的外部调用。
最后,我们试图直接访问 r 的私有成员 length,这样会导致编译错误。因为 length 是一个私有成员,外部代码不能直接访问。这个例子说明了访问限定符的作用,它可以限制类的成员的访问权限,从而实现封装的目。
接下来,我们使用继承的概念来进一步解释访问限定符。
在 C++ 中,继承是一种重要的面向对象编程技术,它允许我们从现有的类派生出新的类,并继承原有类的属性和行为。派生类可以访问其基类中的公有和受保护成员,但不能访问其基类的私有成员。
下面我们通过一个简单的例子来说明继承和访问限定符的使用。
class Shape {
protected:double width;double height;public:Shape(double w = 0.0, double h = 0.0) {width = w;height = h;}void setWidth(double w) {width = w;}void setHeight(double h) {height = h;}
};class Rectangle : public Shape {
public:double getArea() {return width * height;}
};int main() {Rectangle r(3.0, 4.0);double area = r.getArea(); // 正常编译和执行r.width = 5.0; // 编译错误,width 是 Shape 类的受保护成员,不能在派生类中直接访问return 0;
}
在上面的示例中,我们定义了两个类 Shape 和 Rectangle,Rectangle 类是从 Shape 类派生而来的。Shape 类有两个受保护成员 width 和 height,分别表示形状的宽和高。在 Shape 类中,我们定义了构造函数和两个公有成员函数 setWidth 和 setHeight,用于设置宽和高。Rectangle 类中有一个公有成员函数 getArea,用于计算矩形的面积。由于 Rectangle 类是从 Shape 类派生而来的,所以它可以访问 Shape 类中的受保护成员。
在 main 函数中,我们创建了一个 Rectangle 类的对象 r,并通过构造函数设置其宽和高。然后调用 getArea 函数计算矩形的面积,并将结果赋值给 area 变量。由于 getArea 函数是公有成员函数,对外部代码可见,所以可以在类的外部调用。
最后,我们试图直接访问 r 的受保护成员 width,这样会导致编译错误。因为 width 是 Shape 类的受保护成员,不能在派生类中直接访问。这个例子说明了继承和访问限定符的作用,它们可以帮助我们实现类之间的关系,以及限制成员的访问权限,从而实现更加灵活和安全的编程。