访问修饰符public、protected、private,基于C++

news2024/11/15 18:01:26

一、基本概念

公有(public)成员

 

公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值,

私有(private)成员

 私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。

默认情况下,类的所有成员都是私有的。例如在下面的类中,width 是一个私有成员,这意味着,如果您没有使用任何访问修饰符,类的成员将被假定为私有成员

实际操作中,我们一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数,如下所示:

protected(受保护)成员

 

protected(受保护)成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。

在下一个章节中,您将学习到派生类和继承的知识。现在您可以看到下面的实例中,我们从父类 Box 派生了一个子类 smallBox

下面的实例与前面的实例类似,在这里 width 成员可被派生类 smallBox 的任何成员函数访问。

二、代码演示不同类型修饰符的不同权限(不同活动区域也可以)

来用代码实际演示看看把,先看下我们如果输出所有成员会发生什么

#include <iostream>
using namespace std;

class Parent0
{
    public:
        int A;
    protected:
        int B;
    private:
        int C;
    
};

class Child0:Parent0
{
    public:
        int a;
    protected:
        int b;
    private:
        int c;

    int getA();
    int getB();
    int getC();
};

int Child0::getA()
{
    return A;
}

int Child0::getB()
{
    return B;
}
int Child0::getC()
{
    return C;//这里是行40
}
int main()
{
    Parent0 baba;
    baba.A = 10;
    baba.B = 20;
    baba.C = 30;
    cout << "A is" << baba.A <<endl;//输出公开的
    cout << "B is" << baba.B <<endl;//输出保护的
    cout << "C is" << baba.C <<endl;//输出私有的
}
 // namespace std

写完,调试信息就已经提醒我有很多错误了

来一个一个看下吧,

第一个错误就是,我在行40的,派生类child0的成员函数getC()中返回了父类的成员变量C,因为C是父类的私有成员,看上面表格的基本概念是啥,私有成员只有类的内部才可以访问,结合下图我画的示意图,假设ClassA是父类,那么私有成员的活动区域只有橘色部分,我在绿色部分调用了这个私有成员就是错误的

但是看下getA()和getB()都没有报错误,所以说明什么呢?对于基类(派生类)来说,父类除了私有成员,都可以被他调用使用的。

好的~接下来再到第二个报错误,是46行,46行的范围已经离开了父类和子类的定义区域,来到了main函数内部,发现使用baba.B,这个受保护的成员,它也是不允许的,baba.C也不允许

这里就可以总结了,在下图中的灰色区域部分,只有公开成员可以被.调用

protected成员,是多给他增加了一点活动区域(派生类每多一个,多一个活动区域)

private成员,只有在它被定义的这个当前类内部可以活动

代码区域可以按照下图分成这样

在 C++ 中,“非派生类的外部代码” 指的是既不属于当前类本身,也不属于从当前类派生出来的任何类的代码部分。

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

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

相关文章

部落冲突:精通五个流派,部落战传奇杯横着走,但前提是能精通!

部落冲突&#xff1a;精通五个流派&#xff0c;部落战传奇杯横着走&#xff0c;但前提是能精通&#xff01; 在部落冲突当中有很多的流派&#xff0c;每个流派都有着属于自己的特点&#xff0c;但是速途同归的每个流派的最终目的都是用来打部落战和传奇杯&#xff0c;日常打资…

MAT:一款针对MSSQL服务器的安全检测与审计工具

关于MAT MAT是一款针对MSSQL服务器的安全检测与审计工具&#xff0c;该工具使用C#开发&#xff0c;可以帮助广大研究人员快速识别和发现MSSQL 服务器中的安全问题&#xff0c;并实现安全检测与审计目的。 功能介绍 1、执行自动检查并识别安全问题&#xff1b; 2、允许通过 Win…

驾驭冰雪 安全无忧,韩泰高性能冬季轮胎新品上市

- 韩泰轮胎推出冬季轮胎新产品Winter i*cept iZ3和SUV专用的Winter i*cept iZ3 X - 新轮胎采用了V型花纹&#xff0c;冰雪路面安全性极佳&#xff0c;而且具有操控性好、续航里程长的优点 - 新轮胎在位于北极圈以北300km的韩泰轮胎芬兰伊瓦洛测试场进行了严苛测试&#xff0c…

将用户证书导入到系统证书

现在大部分app已经不信任用户证书,通过传统charles安装证书抓包的方式已经不行,今天就来说一个将系统证书移动到系统目录的方法,系统证书的目录只有可读权限,有时候挂在目录会不成功 我们先下载如下模块 GitHub - ys1231/MoveCertificate: 支持Android7-14移动证书&#xff0…

【观察者】设计模式:构建灵活且响应式的软件系统

引言 在软件开发中&#xff0c;我们经常面临需要在多个对象之间进行通信的挑战。特别是当一个对象的状态发生变化时&#xff0c;我们希望所有依赖于这个状态的对象都能自动更新。这就是观察者设计模式大显身手的地方。 简介 观察者模式是一种行为设计模式&#xff0c;它定义…

【机器学习】XGBoost的用法和参数解释

一、XGBoost的用法 流程&#xff1a; 代码案例&#xff1a; 二、XGBoost的几大参数 1、一般参数&#xff0c;用于集成算法本身 ①n_estimators 集成算法通过在数据上构建多个弱 评估器&#xff0c;汇总所有弱评估器的建模结果&#xff0c;以获取比单个模型更好的回归或分类…

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_search函数&…

【ZYNQ】OV5640 介绍

OV5640 是 OmniVison (豪威) 公司推出的高性能数字图像传感器,支持最高 500 万像素图像采集,支持 RAW RGB、RGB565、YCbCr422 等图像格式输出。同时 OV5640 可用于图像补偿,包括自动曝光、白平衡、伽马调节、饱和度调节等功能。本文主要介绍 OV5640 工作原理与接口定义。 目…

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示 $str $_GET["name"]; //接受URL来的get形式的name传参 echo "<h2 aligncenter>欢迎用户".$str."</h2>";//在网页输出&#x…

HTB-You know 0xDiablos

引言 项目概述&#xff1a;HTB的EASY难度 PWN靶机 You know 0xDiablos https://app.hackthebox.com/challenges/106 本文详细解释了溢出payload的结构以及为什么要这样构造&#xff0c;友好的为想要入手PWN的朋友解释了原理技术点涉及: 32位linux逆向、32位程序调用、栈溢出目…

八叉树CSG布尔运算

1. 前言 布尔运算是几何内核的核心话题之一&#xff0c;又分为二维布尔运算和三维布尔运算&#xff0c;其中三维布尔运算技术难度较高&#xff0c;缘之空间维度的提升。 根据实现的理论不同&#xff0c;三维布尔运算又分为B-Rep布尔运算、CSG布尔运算、三角网格布尔运算等方法…

MySQL5.6.51安装

1 官网下载 MySQL :: Download MySQL Community Server (Archived Versions) 2 解压 3 配置环境 D:\MySQL\mysql-5.6.51-winx64\bin 把这个配置到path后面 4 启动 5 设置初始密码 set password for rootlocalhost password(123456); 6 登录mysql

【数据结构】栈与队列OJ题(用队列实现栈)(用栈实现队列)

目录 1.用队列实现栈oj题 对比 一、初始化 二、出栈 三、入栈 四、取队头元素&#xff1a; 2.用栈实现队列 一、定义 二、入队列 三、出队列 四、队头 五、判空 前言&#xff1a;如果想了解什么是栈和队列请参考上一篇文章进来一起把【数据结构】的【栈与队列】狠…

Cursor是什么?Cursor Pro Plus 如何订阅升级教程

一、Cursor是什么&#xff1f; Cursor 是一个基于 Visual Studio Code&#xff08;VS Code&#xff09;技术构建的高级代码编辑器&#xff0c;专为提高编程效率并更深度地整合 AI 功能而设计。它不仅继承了 VS Code 的强大功能和用户界面&#xff0c;还增加了专门针对 AI 支持…

Kafka3.6.0 linux 安装,非zk模式

1.下载 到kafka官网下载 2.上传到服务器指定位置 3.解压到指定目录&#xff0c;这里我放到/opt下 tar -xzvf kafka_2.13-3.6.0.tgz -C /opt/ 4.修改配置 因为我们不使用zookeeper&#xff0c;所以来到kafka装根目录的下的/config/kraft/ cd /opt/kafka_2.13-3.6.0/config…

前端HTML基础笔记

HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用于创建网页的标准标记语言。它通过一系列的元素&#xff08;或称为标签&#xff09;来定义网页的结构和内容。HTML文档由一系列的元素组成&#xff0c;这些元素可以包含文本、图片、链…

伽罗华域GF的简单计算

伽罗华域&#xff08;Galois Field&#xff09;&#xff0c;也称为有限域&#xff0c;是一个包含有限个元素的代数结构&#xff0c;满足加法、减法、乘法和除法&#xff08;除以零除外&#xff09;运算。伽罗华域在编码理论、密码学、数字信号处理等领域有广泛的应用。它以法国…

思科网络地址转换5

#网络安全技术实现# #任务五利用动态NAPT实现局域网访问Internet5# #1配置计算机的IP 地址、子网掩码和网关 #2配置路由器A的主机名称及其接口IP地址 Router>enable Router#conf t Router(config)#hostname Router-A Router-A(config)#int f0/0 Router-A(config-if)#i…

【Python报错已解决】 AttributeError: ‘move_to‘ requires a WebElement

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;检查元素选择器2.2 方法…

计算机毕业设计选题-基于python的企业人事管理系统【源码+文档+数据库】

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的企业人事管理系…