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())可以访问变量,如下所示。

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/bicheng/20682.shtml

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

相关文章

macOS上编译android的ffmpeg及ffmpeg.c

1 前言 前段时间介绍过使用xcode和qt creator编译调试ffmepg.c&#xff0c;运行平台是在macOS上&#xff0c;本文拟介绍下android平台如何用NDK编译链编译ffmepg库并使用。 macOS上使用qt creator编译调试ffmpeg.c macOS上将ffmpeg.c编译成Framework 大体思路&#xff1a; 其…

信息学奥赛初赛天天练-18-挑战程序阅读-最长公共子序列、字符串与数组越界的巧妙应用

PDF文档公众号回复关键字:20240601 1 2023 CSP-J 阅读程序2 阅读程序&#xff08;程序输入不超过数组成字符串定义的范围&#xff1a;判断题正确填√&#xff0c;错误填&#xff1b;除特殊说明外&#xff0c;判断题1.5分&#xff0c;选择题3分&#xff0c;共计40分&#xff…

Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法&#xff0c;适合小白)(p…

计网ppt标黄知识点整理第(2)章节——谢希仁版本、期末复习自用

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。4 个特性&#xff1a; 机械特性&#xff1a;指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。 电气特性&#xff1a;指明在接口电缆的各条线上出现…

基于Springboot驾校预约平台小程序的设计与实现(源码+数据库+文档)

一.项目介绍 系统角色&#xff1a;管理员、教练、学员 小程序(仅限于学员注册、登录)&#xff1a; 查看管理员发布的公告信息 查看管理员发布的驾校信息 查看所有教练信息、预约(需教练审核)、评论、收藏喜欢的教练 查看管理员发布的考试信息、预约考试(需管理…

2024年东北师范CCPC

文章目录 A.Paper WateringB.nIM gAMEE.Checksum A.Paper Watering 思路&#xff1a;题目说有平方和开方两种操作&#xff0c;如果这个数是平方数&#xff0c;那么它开方之后就只能开方&#xff0c;如果平方的话就重复了&#xff0c;反之就有开方和平方两种操作。 代码如下 //…

为了方便看公众号文章,我搭建了个博客,在线看公众号所有历史文章,想看哪天的文章一秒就能找到

公众号没有个网页版的文章列表&#xff0c;只能在电脑和手机客户端看&#xff0c;想看之前的历史文章只能一直往下拉&#xff0c;想找某篇文章非常费劲。 为了方便看公众号文章&#xff0c;我搭建了个博客&#xff0c;博客地址https://sushengbuhuo.github.io/blog &#xf…

通过 SFP 接口实现千兆光纤以太网通信1

基于米联客ARTIX-7 系列开发板及其开发手册。 总体实现框图如下&#xff1a; SFP 接口 SFP 信号定义如下图所示。 Tri Mode Ethernet MAC 设置 由于使用千兆通讯&#xff0c;因此将速率设为 1Gbps。如下图所示。 首先&#xff0c;由于该 IP 需要与 IP 核 1G/2.5G Ethernet …

基于IoTDB 平台的学习和研究

Apache IoTDB&#xff08;物联网数据库&#xff09;是一个针对物联网领域的高性能原生数据库&#xff0c;适用于数据管理和分析&#xff0c;并可在边缘计算和云端部署。由于它轻量级的架构、高性能和丰富的功能集&#xff0c;以及与Apache Hadoop、Spark和Flink的深度集成&…

数据管理知识体系必知的14张语境关系图

近期对数据管理知识体系中的语境关系图进行了整体学习梳理,总共有14张图,具体如下,供大家参考。应该说语境关系图和环境因素六边形图是各有侧重、互为补充关系。语境关系图是环境因素六边形图的细化,描述了每个知识领域中的细节,相当于数据管理的微观视角, 包括与人员、 …

kali中切换python版本

