最近在某书上看到这样一句话--“所以,在保护继承时,基类的成员也只能由直接派生类访问,而无法再往下继承。”
有图有真相,上个书的截图如下:

对此,我疑问不解,一直觉得只是将public,降级到了protected,怎么会“只能由直接派生类访问,而无法再往下继承”呢??我编了如下代码为验证这个问题:
class Base
{
public:
void print()
{
cout << "class Base" << endl;
}
Base()
{
i = 10;
}
protected:
int i;
};class Drived: protected Base
{
public:
void print()
{
cout << "class Drived: public Base" << endl;
}
};class DrivedSub: protected Drived
{
public:
void print()
{
cout << "Sub drived class is " << i << endl;
}
};int _tmain(int argc, _TCHAR* argv[])
{DrivedSub ds;
ds.print();
return 0;}
结果正确的输出:Sub drived class is 10
说明在protected继承时,间接的子类中是可以访问基类的protected的。同理,public成员也是可以访问的。
以上仅一家之言,欢迎大家拍砖。
百度搜了一下,错误的文章还不少,大家都是抄来抄去的:
http://media.openonline.com.cn/media_file/200708/fushi/0803/C++yuyancxsj/web/lesson/chapter18/j6.htm
http://hi.baidu.com/rainysky_2006/blog/item/c9dfdb3dceb270c79e3d6230.html
http://hi.baidu.com/wentaokou/blog/item/a2541ccfff26ac0e93457ef6.html
本文针对保护继承时基类成员访问权限的问题进行了探讨,并通过实验代码验证了间接子类仍然能够访问基类的受保护成员。
1484

被折叠的 条评论
为什么被折叠?



