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++ 中实现封装:
- 使用访问说明符: 将类成员(属性和方法)声明为
private以隐藏它们,或声明为public以允许外部访问。 - 使用 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类包含两个私有属性:name和age。- 为了访问这些属性,提供了公共的 getter 和 setter 方法:
getName(),setName(),getAge()和setAge()。 - 在
main()函数中,我们创建了一个Person对象并使用 setter 方法设置其属性值。 - 然后,我们使用 getter 方法获取属性值并输出它们。
总结:
封装是 C++ 中面向对象编程的重要基石。通过有效地封装类数据,您可以提高代码的安全性、维护性和可重用性。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
C++ 访问说明符详解:封装数据,控制访问,提升安全性的更多相关文章
- 作业详解及流程控制之for循环
作业详解及流程控制之for循环 目录 作业详解及流程控制之for循环 一.作业详解 1.根据用户输入内容打印其权限 2.编写用户登录程序 4.猜年龄的游戏 二.流程控制之for循环 三.while循环 ...
- 十图详解tensorflow数据读取机制(附代码)转知乎
十图详解tensorflow数据读取机制(附代码) - 何之源的文章 - 知乎 https://zhuanlan.zhihu.com/p/27238630
- HTTP协议详解以及URL具体访问过程
1.简介 1.1.HTTP协议是什么? 即超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准.从 ...
- SEO方式之HTTPS 访问优化详解
SEO到底要不要做HTTPS?HTTPS对SEO的重要性 正方观点 1.HTTPS具有更好的加密性能,避免用户信息泄露: 2.HTTPS复杂的传输方式,降低网站被劫持的风险: 3.搜索引擎已经全面支持 ...
- 详解封装微信小程序组件及小程序坑(附带解决方案)
一.序 上一篇介绍了如何从零开发微信小程序,博客园审核变智障了,每次代码都不算篇幅,好好滴一篇原创,不到3分钟从首页移出来了.这篇介绍一下组件封装和我的踩坑历程. 二.封装微信小程序可复用组件 首先模 ...
- Apache/Nginx/IIS 访问日志详解
Apache日志详解 1.Apache日志文件名称及所在路径 日志文件一般都是保存在在apache/logs目录下,实际情况可以根据Apache的配置文件去查找日志文件所在的路径. 例如phpstud ...
- 不看就亏了:DELL EqualLogic PS6100详解及数据恢办法
DELL EqualLogic PS6100采用虚拟ISCSI SAN阵列,为远程或分支办公室.部门和中小企业存储部署带来企业级功能.智能化.自动化和可靠性,支持VMware.Solaris.Linu ...
- 详解Tensorflow数据读取有三种方式(next_batch)
转自:https://blog.csdn.net/lujiandong1/article/details/53376802 Tensorflow数据读取有三种方式: Preloaded data: 预 ...
- C++之类成员的访问权限详解(一)
概念解析 众所周知,面向对象编程语言的特征之一就是封装,不同编程语言对于封装提供的实现有所不同,但原理大体上是相同的.C++提供了三种不同程度的访问权限来实现,主要是通过public.private. ...
- 百度大脑UNIT3.0详解之数据生产工具DataKit
在智能对话项目搭建的过程中,高效筛选.处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一.为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取.辅助 ...
随机推荐
- 手动将jar包安装到本地仓库并使用tomcat运行
参考,欢迎点击原文:https://www.cnblogs.com/panchanggui/p/10696458.html 公司有个老项目是spring的,要我们自己本地安装,我发现我maven一直报 ...
- 实时3D渲染它是如何工作的?可以在哪些行业应用?
随着新兴技术--3D渲染的发展,交互应用的质量有了极大的提高.用实时三维渲染软件创建的沉浸式数字体验,几乎与现实没有区别了.随着技术的逐步改进,在价格较低的个人工作站上渲染3D图像变得更加容易,设计师 ...
- JQ实现音乐插件并自动播放
这里分享我最近写出来的一个小东西,基于jq的音乐播放器,可以嵌套到网站 效果截图: 具体首页代码如下: <!DOCTYPE html> <html> <head> ...
- 创建远程仓库&克隆项目(Github)
创建远程仓库 在GitHub上注册一个账号,之后creat a new repository 创建的远程仓库把它看作一个百度网盘就可以了 克隆项目 1.远程仓库可以下载\克隆到本地 code :git ...
- clickhouse在各大厂商的应用
案例-ClickHouse在头条的技术演进
- MybatisPlus的association 属性及案例
<select id="getMatUnitList" resultMap="matUnitVOMap"> SELECT a.CODE, a.min ...
- 2024-03-27:用go语言,多维费用背包。 给你一个二进制字符串数组 strs 和两个整数 m 和 n, 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个
2024-03-27:用go语言,多维费用背包. 给你一个二进制字符串数组 strs 和两个整数 m 和 n, 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 ...
- FPGA 原语之一位全加器
FPGA原语之一位全加器 1.实验原理 一位全加器,三个输入,两个输出.进位输出Cout=AB+BC+CA,本位输出S=A异或B异或C.实验中采用三个与门.一个三输入或门(另外一个是两个或门,功能一致 ...
- KingbaseES V8R6 集群运维系列 -- 命令行部署repmgr管理集群+switchover测试
本次部署未使用securecmd/kbha工具,无需普通用户到root用户的互信. 一.环境准备 1.创建OS用户 建立系统数据库安装用户组及用户,在所有的节点执行. root用户登陆服务器,创建用户 ...
- 自己写个网盘系列:③ 开源这个网盘编码,手把手教你windows linux 直接部署,docker本地打包部署网盘应用
系列①②已经完成了这个项目的页面和项目的全部编码,前后端分离,这个文章将向你展示运维小伙伴如何部署到windows服务器,linux服务器,docker部署,一学就会,快来看看吧! 说明:这个系列准备 ...