c ++访问级别

时间:2011-03-14 04:25:24

标签: c++

class Base{
public:
    void setX(int a) {x=a;}
private:
    int x;
};

class D1: protected Base{};?
class D2: public D1{};

D2类中成员函数setX()的访问级别是多少? 它受到保护吗?私人? 任何人都可以解释这一点,我的意思是如何判断关于内在性的访问级别....这样的事情。谢谢!

已编辑:添加更多问题

但为什么我不能打电话:d2.setX()? d2是D2的实例。原来编译错误 - 用户658213 0秒前编辑

2 个答案:

答案 0 :(得分:1)

SetX受到保护,并且D2无法访问x。您只能限制访问权限,不能扩大访问范围。

答案 1 :(得分:0)

setX在D1中通过受保护的继承受到保护,并通过D2中的公共继承保持受保护。因此,它在D2中的最终访问级别受到保护。

您无法调用setX的原因取决于调用上下文。如果您从派生自Base或D1的类(例如D2)之外调用,那么您将无法调用它,原因与您无法调用任何受保护成员相同 - 它们仅供派生类使用。