为什么这段代码可以编译通过:
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(Foo& fooBar)
{
fooBar.fooBase();
}
};
但这个不行吗?
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(FooBase& fooBar)
{
fooBar.fooBase();
}
};
一方面,C ++允许所有该类实例访问私有/受保护成员,但另一方面,它不会授予所有子类实例访问基类的受保护成员的权限。这对我来说看起来相当不一致。
我已经使用VC ++和ideone.com进行了编译测试,两者都可以编译第一个代码片段,但不能编译第二个代码片段。