C++之类(class)的三种访问修饰符(public、private、protected)----成员变量与函数权限

1、背景介绍 

         在C++中,类(class)的三种访问修饰符(access specifiers)用于控制类的成员(属性和方法)的访问权限。这些修饰符决定了类成员在类的外部是否可以被访问。以下是这三种访问修饰符的详细说明:

  1. public(公有):

    • 公有成员在类的内部和外部都可以被访问。
    • 公有成员为类的接口部分,通常包括允许外部访问的方法和属性。
  2. private(私有):

    • 私有成员只能在类的内部被访问,不能在类的外部直接访问。
    • 私有成员通常包括那些实现类的内部逻辑和状态的细节,不应该被外部直接访问。
  3. protected(保护):

    • 保护成员在类的内部可以被访问,在类的外部不能被直接访问。

       外部可以理解为创建的类对象,内部为类的成员函数。

2、类中属性访问权限示例介绍

     下面结合代码介绍public、private、protected修饰符对类中成员变量与成员函数的权限访问限制。

2.1、public修饰

      公有(public)成员:在程序类的外部内部均可访问。如下,定义的类成员函数与变量,均使用public修饰,因此创建的类对象(Box boxObj),可以访问类的函数与变量。同时,类中成员函数(Area())可以访问变量,如下所示。

#include<iostream>
using namespace std;
class Box
{
//类变量修饰
public:double width;//宽度double length;//长度//类函数修饰
public:double Area();//计算面积
};
double Box::Area()
{return width*length;
}int main()
{Box boxObj;boxObj.length = 4;boxObj.width = 2;cout << "width of box is " << boxObj.width << endl;cout << "length of box is " << boxObj.length<< endl;cout << "area of box is " << boxObj.Area() << endl;return 0;
}

运行结果如下:

2.2、private修饰

     私有(private)成员:类的外部是不可访问的,只有类可以访问私有成员。如下图,变量length为私有变量,在外部定义的对象(Box boxObj)已经无法访问变量length。但是类的成员函数(Area()、SetLength())函数可以访问变量length。

      修改后的可运行代码如下:

#include<iostream>
using namespace std;
class Box
{
//类变量修饰
public:double width;//宽度
private:double length;//长度//类函数修饰
public:double Area();//计算面积void SetLength(double length);
};
double Box::Area()
{return width*length;
}
void Box::SetLength(double length)
{this->length = length;//this可以看成创建一个特殊类对象,这个对象可以访问类的所有成员(变量和函数)
}int main()
{Box boxObj;boxObj.SetLength(4);boxObj.width = 2;cout << "width of box is " << boxObj.width << endl;cout << "area of box is " << boxObj.Area() << endl;return 0;
}

运行结果如下:

2.3、protected修饰

     在同一类中,受保护的protected对象与private相同,类的外部是不可访问的,只有类成员函数可以访问私有成员。protected修饰的length变量,无法被外部(BoxObj)进行访问,但是可以被类中成员函数(Area setLength)访问。

3、小结

     public、private、protected修饰符可以控制成员变量与成员函数访问权限,从类的成员访问权限上看,private、protected效果一样。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习-语言模型

深度学习-语言模型 统计语言模型神经网络语言模型语言模型的应用序列模型&#xff08;Sequence Model&#xff09;语言模型&#xff08;Language Model&#xff09;序列模型和语言模型的区别 语言模型&#xff08;Language Model&#xff09;是自然语言处理&#xff08;NLP&…

信息安全法规和标准

《全国人民代表大会常务委员会关于维护互联网安全的决定》规定&#xff0c;威胁互联网运行安全的行为&#xff1a;&#xff08;1&#xff09;侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统&#xff0c;&#xff08;2&#xff09;故意制作、传播计算机病毒等破坏性…

Java 中BigDecimal传到前端后精度丢失问题

1.用postman访问接口&#xff0c;返回的小数点精度正常 2.返回到页面里的&#xff0c;小数点丢失 3.解决办法&#xff0c;在字段上加注解 JsonFormat(shape JsonFormat.Shape.STRING) 或者 JsonSerialize(using ToStringSerializer.class) import com.fasterxml.jackson.a…

SpringJDBC

1.前言 Spring JDBC可以帮助开发者节省大量开发工作 自动去处理一些低级细节 比如&#xff1a;异常处理、打开和关闭资源(Connection、PreparedStatement、Statement、ResultSet) 需要下载的jar包&#xff1a; spring-jdbc(普通jar包、源码jar包)由于没有依赖其他的jar包 所以只…

绩效考核是否适合所有企业?

绩效考核作为人力资源管理中重要的一环&#xff0c;不仅能够反映出员工的工作状态和工作能力&#xff0c;还能对人力资源的其他各板块起到连接和控制作用。科学有效的绩效考核&#xff0c;能够帮助企业对员工进行科学的评价&#xff0c;激发员工的工作主动性和积极性。近年来&a…

Echarts 实现线条绘制

文章目录 需求分析 需求 用 Echarts 实现如下效果 分析

【优选算法】分治 {三分快排:三指针优化,随机选key,快速选择算法;归并排序:统计数组中的逆序对,统计数组中的翻转对;相关编程题解析}

一、经验总结 1.1 三分快排 优化一&#xff1a;三指针优化 之前学习的快速排序无法妥善处理相等或重复序列的排序问题&#xff08;有序且三数取中无效&#xff09;&#xff0c;使快速排序的效率无法达到最优。 为了解决重复序列的问题&#xff0c;我们将原先的双指针法&…

