原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?boardid=56&id=175160
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 中学者
*/ 时间: 2007-10-5 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
作为新手,想必可能有和我遇到同样问题的。希望这篇文章对大家有帮助,也希望这篇文章大家能对我有帮助。学习继承,我主要总结了关于成员可见性的问题。。
作为继承,主要有三种:公有继承,私有继承(默认继承方式),保护继承。
公有继承:
基类中的公有成员在派生类中仍公有;
基类中的保护成员在派生类中仍保护;
基类中的私有成员在派生类中不可见,仅基类可见。
私有继承:
基类中的公有成员在派生类中为私有;
基类中的保护成员在派生类中为私有;
基类中的私有成员在派生类中不可见,仅基类可见。
保护继承:
基类中的公有成员在派生类中为保护;
基类中的保护成员在派生类中为保护;
基类中的私有成员在派生类中不可见,仅基类可见。
通过继承机制,派生类继承了基类的成员,所继承的成员只属于派生类,即基类和派生类各有一份这样的成员,这点很重要。
接下来,我们不慌看继承,回到类来看:(个人理解所谓可见性即是调用权限!)
#include《iostream》
using namespace std;
class A{
public:
void dump()const{....}
protected:
void set(){......}
private:
void get(){.......}
};
int main()
{
A a;
a.dump();//ok!
/* a.set(); */ //wrong!
/* a.get(); */ //wrong!
return 0;
}
函数set()和get()在main函数中都不能调用,说明它们的调用权限仅属于类,即对main不可见。同理可知dump().
下面我们以公有继承为例:
总结上面的,做了一张表:(注:派生类中成员的可见性是指继承来的和自身添加的成员。)
|
成员 |
基类(类) |
派生类 |
main |
|
私有数据 |
可见 |
不可见 |
不可见 |
|
私有函数 |
可见 |
不可见 |
不可见 |
|
保护数据 |
可见 |
可见 |
不可见 |
|
保护函数 |
可见 |
可见 |
不可见 |
|
公有数据 |
可见 |
可见 |
可见 |
|
公有函数 |
可见 |
可见 |
可见 |