【发布时间】:2012-07-22 19:47:51
【问题描述】:
为什么会编译:
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 进行编译,并且都编译了第一个但不是第二个代码 sn-p。
【问题讨论】:
-
@iammilind 你确定要关闭正确的问题吗?还是应该反过来?
-
@Eiko 最初我用这个关闭了另一个。然后我发现那里的答案更加详尽,并且引用了标准。因此重新打开它并关闭它。
标签: c++ inheritance encapsulation protected