相关疑难解决方法(0)

访问另一个子类中的基类的受保护成员

为什么编译:

class FooBase
{
protected:
    void fooBase(void);
};

class Foo : public FooBase
{
public:
    void foo(Foo& fooBar)
    {
        fooBar.fooBase();
    }
};
Run Code Online (Sandbox Code Playgroud)

但这不是吗?

class FooBase
{
protected:
    void fooBase(void);
};

class Foo : public FooBase
{
public:
    void foo(FooBase& fooBar)
    {
        fooBar.fooBase();
    }
};
Run Code Online (Sandbox Code Playgroud)

一方面,C++为该类的所有实例授予对私有/受保护成员的访问权限,但另一方面,它不授予对所有子类实例的基类的受保护成员的访问权限.这看起来与我不一致.

我已经使用VC++和ideone.com测试了编译,并且编译了第一个但不是第二个代码片段.

c++ inheritance encapsulation protected

35
推荐指数
3
解决办法
2万
查看次数

为什么我不能从派生类的实例访问受保护的成员?

我有一段时间没有完成C++,也无法弄清楚为什么以下不起作用:

class A {
protected:
  int num;
};

class B : public A {
};

main () {
  B * bclass = new B ();
  bclass->num = 1;
}
Run Code Online (Sandbox Code Playgroud)

编译它会产生:

错误C2248:'A :: num':无法访问在类'A'中声明的受保护成员

派生类不应该访问受保护的成员吗?

我错过了什么?

c++ inheritance

13
推荐指数
4
解决办法
3万
查看次数

标签 统计

c++ ×2

inheritance ×2

encapsulation ×1

protected ×1