当前位置: 首页 > news >正文

C++中作用域(public,private,protected

在C++中,publicprivate 和 protected 是用于控制类成员(变量和函数)访问权限的关键字。它们决定了类成员在代码中的可见性和可访问性。在学习时候,对于public是最容易理解的,对于private也好理解,但是对于protected总是会有混淆,整理如下;

以下是它们的详细规则和应用场景:

1. public(公有成员)

  • 规则

    • 公有成员可以在任何地方被访问,包括:

      • 类内部。

      • 类外部的代码(通过对象或指针)。

      • 派生类(子类)。

  • 示例

class MyClass {
public:
  int publicVar; // 公有变量
  void publicMethod() {
    // 可以在任何地方调用
  }
};

int main() {
  MyClass obj;
  obj.publicVar = 10;       // 合法:外部直接访问
  obj.publicMethod();       // 合法:外部调用
  return 0;
}

2. private(私有成员)

  • 规则

    • 私有成员只能在类的内部或类的**友元(friend)**中访问。

    • 派生类无法直接访问基类的私有成员

  • 设计意义

    • 封装类的内部实现细节,防止外部直接修改关键数据。

    • 例如:类的内部状态、辅助工具函数等。

  • 示例

class MyClass {
private:
  int privateVar; // 私有变量
  void privateMethod() {
    // 只能在类内部或友元中调用
  }

public:
  void setVar(int value) {
    privateVar = value;  // 合法:类内部访问私有成员
  }
};

int main() {
  MyClass obj;
  // obj.privateVar = 10;    // 非法:外部无法访问私有成员
  // obj.privateMethod();    // 非法:外部无法调用私有方法
  obj.setVar(10);           // 合法:通过公有方法间接修改私有变量
  return 0;
}

//下面考虑private修饰符,在子类的进一步示例
class MyClassChild public MyClass {

public:
  void childSetVar(int value) {
    // privateVar = value;  // 非法,在子类中即便通过子类的自定义函数也无法访问
    setVar(value); // 合法,通过父类的方法可以访问private
  }
};

3. protected(保护成员)

  • 规则

    • 保护成员可以在类的内部友元以及派生类中访问。

    • 类外部的代码(非友元)无法直接访问

  • 设计意义

    • 允许派生类扩展基类的功能,同时保持对外的封装性。

    • 例如:基类中需要被子类重写的方法或需要被子类直接访问的数据。

  • 示例

class Base {
protected:
  int protectedVar; // 保护变量
};

class Derived : public Base {
public:
  void modifyVar() {
    protectedVar = 20;  // 合法:派生类内部访问基类的保护成员
  }
};

int main() {
  Derived obj;
  // obj.protectedVar = 10;  // 非法:外部无法直接访问保护成员
  obj.modifyVar();          // 合法:通过派生类的公有方法间接修改
  return 0;
}

4. 总结(不考虑友元场景)

  • public:开放接口,供所有代码使用。

  • private:完全封装,仅限制在声明变量的类内成员函数可以访问。

  • protected:半开放接口,对于子类成员函数开放;子类和基类的成员函数都可以访问

  • 继承方式决定了基类成员在派生类中的“可见性上限”。

  • 如果在BASE类中定义了一个变量;  再定义一个子类,子类中对于该变量访问规则如下

基类子类
public任何支持的语法进行访问任何支持的语法进行访问
private只有基类成员函数可以访问不可见,只能通过父类成员函数访问
protected只有基类成员函数可以访问可见,可以在子类的成员函数中进行访问;

相关文章:

  • CSS 过渡与变形:让交互更丝滑
  • STM32中Hz和时间的转换
  • context上下文(一)
  • C#里使用MaterialDesign来构造自定义窗口
  • 希哈表的学习
  • 9-函数的定义及用法
  • ASP.NET Core 性能优化:服务器端响应缓存
  • Lab Cloud FPGA 硬件在线实验云平台介绍
  • aviator 自定义表达式
  • 猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新
  • 设计模式:工厂方法模式 - 高扩展性与低耦合的设计之道
  • 【AI】免费GPU算力平台部署wan2.1
  • 三肽-10瓜氨酸(核心蛋白聚糖肽)-抗皱抗衰 改善肤质
  • 华为的欧拉操作系统怎么进行开发、环境搭建、编译、调试等
  • 分库分表设计与Java实践:从理论到实现
  • 【KWDB 创作者计划】KWDB 数据库全维度解析手册
  • 机器学习--网格搜索
  • 第一部分——Docker篇 第四章 搭建镜像仓库
  • 路由器端口映射设置方法教程,和无公网IP内网穿透实现外网访问方案步骤
  • AIP-217 不可达资源
  • 那个网站百度收录好/整合营销传播的方法包括
  • 在哪个网站上做预收款报告/百度推广软件
  • 新疆正能量软件/昆明seo技术培训
  • 时空网站建设的可行性分析/营销策略有哪些4种
  • 北京做网站公司哪家好/今天
  • 能免费用服务器的网站/友链交换网站