📅  最后修改于: 2023-12-03 15:25:36.308000             🧑  作者: Mango
在C++中,派生类(子类)继承了基类(父类)的方法和属性。当我们在派生类中对继承的方法进行更严格的访问时,会发生一个叫做“访问控制”的过程。访问控制在C++中是相当重要的,它用来控制程序中的数据和代码访问权限。 C++中有三种访问权限:
公共访问权限是最宽松的,所有的类成员都可以访问。在派生类中,公共成员可以直接继承和访问。
保护访问权限只允许类成员函数和派生类中的函数访问。在派生类中,保护成员也可以被访问但是不能从外部访问。
私有访问权限只能被类成员函数访问,任何派生类都不能访问私有成员。
下面是一个简单的代码示例:
#include<iostream>
using namespace std;
// 基类
class Rectangle{
public:
int height;
int width;
void display(){
cout << "Height: " << height << endl;
cout << "Width : " << width << endl;
}
};
// 派生类
class Square: public Rectangle{
public:
// 更严格的访问权限
private:
void setHeight(int h){
height = h;
}
public:
void setWidth(int w){
width = w;
}
void displayAll(){
setHeight(2); // 这里调用了私有函数
display(); // 继承自基类的公共函数
cout << "Area : " << height*width << endl;
}
};
// 测试
int main(){
Square s;
//s.setHeight(3); // 私有函数无法从外部访问
s.setWidth(4);
s.displayAll();
return 0;
}
在上述代码中,Square类继承自Rectangle类,但是在Square类中,我们对setHeight函数进行了私有化,它只能被Square类自身的成员函数访问,从而更加保护了height属性。另外,在Square类的displayAll函数中,我们对继承自Rectangle类的display函数进行了访问,从而打印出了Rectangle类的width和Square类的height,还计算了它们的乘积作为Square类的面积输出。此时,Square类的对象s可以访问setHeight和setWidth函数,但只有Square类自己的成员能够访问setHeight, 并且从外面无法访问setHeight函数,这是因为派生类中看不到基类中的private成员。