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推出学习反馈闭环机制,提供数据获取.辅助 ...
随机推荐
- 脑电测量ADS1299芯片调试总结
问题一:读出来ID不对? 笔者经过查阅官网资料和测试,发现这个一般是上电或者启动次序不对引起的. 特别是上电次序不同会导致这类问题. 问题二:内部时钟和外部时钟的选择是什么? 就拿内部时钟来说吧,首先 ...
- linux怎么添加用户
在Linux中添加普通新用户 超级用户(也称为"root")是一个具有修改系统中任何文件权力的特别账号.在日常工作中,最好不要使用超级用户账号进入系统,因为任何错误操作都可能导致巨 ...
- 28_FFmpeg音视频解封装格式
目录 一.什么是封装格式 二.使用 FFmpeg 实现解封装 1.创建解封装上下文打开流媒体文件 2.检索流信息 2.1.检索流信息 2.2.导出流信息到控制台 3.初始化音频解码器查找合适的音视流和 ...
- TX2 核心板 GPIO、IO扩展器、拨码开关、LED灯 使用总结
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- C#通义千问apl
1.在阿里申请和开通模型服务灵积:链接地址 2.在gitee下载代码:Gitee链接 3.在代码中更换你的API-KEY 4.注意要开通:通义千问/qwen-turbo模型 5.如图所示
- WebView库功能完善
目录介绍 01.loadUrl到底做了什么 02.触发加载网页的行为 03.webView重定向怎么办 04.js交互的一点知识分享 05.拦截缓存如何优雅处理 06.关于一些问题和优化 07.关于一 ...
- Button按钮Effect的用法
教大家写一个好看的Button按钮 代码简单粗暴 <Grid > <Border Width="200" Height="30" Margin ...
- 记录-vue项目中使用PWA
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言: 梳理了一下项目中的PWA的相关用法,下面我会正对vue2和vue3的用法进行一些教程示例,引入离线缓存机制,即使你断网,也能访问页 ...
- Docker理论
一.什么是Dcoker 相信docker是什么大家都已经比较清楚了,网上有很详细的介绍,我这里只是大概描述一下. Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足 ...
- KingbaseES 等待事件之LWLock lock_manager
背景 相信我们不止一次遇到过一个等待事件:LWLock lock_manager.下面我们聊聊这个等待事件的含义,产生原因,以及解决方法. 等待事件含义 当数据库维护共享锁的内存区域以在无法实现以fa ...