C++ primer中的protected 成员深入理解

来源:互联网 发布:sql 教程 编辑:程序博客网 时间:2024/05/20 04:27
C++ primer中的protected 成员深入理解

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 ,感谢原作者的帮助!

原创粉丝点击