C++类多级派生时的访问属性
时间:2014-11-07 22:09 点击:次
在实际项目开发中,经常会有多级派生的情况。如图11.9所示的派生关系:类A为基类,类B是类A 的派生类,类C是类B的派生类,则类C也是类A的派生类;类B称为类A 的直接派生类,类C称为类A的间接派生类;类A是类B的直接基类,是类 C的间接基类。
图 11.9
在多级派生的情况下,各成员的访问属性仍按以上原则确定。
为了把多重继承说的更加详细,请大家先看下面的几个继承的类。
[例11.4] 如果声明了以下的类:
类A是类B的公用基类,类B是类C的保护基类。各成员在不同类中的访问属性如下:
根据以上分析,在派生类C的外面只能访问类C的成员函数f5,不能访问其他成员。 派生类C的成员函数f5能访问基类A的成员i、f2、j和派生类B的成员f3、f4。派生类B 的成员函数f3、f4能访问基类A的成员i、f2和j。
通过以上分析,可以看到:无论哪一种继承方式,在派生类中是不能访问基类的私有成员的,私有成员只能被本类的成员函数所访问,毕竟派生类与基类不是同一个类。
如果在多级派生时都采用公用继承方式,那么直到最后一级派生类都能访问基类的公用成员和保护成员。
如果采用私有继承方式,经过若干次派生之后,基类的所有的成员已经变成不可访问的了。
如果采用保护继承方式,在派生类外是无法访问派生类中的任何成员的。
而且经过多次派生后,人们很难清楚地记住哪些成员可以访问,哪些成员不能访问,很容易出错。因此,在实际中,常用的是公用继承。
图 11.9
在多级派生的情况下,各成员的访问属性仍按以上原则确定。
为了把多重继承说的更加详细,请大家先看下面的几个继承的类。
[例11.4] 如果声明了以下的类:
- class A //基类
- {
- public:
- int i;
- protected:
- void f2( );
- int j;
- private:
- int k;
- };
- class B: public A //public方式
- {
- public:
- void f3( );
- protected:
- void f4( );
- private:
- int m;
- };
- class C: protected B //protected方式
- {
- public:
- void f5( );
- private:
- int n;
- };
class A //基类 { public: int i; protected: void f2( ); int j; private: int k; }; class B: public A //public方式 { public: void f3( ); protected: void f4( ); private: int m; }; class C: protected B //protected方式 { public: void f5( ); private: int n; };
i | f2 | j | k | f3 | f4 | m | f5 | n | |
基类A | 公用 | 保护 | 保护 | 私有 | |||||
公用派生类B | 公用 | 保护 | 保护 | 不可访问 | 公用 | 保护 | 私有 | ||
保护派生类C | 保护 | 保护 | 保护 | 不可访问 | 保护 | 保护 | 不可访问 | 公用 | 私有 |
根据以上分析,在派生类C的外面只能访问类C的成员函数f5,不能访问其他成员。 派生类C的成员函数f5能访问基类A的成员i、f2、j和派生类B的成员f3、f4。派生类B 的成员函数f3、f4能访问基类A的成员i、f2和j。
通过以上分析,可以看到:无论哪一种继承方式,在派生类中是不能访问基类的私有成员的,私有成员只能被本类的成员函数所访问,毕竟派生类与基类不是同一个类。
如果在多级派生时都采用公用继承方式,那么直到最后一级派生类都能访问基类的公用成员和保护成员。
如果采用私有继承方式,经过若干次派生之后,基类的所有的成员已经变成不可访问的了。
如果采用保护继承方式,在派生类外是无法访问派生类中的任何成员的。
而且经过多次派生后,人们很难清楚地记住哪些成员可以访问,哪些成员不能访问,很容易出错。因此,在实际中,常用的是公用继承。
顶一下
(0)
0%
踩一下
(0)
0%
上一篇:C++保护成员和保护继承
下一篇:C++派生类的构造函数
相关内容:
最新内容
热点内容
- QQ群
-
微信
- 返回首页
- 返回顶部