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

2024-09-07 11:04

本文主要是介绍访问修饰符public、protected、private,基于C++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基本概念

公有(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++ 中,“非派生类的外部代码” 指的是既不属于当前类本身,也不属于从当前类派生出来的任何类的代码部分。

这篇关于访问修饰符public、protected、private,基于C++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144878

相关文章

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四: