【C++-笔记】访问说明符public、protected和private的用途和区别

在C++当中,访问说明符主要在如下两个场景中使用:

成员访问说明符

当我们在定义/声明一个类时,需要使用成员访问说明符来说明成员的访问权限,public、protected和private的区别如下:

  • public中的成员不论是类中的成员还是类生成的对象都可以访问
  • protected中的成员只有类中的成员和派生类可以访问
  • private中的成员只有类中的成员可以访问,该类生成的对象和派生类都无法访问

代码示例如下:

class Base {
public:
  int getNum() {return num;}
protected:
  int dri;
private:
  int num = 0;
};
class Drived : public Base {
public:
  int getProNum() {return dri;}  // 正确,能访问基类的protected成员
private:
  int b;
}
....
Base x;
int a = x.getNum(); // 正确,类的对象能够使用public成员
int c = x.num;  // 错误,类的对象不能够使用private成员

派生访问说明符

在上面的用途中提到,类内的访问说明符其实就是表明了外部/内部/派生类对类内成员的访问权限,而派生访问说明符用于派生类,形式一般如下:
class 派生类: 访问说明符 基类名
这里的访问说明符的目的是控制派生类用户(注意,不是派生类本身)对于基类成员的访问权限,应该怎么理解呢?也就是说规定了派生类生成的对象对于基类成员的访问权限

  • 如果使用public公有继承,则派生类的对象可以访问基类的public和protected成员
  • 如果使用protected继承,则基类的public成员和protected成员都是protected的,派生类的对象无法访问
  • 如果使用private私有继承,则基类的所有成员对于派生类的对象来说都是无法访问的

前述的例子中,如果我们将继承方式改成私有继承,成员函数getProNum仍然是正确的。

posted @ 2022-08-22 20:05  无涯清酒  阅读(245)  评论(0)    收藏  举报