最近在某书上看到这样一句话--“所以,在保护继承时,基类的成员也只能由直接派生类访问,而无法再往下继承。”
有图有真相,上个书的截图如下:
对此,我疑问不解,一直觉得只是将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