访问控制与继承
在C++的继承体系中,每个类分别控制着其成员对于派生类来说是否可访问(accessible)。其中涉及到3种访控制修饰符,分别是public\protected\private,本篇文章来讨论关于C++继承中类成员可访问性的理解和判断。
继承体系中两个位置的访问说明符
下面首先给出一个表格清单:
从上面的表格中可以我们也可以清楚的知道,某个类对其继承而来的成员访问权限受到两个因素的影响,一是在基类中该成员的访问说明符,二是在派生类的派生列表中的访问说明符。
区分类成员的访问用户
这里我用了“用户”一个词,其实不完全正确,因为它不是我们通常理解上的用户,而凡是试图访问类中成员的主体都算作用户。为何需要区分类成员的访问用户,因为我们想要理解继承体系中类成员的访问权限,而访问的发出者是“用户”,自然不同的用户所拥有的访问权限不同,当明确了什么样的用户有什么样的访问权限、这些用户为什么有这种访问权限,便可以理解继承体系中
类成员访问权限这个问题。
举个例子,考虑如下的继承关系:
由上面的代码片段可以看出,无论派生访问说明符(即继承的方式)是public还是private,对于派生类中的其他成员,直接基类中的成员的访问权限并没有发生改变。这其实引出了第一种访问的用户——派生类中的其他成员。由上面的例子可以得出结论:派生访问说明符对于派生类的成员(及友元)能否访问其直接基类的成员没什么影响。