2023.06.30
我们说的所谓“对内可见”,“对外不可见”首先要明确:
“对内可见”,也即“对类可见”,可以体现为,在派生类的成员函数中是否能访问基类的数据成员;
“对外不可见”,也即“对类的对象不可见”,可以体现为,在main函数中能否通过实例化的派生类对象去访问基类的数据成员;
目前用devc++实践出来的结论是:
空格中填写对于Base类成员的可访问性 | Base类中成员 | |||
public成员 | protected成员 | private成员 | ||
Base类 | √ | √ | √ |
Base类的派生类 | public继承 | √ | √ | |
protected继承 | √ | √ | ||
private继承 | √ | √ | ||
Base类的派生类对象 | public继承 | √ | ||
protected继承 | ||||
private继承 |
Base的public子类的派生类 | public继承 | √ | √ | |
protected继承 | √ | √ | ||
private继承 | √ | √ | ||
Base的public子类的派生类对象 | public继承 | √ | ||
protected继承 | ||||
private继承 |
Base的protected子类的派生类 | public继承 | √ | √ | |
protected继承 | √ | √ | ||
private继承 | √ | √ | ||
Base的protected子类的派生类对象 | public继承 | × | ||
protected继承 | ||||
private继承 |
Base的private子类的派生类 | public继承 | |||
protected继承 | ||||
private继承 | ||||
Base的private子类的派生类对象 | public继承 | |||
protected继承 | ||||
private继承 |
总结:
在单次继承中,我们无法观察到protected继承和private继承的任何差别;
protected和private的区别只有在继承后再继承才能体现出来;
暂时整理不出来为啥;