C++ 访问限定符

目录

访问修饰符概述

protected在类的内部和派生类中访问调用

private在类的内部访问和调用


访问修饰符概述

在C++中,有三个主要的访问修饰符:public、private和protected。这些修饰符用于控制类的成员(变量和函数)的访问权限。

  1. public:

    • 用public修饰的成员可以在类内部、类外部以及派生类中进行访问。
    • public成员对外部是可见的,可以直接访问。
    • 公共成员通常用于提供接口和公开的数据成员。
  2. private:

    • 用private修饰的成员只能在类内部进行访问。
    • private成员对外部是不可见的,无法直接访问。
    • 私有成员通常用于实现类的内部细节和私有数据成员。
  3. protected:

    • 用protected修饰的成员可以在类内部以及派生类中进行访问。
    • protected成员对外部是不可见的,无法直接访问。
    • 保护成员主要用于派生类继承和访问基类的成员。

这些访问修饰符的使用可以帮助我们控制类的接口和实现的可见性,从而实现封装性和继承性的概念。

class MyClass {
public:int publicVar;    // 公有成员变量void publicFunc() {    // 公有成员函数// 函数体}private:int privateVar;    // 私有成员变量void privateFunc() {    // 私有成员函数// 函数体}protected:int protectedVar;    // 保护成员变量void protectedFunc() {    // 保护成员函数// 函数体}
};int main() {MyClass obj;obj.publicVar = 10;    // 可以访问公有成员变量obj.publicFunc();    // 可以调用公有成员函数// obj.privateVar = 20;    // 错误,无法访问私有成员变量// obj.privateFunc();    // 错误,无法调用私有成员函数// obj.protectedVar = 30;    // 错误,无法访问保护成员变量// obj.protectedFunc();    // 错误,无法调用保护成员函数return 0;
}
  • public:公有访问限定符,被声明为public的成员可以在类的内部和外部被访问。在上面的示例中,publicVarpublicFunc被声明为公有成员,可以在类的内部和外部访问和调用。

  • private:私有访问限定符,被声明为private的成员只能在类的内部访问,外部无法直接访问。在上面的示例中,privateVarprivateFunc被声明为私有成员,只能在类的内部访问和调用。

  • protected:保护访问限定符,被声明为protected的成员可以在类的内部访问,同时在派生类中也可以访问。在上面的示例中,protectedVarprotectedFunc被声明为保护成员,只能在类的内部和派生类中访问和调用。

需要注意的是,访问限定符仅用于类的成员,不影响类的对象。在类的对象中,无论是公有、私有还是保护成员,都可以通过对象访问符.或指针访问符->来访问。在示例代码中,obj.publicVar可以访问公有成员变量,obj.publicFunc()可以调用公有成员函数。但是,私有和保护成员在对象外部是无法直接访问的。

protected在类的内部和派生类中访问调用

当成员被声明为protected时,它们可以在类的内部和派生类中进行访问和调用。下面是一个使用protected访问限定符的示例代码:

#include <iostream>class Base {
protected:int protectedVar;public:void setProtectedVar(int value) {protectedVar = value;}
};class Derived : public Base {
public:void accessProtectedVar() {protectedVar = 10;  // 在派生类中可以直接访问和修改基类的protected成员变量}void accessBaseMember() {setProtectedVar(20);  // 在派生类中可以调用基类的公有成员函数来间接访问和修改protected成员变量}
};int main() {Derived d;d.accessProtectedVar();    // 在派生类对象中访问protected成员变量d.accessBaseMember();    // 在派生类对象中访问和修改protected成员变量return 0;
}

在上述代码中,Base类中的protectedVar被声明为protected,表示它可以在类的内部和派生类中进行访问。Derived类继承自Base类,并能够访问和修改基类的protectedVar成员变量。

Derived类中的accessProtectedVar函数中,可以直接使用protectedVar来访问和修改基类的protected成员变量。

accessBaseMember函数中,通过调用基类的公有成员函数setProtectedVar来间接访问和修改基类的protected成员变量。

通过在派生类中访问和修改基类的protected成员,可以实现对基类成员的扩展和定制。

private在类的内部访问和调用

当成员被声明为private时,它们只能在类的内部进行访问和调用,无法在类的外部或派生类中直接访问。下面是一个使用private访问限定符的示例代码:

#include <iostream>class MyClass {
private:int privateVar;public:void setPrivateVar(int value) {privateVar = value;}void accessPrivateVar() {std::cout << "Accessing privateVar: " << privateVar << std::endl;}
};int main() {MyClass obj;obj.setPrivateVar(10);  // 在类的内部调用公有成员函数来修改私有成员变量obj.accessPrivateVar();  // 在类的内部调用公有成员函数来访问私有成员变量// obj.privateVar = 20;   // 错误,无法在类的外部直接访问私有成员变量return 0;
}