kali中切换python版本 在日常使用的过程中&#xff0c;可以通过一些工具来做打靶环境&#xff0c;或者工具的启动&#xff0c;都和python关联&#xff0c;而有时存在工具安装&#xff0c;或者运行的时候出现报错&#xff0c;这时候极大可能是因为我们本地的kali中python的版本不…

Android Studio | 小白如何运行别人的安卓项目

目录 Step1&#xff1a;正确地打开项目 Step2&#xff1a;AS 同步时报错 Step3&#xff1a;同步完成后启动 Step4&#xff1a;启动成功 说明&#xff1a;本文简称 Android Studio 为 AS Step1&#xff1a;正确地打开项目 重点&#xff1a;确认好项目的根目录是哪个目录&am…

进程与线程(三)

进程与线程&#xff08;三&#xff09; 进程间通信传统间的进程间通信机制无名管道无名管道的特征无名管道的创建父子进程通信测试管道的大小管道读写易出现的问题 有名管道创建有名管道有名管道的写端代码有名管道的读端代码 信号信号的特征产生信号硬件来源软件来源发送信号的…

【第1章】SpringBoot实战篇之注册接口

文章目录 前言一、代码部分1. User2.UserMapper13. UserSerivce4. UserController15. Result 二、测试1.注册2.再次注册 总结 前言 下面介绍用户注册接口。 一、代码部分 1. User package org.example.springboot3.bigevent.entity;import com.baomidou.mybatisplus.annotat…

开发板uboot与virtualbox虚拟机、windows11网络互通

环境&#xff1a;virtualbox中ubuntu22.04.4&#xff0c;开发板通过网线再经过拓展坞usb网卡跟windows11连接。连接如下&#xff1a; 1、关闭windows防火墙(重要) 2、先在VirtualBox的工具选项创建两个网络【仅主机(Host-Only)网络】和【NAT网络】 仅主机(Host-Only)网络的ip:…

Linux下Qt Creator无法输入中文(已解决)

1. 首先确保安装了搜狗输入法&#xff0c;且能正常运行。 2.克隆源码到本地。 git clone https://gitcode.com/fcitx/fcitx-qt5.git 3.检查Qt Creator版本&#xff0c;如下图所示&#xff0c;为基于Qt6的。 4. 进入源码目录&#xff0c;建立build文件夹&#xff0c;修改CMak…

css动态导航栏鼠标悬停特效

charset "utf-8"; /*科e互联特效基本框架CSS*/ body, ul, dl, dd, dt, ol, li, p, h1, h2, h3, h4, h5, h6, textarea, form, select, fieldset, table, td, div, input {margin:0;padding:0;-webkit-text-size-adjust: none} h1, h2, h3, h4, h5, h6{font-size:12px…

8、资源操作 Resource

目录 8.1、Spring Resources概述补充&#xff1a;什么是 low-level 资源&#xff1f;1. 文件系统资源2. 类路径资源3. URL资源4. 内嵌资源5. InputStream资源6. ServletContext资源示例代码结论 8.2、Resource接口8.3、Resource的实现类8.3.1、UrlResource访问网络资源1&#x…

LIO-EKF: 运行数据UrbanNav与mid360设备详细教程

一、代码连接 代码下载连接&#xff1a; YibinWu/LIO-EKF: Maybe the simplest LiDAR-inertial odometry that one can have. (github.com) 编译步骤&#xff1a; cd srcgit clone gitgithub.com:YibinWu/LIO-EKF.gitcatkin_makesource devel/setup.bash 运行步骤&#xff1a; …

java并发处理机制

在Java中&#xff0c;并发处理机制主要是通过线程来实现的。Java提供了丰富的类和接口来支持多线程编程&#xff0c;主要集中在 java.util.concurrent 包中。以下是一些关键的并发处理机制&#xff1a; 1.线程创建&#xff1a;可以通过继承 Thread 类或实现 Runnable 接口来创建…