由基类到派生类的过程中,在派生类里如何访问基类成员,以及派生类对象如何访问基类成员,是根据派生类在从基类派生时是以什么方式进行的派生:public、protect或者private。下面说一下在这三种派生方式下成员函数和成员变量的访问和修改权限。派生类是指直接派生类!
【代码1】
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
class Base{ //其他内容public: int BaseFunPb(){return m_nPb;} int BaseFunPt(){return m_nPt;} int BaseFunPr(){return m_nPr;}public: int m_nPb;protected: int m_nPt;private: int m_nPr;};class Cpb:public Base{ //其他内容public: int GetPb(){return m_nPb;} int GetPt(){return m_nPt;} int GetPr(){return m_nPr;}};class Cpt:protected Base{ //其他内容public: int GetPb(){return m_nPb;} int GetPt(){return m_nPt;} int GetPr(){return m_nPr;}};class Cpr:private Base{ //其他内容public: int GetPb(){return m_nPb;} int GetPt(){return m_nPt;} int GetPr(){return m_nPr;}}; int main(){ Cpb objB; Cpt objT; Cpr objR; //其他内容} |
访问分为:类对象访问、类内访问两种;
对于基类继承下来的成员的访问与修改权限如下:
| 基类成员访问权限(列) |
public | protected | private | |||
| 派生方式(行) | 派生类对象 | 派生类类内 | 派生类对象 |
派生类类内 |
派生类对象 |
派生类类内 |
| public | 可访/可修 | 权限:public 可访/可修 |
不可访/不可修 | 权限:protected 可访/不可修 |
不可访/不可修 | 权限:private 不可访/不可修 |
| protected | 不可访/不可修 | 权限:protected 可访/不可修 |
不可访/不可修 | 权限:private 可访/不可修 |
不可访/不可修 | 权限:private 不可访/不可修 |
| private | 不可访/不可修 | 权限:private 可访/不可修 |
不可访/不可修 | 权限:private 可访/不可修 |
不可访/不可修 | 权限:private 不可访/不可修 |
派生类内不管是 public、protected、private 继承,总是可以访问基类中的public、protected 成员,基类中的 private 成员永远不能在派生类内直接访问,不论通过哪种方式。
派生类对象仅当public派生时,对基类中的public成员有可访问/可修改的权限,其他都为不可访问/不可修改。
用‘B’代表public,用'T‘代表protected,用'R’代表private;BT->T代表基类成员访问权限为B,派生方式为T,派生后成员在派生类内的访问权限为T;‘r'表示可访问,’w'代表可修改,‘-'表示不可访问或不可修改,在第一位表示不可访,在第二位表示不可修;则上表简化为如下:
| 访问权限变更 |
派生类对象 | 派生类类内 | 访问权限变更 | 派生类对象 | 派生类类内 | 访问权限变更 |
派生类对象 | 派生类类内 |
| BB->B | rw | rw | TB->T | -- | r- | RB->R | -- | -- |
| BT->T | -- | r- | TT->R | -- | r- | RT->R | -- | -- |
| BR->R | -- | r- | TR->R | -- | r- | RR->R | -- | -- |
当派生类下面还有派生类时,派生类作为基类,权限更改同上!