在上述代码中,MyClass类中的privateVar被声明为private,表示它只能在类的内部进行访问。在MyClass类中,我们定义了setPrivateVar函数来间接修改私有成员变量,以及accessPrivateVar函数来访问私有成员变量。

main函数中,我们创建了MyClass类的对象obj,并通过调用公有成员函数setPrivateVar来修改私有成员变量privateVar的值。然后,通过调用公有成员函数accessPrivateVar来访问私有成员变量并输出其值。

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

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

相关文章

2023年9月8日 Go生态洞察:gopls的扩展与Go生态系统的成长

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

AI材料专题报告:AI革命催生新需求国产替代推动新方向

今天分享的AI系列深度研究报告&#xff1a;《AI材料专题报告&#xff1a;AI革命催生新需求国产替代推动新方向》。 &#xff08;报告出品方&#xff1a;光大证券&#xff09; 报告共计&#xff1a;25页 1、算力需求增长催生 800G 光模块需求 算力是数字经济时代新生产力&…

2023年10月9日 Go生态洞察:深入了解类型推断及其更多细节

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【C++ Primer Plus学习记录】if语句

目录 一、if语句 二、if else语句 三、格式化if else语句 四、if else if else结构 一、if语句 if语句让程序能够决定是否应执行特定的语句。 if有两种格式&#xff1a;if和if else。 if语句的语法与while相似&#xff1a; if(test-condition)statement; 如果test-con…

Android 从assets读取文件装载成Bitmap,Kotlin

Android 从assets读取文件装载成Bitmap&#xff0c;Kotlin /*** fileName assets里面图片文件名*/fun readBitmapFromAssets(ctx: Context, fileName: String): Bitmap? {val assetManager: AssetManager ctx.assetsvar bitmap: Bitmap? nulltry {val inputStream assetMa…

Java预科知识

以下内容是根据狂神的Java说、chatgpt和csdn相关博客&#xff0c;结合自己的理解完成的。 Java了解 基于Java 开发了巨多的平台&#xff0c;系统&#xff0c;工具 构建工具&#xff1a; Ant, Maven, Jekins应用服务器&#xff1a;Tomcat, Jetty, Jboss, Websphere, weblogic…

程序员入门:打造抖音同城外卖小程序的技术解析

在当今数字化时代&#xff0c;外卖平台已经成为人们生活中不可或缺的一部分&#xff0c;而抖音作为一款社交媒体平台&#xff0c;也开始涉足同城外卖服务。本文将为初学者提供一份关于如何打造抖音同城外卖平台的技术解析&#xff0c;探讨其中的关键技术和步骤。 一、项目规划…

【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )

文章目录 一、cin.ignore() 函数1、cin.ignore() 函数简介2、cin.ignore() 函数原型3、代码示例 - cin.ignore() 函数 二、cin.peek() 函数1、cin.peek() 函数简介2、代码示例 - cin.peek() 三、cin.putback() 函数1、cin.putback() 函数简介2、代码示例 - cin.putback() 一、c…

if语句和switch语句来确定金额之下的优惠折扣

一、优惠规则 输入相应的金额&#xff0c;可以获得规则之下&#xff0c;金额相应的享受的折扣&#xff0c;需要先定义金额&#xff0c;然后就是使用if语句进行判断&#xff0c;使用switch语句选择判断规则之下对应的优惠折扣。 二、相关代码 public class DiscountPrice {p…

