私有成员、公共成员、保护成员如何定义

简介: 私有成员、公共成员、保护成员如何定义

私有成员的定义以及如何定义

私有成员(Private Members)是类内部的变量(数据成员)或函数(成员函数/方法),这些成员只能被该类自身访问,而不能被类的外部代码(包括其他类的成员函数或全局函数)直接访问。私有成员的存在是为了实现封装,即隐藏类的内部实现细节,确保数据的安全性和完整性。私有成员的使用,使得类的设计者能够控制数据的读写权限,防止外部代码直接修改内部状态,从而提高了代码的健壮性和可维护性。

  • C++中,使用private关键字来声明私有成员,例如:
class MyClass {
private:
    int secretData;
public:
    void setData(int data) { secretData = data; } // 公有方法可以访问私有成员
};
  • 在这个例子中,secretData是一个私有成员,只能通过类内的公有方法(如setData)来设置其值。
  • Java同样使用private关键字来定义私有成员:
public class MyClass {
   private int secretData;    
    public void setData(int data) {
        this.secretData = data; // 公有方法可以访问私有成员
   }
}
  • Python中,尽管没有严格的访问控制符,但约定俗成地,以两个下划线__开头的成员被视为私有(名称会发生改变以避免外部访问,这是一种称为name mangling的技术):
class MyClass:
    def __init__(self):
        self.__secretData = 0    
    def set_data(self, data):
        self.__secretData = data # 公有方法可以访问私有成员

C++

  1. 公有成员(public):
  • 公有成员可以在任何地方被访问,无论是在类的内部还是外部,甚至是无关联的代码中,只要有一个对象实例,就可以直接访问这些成员。
  • 语法上,公有成员在类的public:访问修饰符下声明。
  1. 保护成员(protected):
  • 保护成员在类的外部不可直接访问,但在派生类(子类)中以及该类本身的成员函数和友元函数中是可以访问的。
  • 这种访问级别提供了一种封装机制,允许派生类访问基类的某些特定细节,而不暴露给更广泛的用户。
  • 保护成员在类的protected:访问修饰符下声明。

Java

  1. 公有成员(public):
  • 和C++一样,Java中的公有成员可以被任何其他类访问,无论是否在同一包内或是否是子类。
  • 公有成员声明在类的定义中,无需特别的访问修饰符前缀,因为“public”是默认的外部访问级别(如果不考虑包访问权限的话)。
  1. 保护成员(protected):
  • Java中的保护成员与C++中的工作方式大致相同,即它们在类的外部不可直接访问,但在同一包内的其他类以及所有子类中都是可访问的,不论子类是否在同一个包内。
  • 这意味着Java中的保护成员比C++中的保护成员具有更宽泛的访问权限,因为它还包括了包内的非子类。
  • 保护成员使用protected关键字声明。
目录
相关文章
|
存储 编译器 Linux
MinGW下载和安装教程
要知道,GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的,如果我们想在 Windows 平台使用 GCC 编译器,可以安装 GCC 的移植版本。目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种,分别为 MinGW 和 Cygwin。其中,MinGW 侧重于服务 W本节要重点给大家介绍的是 MinGw 的安装和使用。MinGw 全称 Minimalist GNU for Windows,应用于 Windows 平台,可以为我们提供一个功能有限的 Linux 系统环境以使用一些 GNU 工具,比如 GCC 编译器、gawk、bison 等等。
5848 0
MinGW下载和安装教程
|
测试技术 C# 数据安全/隐私保护
Esp8266-01s、51单片机实现连接MQTT踩坑:附加烧录安信可固件+宝塔搭建MQTT服务器 全套攻略
🚀🚀 本文记录一下5.20在宿舍宅了两天搞懂的东西,由于对于单片机还是个萌新,没有可以咨询的人,无奈之下,翻遍了度娘、B站、C站,没办法学习就是所有东西都要靠自己去摸索,期间踩了很多坑,有很多问题值得我去解决,这里做一个记录,便于以后自己查阅,也希望能对现在学习的你做一个参考,避免和我一样踩坑🚀🚀 ✨✨欢迎订阅本专栏或者关注我,一起学习单片机!!✨✨ ✨✨欢迎订阅本专栏或者关注我,一起学习单片机!!✨✨ ❤️❤️❤️ 最后,希望我的这篇文章能对你的有所帮助!
1560 0
Esp8266-01s、51单片机实现连接MQTT踩坑:附加烧录安信可固件+宝塔搭建MQTT服务器 全套攻略
|
10月前
|
编解码 数据格式
全国多年极端最低温度分布数据
本数据集提供全国多年极端最低气温空间分布,反映地区冷害风险、作物越冬能力及气候波动特征。数据由地理遥感生态网基于2015-2024年气象站观测,采用Anusplin插值得出,精度高、质量好,适用于农业规划、建筑供暖设计、灾害预警及气候变化研究,支持多种格式下载。
|
8月前
|
人工智能 Shell 数据处理
轻松掌握C语言中的大小写字母转换
在C语言中,大小写字母转换具有重要实用价值,常用于数据处理、用户输入统一格式、输出规范风格及忽略大小写差异等场景。C语言提供了toupper()和tolower()函数进行大小写转换,分别将小写转大写和大写转小写。这些函数定义在头文件<ctype.h>中,能够提升程序的灵活性与实用性。掌握这些转换技巧,有助于实现字符串比较、文本处理等常见编程任务。
|
C语言
C语言中的复合语句
C语言中的复合语句
1537 1
|
设计模式 架构师 Java
设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!
设计模式是写出优秀程序的保障,是让面向对象保持结构良好的秘诀,与架构能力与阅读源码的能力息息相关,本文深剖设计模式之 5 大创建型模式。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!
|
存储 关系型数据库 MySQL
软件设计与实现:从概念到产品
【8月更文第21天】在现代软件开发过程中,从概念到产品的转化需要经过多个阶段的设计和规划。本文将重点介绍软件设计的几个关键方面:软件设计概述、架构设计、模块设计、用户界面设计以及数据库设计,并通过一个假设的项目——在线图书管理系统为例进行说明。
1285 1
|
JSON 前端开发 小程序
uniapp:request 请求出现400错误
uniapp:request 请求出现400错误
uniapp:request 请求出现400错误
|
消息中间件 NoSQL Java
面试官必问的分布式锁面试题,你答得上来吗?
本文介绍了分布式锁的概念、实现方式及其在项目中的应用。首先通过黄金圈法则分析了分布式锁的“为什么”、“怎么做”和“做什么”。接着详细讲解了使用 Redisson 和 SpringBoot + Lettuce 实现分布式锁的具体方法,包括代码示例和锁续期机制。最后解释了 Lua 脚本的作用及其在 Redis 中的应用,强调了 Lua 保证操作原子性的重要性。文中还提及了 Redis 命令组合执行时的非原子性问题,并提供了 Lua 脚本实现分布式锁的示例。 如果你对分布式锁感兴趣或有相关需求,欢迎关注+点赞,必回关!
594 2
|
开发工具
解决Flutter中ThemeData.primaryColor在AppBar等组件中不生效
解决Flutter中ThemeData.primaryColor在AppBar等组件中不生效
519 1

热门文章

最新文章

下一篇
开通oss服务