C++ 访问说明符详解:封装数据,控制访问,提升安全性

C++ 访问说明符

访问说明符是 C++ 中控制类成员(属性和方法)可访问性的关键字。它们用于封装类数据并保护其免受意外修改或滥用。

三种访问说明符:

  • public:允许从类外部的任何地方访问成员。
  • private:仅允许在类内部访问成员。
  • protected:允许在类内部及其派生类中访问成员。

示例:

class Person {
public:string name; // 公共属性,可从外部访问private:int age; // 私有属性,仅在类内部可见protected:string address; // 受保护属性,可在类及其派生类中访问
};

解释:

  • Person 类中,name 属性是公共的,这意味着可以在类外部创建对象并直接访问该属性:
Person p1;
p1.name = "Alice";
  • age 属性是私有的,只能在类内部的成员函数中访问:
Person p2;
// p2.age = 30; // 错误:age 是私有的
  • address 属性是受保护的,可以在 Person 类及其派生类中访问:
class Employee : public Person {
public:void printAddress() {cout << address << endl; // 可以访问受保护属性}
};

总结:

  • 使用访问说明符来封装类数据,使其免受意外修改或滥用。
  • 将属性默认设置为私有,并在需要时显式将其设置为 public 或 protected。
  • 仅在必要时使用 public 访问权限,并优先使用 private 或 protected 以提高安全性。

附加说明:

  • 静态成员函数通常具有 public 访问权限,因为它们与类本身相关,而不是与特定对象相关。
  • 访问说明符仅控制访问权限,不能赋予修改权限。即使属性是 public 的,也需要确保您有权对其进行修改。

C++ 封装

封装是面向对象编程(OOP)的核心概念之一,它强调将数据隐藏在实现细节之后,只暴露必要的接口进行交互。在 C++ 中,封装可以通过访问说明符(public、private 和 protected)来实现,并结合使用 setter 和 getter 方法来控制对私有数据的访问。

封装的优点:

  • 数据安全性: 封装有助于保护数据免受意外修改或滥用,因为它限制了对私有成员的直接访问。
  • 代码维护性: 封装使代码更易于理解和维护,因为它隐藏了实现细节,只暴露必要的接口。
  • 代码可重用性: 封装的代码通常更易于重用,因为它可以独立于其他代码进行修改或扩展。

在 C++ 中实现封装:

  1. 使用访问说明符: 将类成员(属性和方法)声明为 private 以隐藏它们,或声明为 public 以允许外部访问。
  2. 使用 setter 和 getter 方法: 为私有属性创建公共的 getter 和 setter 方法,用于读取和设置属性值。

示例:

class Person {
private:string name;int age;public:// Getter 方法string getName() {return name;}// Setter 方法void setName(string n) {name = n;}// Getter 方法int getAge() {return age;}// Setter 方法void setAge(int a) {age = a;}
};int main() {Person p1;p1.setName("Alice");p1.setAge(30);cout << p1.getName() << " is " << p1.getAge() << " years old." << endl;return 0;
}

解释:

  • Person 类包含两个私有属性:nameage
  • 为了访问这些属性,提供了公共的 getter 和 setter 方法:getName(), setName(), getAge()setAge()
  • main() 函数中,我们创建了一个 Person 对象并使用 setter 方法设置其属性值。
  • 然后,我们使用 getter 方法获取属性值并输出它们。

总结:

封装是 C++ 中面向对象编程的重要基石。通过有效地封装类数据,您可以提高代码的安全性、维护性和可重用性。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注


http://www.ppmy.cn/devtools/11928.html

相关文章

mac上修改git的密码

在terminal上进行拉取阿里云codeup代码的时候使用命令 git pull origin master,出现了认证失败的问题。因为在阿里云上修改了https的密码&#xff0c;导致出现这样的问题。 Https克隆账号或密码错误&#xff0c;如何查看克隆账号或密码&#xff1a;https://help.aliyun.com/doc…

mac电脑搭建vue环境(上篇)

第一步&#xff1a;mac电脑要有homebrew&#xff0c;如何安装homebrew 点击下方 MAC安装homebrew-CSDN博客 第二步&#xff1a;homebrew安装node.js 第三步&#xff1a;安装npm 第四步&#xff1a;安装webpack 第五步&#xff1a;安装vue脚手架 第六步&#xff1a;可以在…

5款免费且出色的ai智能ppt制作软件,值得拥有!

如果说2023是AI崛起的元年&#xff0c;那2024无疑是AI应用的真正元年&#xff0c;人们对AI技术逐渐回归理性&#xff0c;关注的焦点也从产品层转向应用层&#xff0c;探索AI如何更好地赋能业务&#xff0c;或是重塑工作流程&#xff0c;让AI真正为自己所用。 在数字化盛兴的当…

开发环境中的调试视图(IDEA)

当程序员写完一个代码时必然要运行这个代码&#xff0c;但是一个没有异常的代码却未必满足我们的要求&#xff0c;因此就要求程序员对已经写好的代码进行调试操作。在之前&#xff0c;如果我们要看某一个程序是否满足我们的需求&#xff0c;一般情况下会对程序运行的结果进行打…

跨境电商指南:防关联浏览器和云主机有什么区别?

跨境电商的卖家分为独立站卖家和平台卖家。前者会自己开设独立站点&#xff0c;比如通过 shopify&#xff1b;后者则是入驻亚马逊或 Tiktok 等平台&#xff0c;开设商铺。其中平台卖家为了扩大收益&#xff0c;往往不止开一个店铺&#xff0c;或者有店铺代运营的供应商&#xf…

OceanBase v4.2 特性解析:Auto DOP

我们常会使用并行执行来缩短查询时间&#xff0c;以满足业务对加速查询的需求。那么&#xff0c;如何确定合适的并行资源量呢&#xff1f;在优化器中&#xff0c;并行资源量可以通过并行度&#xff08;DOP&#xff1a;Degree of Parallelism&#xff09;这来衡量。在实际业务场…

【个人博客搭建】(5)Sqlsugar实体创建数据库数据

1、在appsettings.json文件中配置SqlServer数据库连接字符串信息。&#xff08;后续考虑添加MySQL数据库等类型&#xff09; "DBS": [/*对应下边的 DBTypeMySql 0,SqlServer 1,*/{"ConnId": "plateau.poetize.2024","DBType": 1,&qu…

在linux系统中启动pycharm

1.找到pycharm的安装路径&#xff0c;一般在下载文件夹中 2.进入pycharm的安装路径&#xff0c;进入bin目录 3.右击&#xff0c;打开终端&#xff0c;输入./pycharm.sh

【C++风云录】地理信息处理与可视化:开源工具助力地理科学发展

构建智慧地图的利器&#xff1a;地理信息系统与地图可视化技术综述 前言 地理信息系统&#xff08;Geographic Information System&#xff0c;简称GIS&#xff09;和地图可视化技术是现代地理科学以及相关领域研究的重要工具和方法。本文将介绍几个常用的地理信息处理和地图…

2013-2021年各省经济韧性相关测度指标面板数据

2013-2021年各省经济韧性相关测度指标面板数据 1、时间&#xff1a;2013-2021年 2、指标&#xff1a;城镇化率 %、财政科学技术支出&#xff08;亿元&#xff09;、万人高等教育在校人数&#xff08;万人&#xff09;、财政教育支出&#xff08;亿元&#xff09;、第三产业占…

DevOps转型的意义:加速创新、提高效率

DevOps作为一种文化和方法论&#xff0c;正在成为现代软件开发和运维的核心。本文将探讨DevOps转型的意义&#xff0c;以及它对组织的影响&#xff0c;如何加速创新、提高效率&#xff0c;并为企业赋予竞争优势。 --- 在当今数字化时代&#xff0c;软件开发和运维已经成为企业竞…

ui_admin_vue3启动

1、要求node版本16.20.2&#xff0c;小于这个版本npm run dev会报错UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token ‘??‘ 逻辑空赋值(??)是ES2021的语法&#xff0c;node v15.0.0以上才支持逻辑空赋值(??)的语法。之前为了兼容旧代码使用的node版本…

恶补《操作系统》2_1——王道学习笔记

2操作系统-进程 2.1_1 进程的定义、组成、组织方式、特征 组成&#xff1a;PCB&#xff08;进程存在唯一的标志&#xff09;&#xff0c;程序段&#xff0c;数据段 组织方式&#xff1a;链接方式&#xff0c;指针指向不同的队列&#xff1b;索引方式&#xff0c;索引表 特征…

MongoDB学习【一】MongoDB简介和部署

MongoDB简介 MongoDB是一种开源的、面向文档的、分布式的NoSQL数据库系统&#xff0c;由C语言编写而成。它的设计目标是为了适应现代Web应用和大数据处理场景的需求&#xff0c;提供高可用性、横向扩展能力和灵活的数据模型。 主要特点&#xff1a; 文档模型&#xff1a; Mon…

【Redis 神秘大陆】006 灾备方案

六、Redis 灾备方案 6.1 存储方案 6.1.1 基础对比 RDB持久化AOF持久化原理周期性fork子进程生成持久化文件每次写入记录命令日志文件类型二进制dump快照文件文本appendonly日志文件触发条件默认超过300s间隔且有1s内超过1kb数据变更永久性每秒fsync一次文件位置配置文件中指…

项目常用工具类

Java本身自带了许多非常好用的工具类&#xff0c;但有时我们的业务千奇百怪&#xff0c;自带的工具类又无法满足业务需求&#xff0c;需要在这些工具类的基础上进行二次封装改造。以下是在实际工作中&#xff0c;可能会使用到的工具类。 一、对象的序列化和反序列化 对象的序…

pandas学习记录

import pandas as pddata {Age: [20, 30, 40, 20, 20], Name: [Lucy, Lily, Andy, Bob, Tony],City: [Bj, Sh, Gz, Bj, Bj]} df pd.DataFrame(datadata)# 获取列 name_column df[Name]# 获取行 first_row df.loc[0]# 选择多列 subset df[[Name, Age]]# 过滤行 filtered_ro…

element-ui合计逻辑踩坑

element-ui合计逻辑踩坑 1.快速实现一个合计 ​ Element UI所提供的el-table中提供了方便快捷的合计逻辑实现&#xff1a; ​ https://element.eleme.cn/#/zh-CN/component/table ​ 此实现方法在官方文档中介绍详细&#xff0c;此处不多赘述。 ​ 这里需要注意&#xff0c…

【笔记】下云的一小步尝试——内网穿透

云上的世界很精彩&#xff0c;可是越来越贵&#xff0c;系统也越来越臃肿&#xff1b;如果我只需要云提供网络接入&#xff0c;流量大的时候CDN和load balancer就够了&#xff0c;其他的业务只想在内部公开&#xff0c;那么就得将一些需要内部化的服务下云了。用自己的数据中心…

第五十八章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 2:将本机模块与 NSD (CSPcms.dll) 结合使用

文章目录 第五十八章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 2&#xff1a;将本机模块与 NSD (CSPcms.dll) 结合使用注册运行时本机模块启用 Web 网关管理的 CGI 模块 第五十八章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 2&#xff1a;将本机模块与 NSD (…