C++:类的成员属性,公有,私有,保护

在C++中级别,类的成员属性分为三种访问控制:公有(public)私有(private)保护(protected)。它们用于控制类内部数据对类外部的可见性和访问权限。设置访问属性对于封装和信息隐藏至关重要,它有助于保持代码的模块化、安全性和灵活性。正确的访问控制可以帮助防止意外的数据修改和提高代码复用性。

公有 (Public): 公有成员可以直接在类的外部被访问和修改。这是默认的访问属性,如果没有特别声明,成员函数和变量都是公有的。

私有 (Private): 私有成员仅能在类本身的内部访问。外部代码无法直接访问或修改私有成员,只有类内的成员函数(称为友元函数)以及该类的构造函数、析构函数等特殊成员才能访问。

保护 (Protected): 保护成员在类的派生类中可以被访问,但在基类之外则不可见。通常用在继承层次结构中,让派生类能够访问到基类的一些内部细节,但为了防止滥用,仍然限制了其外部可见性。

公有属性(Public Members)

公有属性(也称为公共数据成员)是指可以直接从类的外部访问的成员变量。当你声明一个公有变量或函数时,其他程序员可以在创建该类的对象时直接操作这些属性,无需通过类的实例。

class MyClass {
public:
    // 公有属性
    int publicVar;
    void publicMethod() {
        // 公有函数
    }
};

这里,publicVarpublicMethod() 可以在类外通过 MyClass 对象直接访问。这提供了程序的封装性和灵活性,允许其他部分控制数据的访问,同时保持结构清晰。

在C++中,公有属性(Public Members)是类的成员变量,它们可以被类的所有外部程序直接访问和修改,因为它们的访问权限设置为public。这使得其他程序员能够方便地操作类的对象,实现数据的共享。以下是公有属性的一些常见应用:

1、封装性:虽然公有属性允许外部访问,但是通过封装原则,你可以提供getter和setter方法(也称为访问修饰符),用于控制数据的读取和修改,避免直接暴露内部细节。

2、交互设计:在设计类的时候,如果某个数据对所有用户都是可见且需要频繁操作的,将其设为公有属性是合理的。比如在图形界面中,窗口的位置和大小通常是公开的。

3、继承与多态:在派生类中,公有属性可以直接继承并被重写,实现了多态性,让子类能改变或扩展其父类的行为。

class Base {
public:
    int value; // 公有属性
};

class Derived : public Base {
public:
    void setValue(int new_value) { value = new_value; } // setter方法
    int getValue() const { return value; } // getter方法
};

私有属性(Private Members)

在C++中,私有属性(Private Members)是一种访问控制修饰符,用于声明成员变量(数据成员)或函数(方法)。它们的主要特点是只能在该类内部直接访问,外部(包括派生类)无法直接读取或修改这些私有元素,这提供了一种封装机制,保护了类的数据不被随意篡改。

当你将一个成员声明为私有的时候,通常会提供一些公共方法(公有成员函数或getters/setters)作为接口,允许外部代码安全地操作这些私有数据。这样做有助于维护代码的完整性,并通过隐藏内部细节来提升代码的模块性和重用性。

class MyClass {
private:
    int privateValue; // 私有数据成员

public:
    // 公有方法获取私有值
    int getPrivateValue() const { return privateValue; }

    // 公有方法设置私有值
    void setPrivateValue(int value) { privateValue = value; }
};

保护属性(protected members

在C++中,保护属性(protected members)是一种访问控制级别,用于成员变量和成员函数。它允许这些成员在类的内部以及派生类中直接访问,但对外部(非友元类)来说则是不可见的。这意味着在基类中声明为protected的成员:

  1. 可以被该类的公有成员函数以及私有成员函数访问。
  2. 在派生类中可以访问和修改,这使得它们可以在派生类中提供特定于派生的实现,同时保持原类的封装性。
  3. 对于外部类,只能通过派生类的对象间接访问,增加了程序的安全性和封装性。

保护属性通常用于那些不需要完全暴露给客户端但需要在子类之间共享的行为。例如,一些基类的内部细节可能会在派生类中有更合适的处理方式。

保护属性(也称为“受保护”)介于公有和私有之间,它的主要特点是:

受保护成员只能在其声明的类及其派生类内部访问。这意味着在基类中声明的受保护成员,只有直接或间接从基类派生出来的子类能访问它,而外部的函数或对象无法直接操作这些成员。

这种访问控制提供了一定程度的封装性和安全性,防止了意外的直接修改,同时又允许子类对其进行必要的继承和修改。例如,子类可以根据需要调整或扩展受保护的功能,但在基类中保持这部分细节隐藏。

保护属性(通常以protected关键字声明)的主要应用包括:

封装:它帮助隐藏实现细节,防止不必要的修改。其他类通过继承可以访问这些保护成员,提供了一种控制信息暴露的方式。

继承中的共享:当一个基类有一些数据需要被它的派生类访问时,可以将这些数据设为保护。这样,派生类可以在不改变基类接口的情况下扩展功能。

虚函数的实现优化:有时为了性能考虑,内部的数据结构可能会在基类中以保护方式存储,而虚函数的实现则在派生类中。

class BaseClass {
public:
    // 公有成员
    int publicData;

protected:
    // 保护成员
    int protectedData;
};

class DerivedClass : public BaseClass {
public:
    // 在派生类中可以访问基类的保护成员
    void accessProtected() {
        protectedData = 42; // 正常访问
    }

private:
    // 派生类有自己的私有成员
    int derivedPrivate;
};

int main() {
    DerivedClass d;
    d.publicData = 10; // 可见,因为是公有的
    d.accessProtected(); // 可见,因为DerivedClass继承了BaseClass

    // BaseClass的对象尝试访问protectedData是不允许的
    // BaseClass base;
    // base.protectedData = 50; // 错误,protectedData仅对DerivedClass可见

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/776740.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序毕业设计-速达物流信息查询系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

高考假期预习指南

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

【C语言小知识】getchar与putchar

getchar与putchar getchar介绍putchar介绍总结 在学习c语言阶段存在着许多要求输入数值的例子,在输入字符时,如果使用scanf()和printf()根据%c转换说明读写字符,接下来介绍一堆字符输入/输出函数:getchar()和putchar()。 getchar…

圆通寄15kg30kg一般多少钱?寄大件物品怎么寄最便宜?

作为一名即将毕业的大学生,搬家成了我和室友们共同的难题。尤其是在寄送大件物品时,如何省钱、如何打包、选择哪家快递公司等问题让我们头疼不已。今天,我就来分享一些寄大件物品的省钱技巧以及打包方法,希望对大家有所帮助。 一…

HUAWEI VRRP 实验

实验要求:在汇聚交换机上SW1和SW2中实施VRRP以保证终端网关的高可靠性(当某一个网关设备失效时,其他网关设备依旧可以实现业务数据的转发。) 1.在SW1和SW2之间配置链路聚合,以提高带宽速度。 2.PC1 访问远端网络8.8.8.8 ,优先走…

【数据结构】08.堆及堆的应用

一、堆的概念及结构 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。 堆是非线性数据结构,相当于一维数组,有两个直接后继。 如果有一个关键码的集合K { k₀,k₁,k₂ &#…

课题申报书中要用的思路图(技术路线图)30张,超高清!

最近在弄课题申报书的时候,需要画“技术路线图”;和小伙伴们探讨才发现很多人居然不会画这种图,还有很多人在Word里面一点一点拼凑…… 我给大家收集了网上非常热门的30张“技术路线图”,但网上流传的都太模糊了,想看…

[图解]企业应用架构模式2024新译本讲解22-标识映射

1 00:00:01,080 --> 00:00:04,710 我们来看一下标识映射这个模式 2 00:00:08,030 --> 00:00:10,110 它是属于对象-关系 3 00:00:10,120 --> 00:00:11,150 行为模式 4 00:00:11,160 --> 00:00:13,890 就是说,在动态的时候 5 00:00:15,770 --> 00:…

【python】PyQt5可视化开发,如何设计鼠标显示的形状?

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Python实现ABC人工蜂群优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化…

Java 面向对象编程(OOP)的四大特征

Java 面向对象编程(OOP)的四大特征 1、抽象2、继承3、 封装4、多态性 💖The Begin💖点点关注,收藏不迷路💖 在Java编程中,面向对象编程(OOP)是一个核心概念。OOP的四大基…

红薯小眼睛接口分析与Python脚本实现

文章目录 1. 写在前面2. 接口分析3. 算法脚本实现 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Py…

【Linux】进程信号_4

文章目录 八、进程信号3. 信号的处理4. 可重入函数5. volatile 未完待续 八、进程信号 3. 信号的处理 当某个信号的处理函数被调用时,操作系统会自动将当前信号假如进程的信号屏蔽字当中。如果处理完该信号,该信号同样也会自动从信号屏蔽字中 移除。该…

内网通讯软件有哪些?

企业内部内网通讯工具是为了满足企业内部沟通和协作需求而设计的软件工具,其主要特点是在内网环境下进行通讯,以保证安全性和可控性。以下是一些常见的内网通讯软件,在企业内部通讯中起着重要的作用。 1. Microsoft Teams Microsoft Teams是…

【博士每天一篇文献-综述】Threats, Attacks, and Defenses in Machine Unlearning A Survey

1 介绍 年份:2024 作者:刘子耀,陈晨,南洋理工大学 期刊: 未发表 引用量:6 Liu Z, Ye H, Chen C, et al. Threats, attacks, and defenses in machine unlearning: A survey[J]. arXiv preprint arXiv:2403…

【AI】DeepStream(15):图像分割deepstream-segmentation-test源码分析

【AI】AI学习目录汇总 上一篇:【AI】DeepStream(14):图像分割deepstream-segmentation-test示例演示 1、获取GPU属性 1)获取当前使用的CUDA设备编号 int current_device = -1;cudaGetDevice(&current_device);2)

linux-5.10.110内核源码分析 - Freescale ls1012a pcie host驱动

1、dts pcie设备树 1.1、pcie设备树 pcie1: pcie3400000 {compatible "fsl,ls1012a-pcie";reg <0x00 0x03400000 0x0 0x00100000 /* controller registers */0x40 0x00000000 0x0 0x00002000>; /* configuration space */reg-names "regs", &…

STM32-I2C硬件外设

本博文建议与我上一篇I2C 通信协议​​​​​​共同理解 合成一套关于I2C软硬件体系 STM32内部集成了硬件I2C收发电路&#xff0c;可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能&#xff0c;减轻CPU的负担 特点&#xff1a; 多主机功能&#x…

mac|idea导入通义灵码插件

官方教程&#xff1a;通义灵码下载安装指南_智能编码助手_AI编程_云效(Apsara Devops)-阿里云帮助中心 下载插件&#xff1a; ⇩ TONGYI Lingma - JetBrains 结果如下&#xff1a; 选择apply、ok&#xff0c;会出现弹窗&#xff0c;点击登录 可以实现&#xff1a;生成单元测…

【中项第三版】系统集成项目管理工程师 | 第 9 章 项目管理概论③ | 9.6 - 9.10

前言 第 9 章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节理论性较强&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 9.6 项目管理过程组 9.7 项目管理原则 9.8 项目管理知识领域 9.9 价值交付系统 9.10 本章练习 9.6 项目管理过程组 项目…