保护继承的派生类,它的子类可以访问基类的公共或保护成员吗?
RT,这个问题在两本书上看到不同的结论,不知道是不是印错了,所以请高手指教!
[解决办法]
无论是public、protected、private中的哪一种继承,所有继承Base的类对Base中的成员具有相同的访问。派生访问标号控制的不是这个,而是派生类的用户对从Base继承而来的成员的访问。
写个代码测试一下:
#include<iostream>
using namespace std;
class Base
{
public:
void basemem(); // public member
public:
int i; // protected member
};
class protected_derived : protected Base
{
public:
int use_base() { return i; } // ok: derived classes can access i
};
class public_derived : public Base
{
public:
int use_base() { return i; } // ok: derived classes can access i
};
int main()
{
protected_derived d0;
d0.i = 0; // error: 'Base::i' not accessible because 'protected_derived' uses 'protected' to inherit from 'Base'
public_derived d1;
d1.i = 1; // ok
return 0;
}