访问修饰符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++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O