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秒前编辑
答案 0 :(得分:1)
SetX受到保护,并且D2无法访问x。您只能限制访问权限,不能扩大访问范围。
答案 1 :(得分:0)
setX在D1中通过受保护的继承受到保护,并通过D2中的公共继承保持受保护。因此,它在D2中的最终访问级别受到保护。
您无法调用setX的原因取决于调用上下文。如果您从派生自Base或D1的类(例如D2)之外调用,那么您将无法调用它,原因与您无法调用任何受保护成员相同 - 它们仅供派生类使用。