保护类的继承

问题描述 投票:0回答:1

我对这段代码有疑问:

class X {
    protected:
    int v;
};

class Y : protected X {
public:
    Y() : v(0) {}
    
};

int main()
{
    Y *y = new Y();
    cout << y->v;
    delete y;
    return 0;
}

我非常确定它很好,因为 X 的 v 成员可以从 Y 访问,因为 Y 是受保护类的子类,该受保护类具有受保护成员( v ),但我有一个编译错误。 有人可以帮助我理解吗?谢谢!

c++ class inheritance protected
1个回答
0
投票

你误解了

protected
是什么。它不是一种将基类中无法从外部访问的内容转变为派生类中每个人都可以访问的机制。它仅提供派生类访问权限:

class X {
    public:
    X(int v) : v(v) {}
    protected:
    int v;
};

class Y :  public X {
public:
    Y() : X(0) {         // Base class initializes its members 
        std::cout << v;  // OK
    }    
};
    

此外,您似乎将

protected
继承与创建成员
protected
混为一谈,我从上面删除了它。它并没有改变无法从外部访问
v
的事实,我认为这超出了问题的范围。您应该阅读以下两者:受保护的成员和受保护的继承。

© www.soinside.com 2019 - 2024. All rights reserved.