<DB2>《DB2使用期间一些注意事项》

1 建存储过程时 Create 后不能使用 TAB 键 create procedure create 后只能用空格&#xff0c;而不可用 tab 健&#xff0c;否则编译会通不过。 2 查看语句执行计划 dynexpln -d testdb -f test.sql -o test.out -g -z ; sql 语句放在 test.sql 中&#xff0c;结果输出到 te…

git 拉取项目指定目录或者指定文件

因为要做数据库自动更新&#xff0c;需要拉取Gitlab项目中/bm-server-biz/docs目录下的表更新sql文件&#xff0c;其他的都不需要&#xff0c;这时候可以利用git的“sparse checkout”方法&#xff08;设置稀疏检出&#xff09;来实现。 1、在项目目录下git 初始化 [rootxcc-…

开源软件:JumpServer、DataEase、MeterSphere

FIT2CLOUD 认识开源软件之前&#xff0c;先了解一下开发团队FIT2CLOUD。FIT2CLOUD&#xff08;飞致云&#xff09;是一家中国领先的开源软件公司&#xff0c;成立于2014年。公司专注于提供工业操作系统技术平台与解决方案&#xff0c;是中国工业互联网行业的领军企业&#xff…

矩阵处理—Zigzag矩阵打印

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 Zigzag矩阵打印1.1 题目描述1.2 解决思路1.3 代码实现 &#x1f48e;总结 Zigzag矩阵打印 1.1 题目描述 有一个n行m列的矩阵&#xff0c;要求按照Z字形打印出数据&#xff0c;如图&#xff1a; 1.2 解决思路 用一…

Weblogic T3协议反序列化漏洞

文章目录 1. Weblogic T3协议反序列化漏洞1.1 漏洞描述1.2 基本原理1.3 漏洞复现1.4 修复建议 1. Weblogic T3协议反序列化漏洞 1.1 漏洞描述 说明内容漏洞编号CVE-2018-2628漏洞名称Weblogic T3协议反序列化漏洞漏洞评级高危影响范围Weblogic 10.3.6.0Weblogic 12.1.3.0Webl…

基于JavaWeb+SSM+Vue居住证申报系统小程序的设计和实现

基于JavaWebSSMVue居住证申报系统小程序的设计和实现 源码获取入口KaiTi 报告Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告 1.1题目背景 随着时代的发展&#xff0c;人口流动越来越频繁&#xff0…

生活、工作常用API免费接口

身份证识别OCR&#xff1a;传入身份证照片&#xff0c;识别照片文字信息并返回&#xff0c;包括姓名、身份证号码、性别、民族、出生年月日、地址、签发机关及有效期。二维码识别OCR&#xff1a;对图片中的二维码、条形码进行检测和识别&#xff0c;返回存储的文字内容。银行卡…

pycharm安装

1.先去官网下载pycharm 2.下载python3.8 3.修改pip镜像 4.如果有环境变量没加的加一下

Gazebo基本使用

参考文章 熟悉Gazebo界面 : ROS自学笔记八&#xff1a;Gazebo 搭建环境&#xff1a;Gazebo仿真环境搭建 搭建环境&#xff0b;加载机器人&#xff1a;gazebo仿真环境搭建配置小车运动仿真

全国农服进万家系列活动——中国农业生产托管万里行在河北玉田举行

12月8日&#xff0c;“全国农服进万家系列活动-中国农业生产托管万里行”在河北省玉田县圆满举行。来自全国各地农业农村领域的嘉宾齐聚一堂&#xff0c;交流农业社会化服务典型经验&#xff0c;共话农业社会化服务高质量发展大事。 原农业部总农艺师、中国合作经济学会会长孙中…

【恋上数据结构】前缀树 Tire 学习笔记

Tire 需求分析 如何判断一堆不重复的字符串是否以某个前缀开头&#xff1f; 用 Set\Map 存储字符串&#xff08;不重复&#xff09;遍历所有字符串进行判断缺点&#xff1a;时间复杂度 O(n) 有没有更优的数据结构实现前缀搜索&#xff1f; Tire&#xff08;和 Tree 同音&a…