我是靠谱客的博主 鳗鱼夕阳,最近开发中收集的这篇文章主要介绍C++中的访问控制与继承,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

访问控制与继承

在C++的继承体系中,每个类分别控制着其成员对于派生类来说是否可访问(accessible)。其中涉及到3种访控制修饰符,分别是publicprotectedprivate,本篇文章来讨论关于C++继承中类成员可访问性的理解和判断。

继承体系中两个位置的访问说明符

下面首先给出一个表格清单:
这里写图片描述
从上面的表格中可以我们也可以清楚的知道,某个类对其继承而来的成员访问权限受到两个因素的影响,一是在基类中该成员的访问说明符,二是在派生类的派生列表中的访问说明符

区分类成员的访问用户

这里我用了“用户”一个词,其实不完全正确,因为它不是我们通常理解上的用户,而凡是试图访问类中成员的主体都算作用户。为何需要区分类成员的访问用户,因为我们想要理解继承体系中类成员的访问权限,而访问的发出者是“用户”,自然不同的用户所拥有的访问权限不同,当明确了什么样的用户有什么样的访问权限、这些用户为什么有这种访问权限,便可以理解继承体系中
类成员访问权限这个问题。
举个例子,考虑如下的继承关系:
这里写图片描述
由上面的代码片段可以看出,无论派生访问说明符(即继承的方式)是public还是private,对于派生类中的其他成员,直接基类中的成员的访问权限并没有发生改变。这其实引出了第一种访问的用户——派生类中的其他成员。由上面的例子可以得出结论:派生访问说明符对于派生类的成员(及友元)能否访问其直接基类的成员没什么影响。对基类成员的访问权限只与基类中的访问说明符有关。Pub_Derv和Priv_Derv都能访问受保护的成员prot_mem,同时它们都不能访问私有成员priv_mem。
接着上面已有的代码来再看一个例子:
这里写图片描述
这个例子引出了第二种访问用户——使用派生类的用户。在这里可以看出派生访问说明符起了作用,因为原本基类中共有的成员由于私有继承而使得派生类的用户无法访问。由此可以得出结论:派生访问说明符的目的是控制派生类用户(包括派生类的派生类在内)对于基类成员的访问权限。Pub_Derv和Priv_Derv都继承了pub_mem函数。如果继承是公有的,则成员将遵顼其原有的访问说明符,此时d1可以调用pub_mem。在Priv_Derv中,Base成员是私有的(就像之前表格展示的那样),因此类的用户不能调用pub_mem。
在上面的结论中还提到了一种用户,这里也可以把其剥离出来,称作第三种访问类成员的用户——继承自派生类的新类。在访问权限的角度上看,这中用户和第二种用户的权限是一致的,它们都受两个位置说明符的共同作用,也就是遵循上面表格展示的那样。下面的例子说明了这一点:
这里写图片描述
Pub_Derv的派生类之所以能访问Base的prot_mem成员是因为该成员Pub_Derv中仍然是受保护的。相反,Priv_Derv的派生类无法执行类的访问,对于它们来说,Priv_Derv的继承自Base的所有成员都是私有的。

总结:通过从访问用户的角度来理解继承体系中的访问权限,因为用户是访问的主体,而权限用来约束的也是用户。

private和inaccessible不一样

当然不一样,那我为什么还有列出这个问题,是因为我总是会混淆private和inaccessible这两个的含义,或者说我不理解为何又冒出一个inaccessible这种权限。其实“不可访问”这种权限一种存在,以至于我们都忘了它的存在,类的用户本就不可访问类的private,难道不是吗?

文章部分内容引自《C++ Primer 第五版》及其他资料文章

最后

以上就是鳗鱼夕阳为你收集整理的C++中的访问控制与继承的全部内容,希望文章能够帮你解决C++中的访问控制与继承所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部