访问控制和继承方式
作者:@houkai
本文为作者原创,转载请注明出处:https://www.cnblogs.com/houkai/p/3564284.html
这部分内容比较繁琐,但很简单,在此条理地介绍一下。
1.首先,介绍:对类中成员的访问方式
先举一个例子,了解水平访问和垂直访问
#include "iostream.h" using namespace std; class A { private: int ma; public: void afun(){} }; class B:public A { private: int mb; public: void bfun(){} }; void B::bfun() { afun(); //垂直访<span style="font-size: 12px;">问,子类B中的成</span>员函数访问从A继承的afun()函数 } void main() { A aobj; aobj.afun(); //水平访问,外部函数(.函数)访问实例中的afun函数 B bobj; bobj.afun(); //水平访问,访问bobj从A中继承的afun函数 bobj.bfun(); //水平访问,访问bobj的bfun函数 }
访问包括两种方式:水平访问和垂直访问
(1)水平访问,是指对类中成员的实例化使用;
(2)垂直访问,指在使用继承时,派生类中成员函数对基类成员的访问。
2.访问控制和继承方式
访问控制被用于数据的封装和保护。可以从两个角度实现对类中数据的访问控制:设置类成员的访问属性和设置继承方式。
类成员的访问属性有三种,即public、private和protected。
公有成员允许外部函数访问;私有成员不允许外部函数访问,只允许本类的成员函数访问;保护成员不允许外部函数访问,但允许本类和其子类的成员函数访问。
(1)继承方式对水平访问的影响(这是我们最常用见的)
如下表:
继承方式 |
基类访问权限 |
派生类访问权限 |
对继承成员的水平访问(.函数) |
public |
public
|
public
|
yes
|
private |
public
|
private
|
no
|
protected |
public
|
protected
|
no
|
说明:若piblic>protected>private;那么派生类的访问权限=min(基类访问权限,继承方式),然后根据派生类中成员的访问属性确定水平访问权限。
(2)继承方式对垂直访问的影响(垂直方向上如A派生B,B派生C)
如下表:
说明:1、继承方式只是改变了继承成员的访问权限,对父子类的垂直访问没有影响;
2、只要父类中元素是public或protected,子类均可垂直访问。
(A<-B)继承方式 |
A中访问权限 |
B中访问权限 |
B中函数对继承成员的访问 |
C中函数对继承成员的访问(B<-C的继承方式任意) |
public |
public
|
public
|
yes
|
yes
|
private |
public
|
private
|
yes
|
no
|
protected |
public
|
protected
|
yes
|
yes
|
总结:上表中第4列和第2列有关;第5列和第3列有关。如前所述,第3列是由1、2列得到的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架