protected成员:
(《C++ primer》P475给出的概念,因为翻译的问题,发现很多地方“类的用户”是指我们常说的“对象”)
- 像private成员一样,protected成员不能被类的用户(也称为对象) 访问。
- 像public成员一样,protected成员可被该类的派生类访问。
- 派生类只能通过派生类对象访问其基类的protected对象,派生类对其基类类型对象的protected成员没有特殊的访问权限。
对于第三条,个人认为很难理解。经过仔细思考并通过实际程序验证,算是基本理解,我的理解如下:
首先,假设Apple类有个成员函数memfun(cont Apple &a, const Fruit &f )。则在函数memfun中可以直接调用自身从基类继承来的price,也可以通过形参a访问a的price ( a.price ),这里a的类型也可以为FujiApple,但要经过测试a的类型不可以为orange。同时对于形参f也是被拒绝访问其price 成员的( f.price )。
经过测试最后总结如下:
一个类(假如既有基类又有派生类),则该类成员可以访问自身的protected成员或从基类继承来的protected成员,也可以访问为该类类型对象的protected成员,同时也可以访问其类型为派生类对象的protected成员。但不可以访问类型为基类对象的protected成员,及基类其它派生类的protected成员。
从上图可以看出类继承中的protected成员访问路线为下垂形,即:一个类只可以对自身类或同类类型对象protected访问,也可以访问其派生类从基类继承的protected成员,但是不可以访问派生类自身定义的protected成员。
转自:plkong ,感谢原作者的帮助!