C++ "类中的访问标号"和"派生访问标号"的关系简析
首先介绍一下概念,我所说的类中的访问标号,如下例:
其中的public、protected、private即为“类中的访问控制标号”。
派生标号呢?也举一例:
其中的public即为“派生访问标号”,当然也有相应的protected、private。
1、public派生不改变基类中的成员和方法在派生类中的“类中的访问控制标号”。
2、protected将原来基类中的public成员和方法在派生类中的“类中的访问控制标号”变为protected。
3、private则相应的全部变为private。
现在想讨论的是,在这两种访问控制标号的影响下,我们能访问些什么 ?不能访问些什么?先看测试程序(其中注释掉的代码为有错误,不能编译通过的部分)
Derived1(public派生)想说明的是:
1、即便是在public派生访问标号的情况下,我们也不能直接对继承而来的,Base类中的public或者protected成员直接(指不是函数中,下同)进行赋值或修改(private的当然更不可能)。但我们可以在派生类Derived1的构造函数的初始化列表中,用基类Base的构造函数进行初始化基类的成员。
2、如//pub();所示,我们也不能在基类中直接调用基类的方法,即使是public的方法,当然也即便是在public派生。同理(protected、private的方法也不能直接调用)。
3、不过就上如上面所示,我们在派生类的函数中就可以访问public和protected成员和方法。总之,派生标号不影响派生类对基类成员的访问。
4、由类生成的对象只能访问类的public成员。
Derived2(protected派生):
进一步证实了上面的观点。感兴趣的朋友也可以自己在补充完整,再验证一下。