云计算-无服务器计算与AWS Lambda (Serverless Computing with AWS Lambda)

AWS Lambda 无服务器计算与AWS Lambda AWS Lambda支持无服务器计算&#xff0c;不需要任何预配置和管理&#xff0c;同时还能最大限度地降低成本。我们将看到如何创建一个简单的Lambda函数&#xff0c;以及如何将其与AWS事件映射。在现实生活中&#xff0c;任何托管在线的应用…

Java中的死锁及其避免策略

一、技术难点&#xff1a; 在Java中&#xff0c;死锁是一个常见的并发问题&#xff0c;它指的是两个或更多的线程无限期地等待一个资源&#xff0c;而这些资源又被其他等待线程所持有。死锁通常发生在多个线程互相等待对方释放资源时&#xff0c;形成一个循环等待的条件。技术…

每天学点小知识:图床搭建 + CDN简介

前言&#xff1a; 本章内容帮你解决&#xff0c;本地图片不能分享到网上的问题。需要工具github JSDelivr 知识点 Q&#xff1a;什么是JSDelivr&#xff1f; JSDelivr是一个免费且公开的内容分发网络&#xff08;CDN&#xff09;&#xff0c;专门用于加速开源项目和静态网站…

构建php环境、安装、依赖、nginx配置、ab压力测试命令、添加php-fpm为系统服务

目录 php简介 官网php安装包 选择下载稳定版本 &#xff08;建议使用此版本&#xff0c;文章以此版本为例&#xff09; 安装php解析环境 准备工作 安装依赖 zlib-devel 和 libxml2-devel包。 安装扩展工具库 安装 libmcrypt 安装 mhash 安装mcrypt 安装php 选项含…

2024年软件设计师备考复习资料(应用技术)

应用设计&#xff0c;考试时间为120分钟&#xff1b;总共需做5道题&#xff0c;满分75分&#xff08;每题15分&#xff09;。前4题为必答题&#xff0c;最后2题为要求选答一题&#xff08;C或Java&#xff09;&#xff0c;45及格 目录 1. 数据流图&#xff08;需求分析&#…

javascript的typeof返回哪些数据类型

在JavaScript中&#xff0c;typeof 是一个一元运算符&#xff0c;它返回表示一个未计算的操作数类型的字符串。以下是 typeof 可能返回的数据类型字符串&#xff0c;以及如何使用它们&#xff1a; "undefined"&#xff1a; 如果变量已声明但未被赋值&#xff0c;则…

部署Docker玩转Docker

Docker部署 文章目录 Docker部署资源列表基础环境一、安装最新版Docker依赖环境二、配置Docker加速器三、查看Docker版本四、Docker镜像操作4.1、搜索镜像4.2、获取镜像4.3、查看镜像信息4.4、给镜像打标签4.5、删除镜像4.6、存出镜像和载入镜像4.6.1、存出镜像4.6.2、载入镜像…

Python使用Modbus RTU发送数据的技术性指南

目录 一、引言 二、Modbus RTU协议简介 三、Pymodbus库介绍 四、环境准备 五、编写Modbus RTU客户端代码 六、案例分析 七、注意事项与调试技巧 八、扩展功能与应用 九、性能优化与安全性考虑 十、总结 一、引言 在工业自动化领域中&#xff0c;Modbus协议因其开放性…

opencascade AIS_Circle AIS_ColoredDrawer AIS_CameraFrustum 源码学习 圆

类AIS_Circle 构造圆形基准面&#xff0c;用于构建复合形状。 AIS_Circle() [1/2] AIS_Circle::AIS_Circle ( const Handle< Geom_Circle > & aCircle ) 初始化用于构造 AIS 圆形基准面的算法&#xff0c;并初始化圆形 aCircle。 AIS_Circle() [2/2] AIS_Circ…

数据库系统概论(个人笔记)(第三部分)

数据库系统概论&#xff08;个人笔记&#xff09; 文章目录 数据库系统概论&#xff08;个人笔记&#xff09;3、SQL介绍3.1 SQL查询语言概述3.2 SQL数据定义3.3 SQL查询的基本查询结构3.4 其他基本操作3.5 设置操作3.6 空值3.7 聚合函数3.8 嵌套子查询3.9 数据库的修改 3、SQL…

LES物流执行系统,在离散制造行业有那些作用和价值?

离散制造企业往往面临的是多品种、小批量的非标订单生产&#xff0c;传统推动式物流系统已经无法应对计划变化滞后&#xff0c;各车间、工序之间难以衔接等情况&#xff0c;特别是密集劳动力的电子行业&#xff0c;非标产品 SKU 种类繁多&#xff0c;物料配送复杂&#xff0c;对…

【Flowable 7】学习笔记 01 - 初始化数据库表创建流程(源码)

文章目录 前言版本说明配置1、引擎配置初始化2、SQL 执行创建表2.0、创建表概览&#xff08;创建表数目&#xff1a;38&#xff09;2.1、基础组件表创建&#xff08;以 common 组件为例&#xff09;2.2、changelog 组件表创建&#xff08;基于 liquibase&#xff09;2.3、Engin…

探索机器人智能设备:开启智慧生活新篇章

机器人智能设备作为科技创新的代表&#xff0c;正以其独特的魅力吸引着越来越多的关注。它们不仅具备高度的智能化和自主化能力&#xff0c;还能在各种场景下发挥出强大的功能。 机器人智能设备的张总说&#xff1a;在智能家居领域&#xff0c;机器人智能设备可以帮助我们实现家…