protected

Protected 介绍

C++ 中使用public、private、protected 这三个关键字来控制对类成员的访问。关键字 protected 下的成员在类外是无法被访问的,这一点与 private 类似,它们的区别主要在类的继承上。

派生类可以直接访问基类的 protected 成员,但不能访问基类的 private 成员。因此,可以这样简单理解:对于类外面来说, protected 与 private 相似,但对于派生类来说,protected 与public 相似。

示例代码

下面看代码片段示例:

#include <iostream>
// 基类
class Base {
 public:
  // 设计者希望使用 set 和 get 来访问 m_ptd;
  bool set_ptd(int value) { m_ptd = value; }
  bool get_ptd() { return m_ptd; }
 private:
  int m_pve;
 protected:
  int m_ptd;
};
// 派生类
class Driver : public Base {
  void func() {
    m_ptd = 1;  // 可以,但是违背了设计者用 set 和 get 访问 m_ptd 的初衷
    m_pve = 1;  // 不可以,派生类不能访问基类的私有成员
  }
};

int main(int argc, char const *argv[]) {
  Base base;
  base.m_ptd; // 不可以,类外部不能访问私有或者保护成员
  base.m_pve; // 不可以,类外部不能访问私有或者保护成员

  Driver driver;
  driver.m_pve; // 不可以,类外部不能访问私有或者保护成员
  driver.m_ptd; // 不可以,类外部不能访问私有或者保护成员
  return 0;
}

注意事项

  • protected 虽然可以简化代码设计,但也存在缺陷:上面代码中,设计者希望只能通过 set 和 get 方法修改 m_ptd, 但是派生类可能破坏这种保护措施。
  • 最好对数据成员采用 private 方式,不要使用 protected,同时通过基类方法使派生类能够访问基类数据。
  • 对于成员函数而言, protected 很有用,它能够让派生类访问公众不能使用的内部函数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值