zoukankan      html  css  js  c++  java
  • C++派生类成员的访问属性

    既然派生类中包含基类成员和派生类自己增加的成员,就产生了这两部分成员的关系和访问属性的问题。在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。


    实际上,对基类成员和派生类自己增加的成员是按不同的原则处理的。具体说,在讨论访问属性时,要考虑以下几种情况:

    1. 基类的成员函数访问基类成员。
    2. 派生类的成员函数访问派生类自己增加的成员。
    3. 基类的成员函数访问派生类的成员。
    4. 派生类的成员函数访问基类的成员。
    5. 在派生类外访问派生类的成员。
    6. 在派生类外访问基类的成员。


    对于第(1)和第(2)种情况,比较简单,基类的成员函数可以访问基类成员,派生类的成员函数可以访问派生类成员。私有数据成员只能被同一类中的成员函数访问,公用成员可以被外界访问。


    第(3)种情况也比较明确,基类的成员函数只能访问基类的成员,而不能访问派生类的成员。


    第(5)种情况也比较明确,在派生类外可以访问派生类的公用成员,而不能访问派生类的私有成员。


    对于第(4)和第(6)种情况,就稍微复杂一些,也容易混淆。譬如,有人提出这样的问题:

    • 基类中的成员函数是可以访问基类中的任一成员的,那么派生类中新增加的成员是否可以同样地访问基类中的私有成员;
    • 在派生类外,能否通过派生类的对象名访问从基类继承的公用成员。


    这些牵涉到如何确定基类的成员在派生类中的访问属性的问题,不仅要考虑对基类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。


    前面已提到,在派生类中,对基类的继承方式可以有public(公用的)、private (私有的)和protected(保护的)3种。不同的继承方式决定了基类成员在派生类中的访问属性。简单地说可以总结为以下几点。


    1) 公用继承(public inheritance)
    基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。


    2) 私有继承(private inheritance)
    基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有。


    3) 受保护的继承(protected inheritance)
    基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。保护成员的意思是,不能被外界引用,但可以被派生类的成员引用。

  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/secret114/p/4552465.html
Copyright © 2011-2022 走看看