2011-03-14 81 views
0
class Base{ 
public: 
    void setX(int a) {x=a;} 
private: 
    int x; 
}; 

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

什么是类D2中的成员函数setX()的访问级别? 是否受到保护?私人? 任何一种人都可以解释这一点,我的意思是如何判断访问级别的相关性......这样的事情。谢谢!C++访问级别

编辑:添加更多的问题

但为什么我不能叫:d2.setX()? d2是D2的一个实例。原来编译器错误 - user658213 0秒前编辑

+0

什么是成员函数'X()'?为什么'D2'自己公开继承?你想做什么 ? – Mahesh 2011-03-14 04:29:01

+0

'class D2:public D1 {}'? – 2011-03-14 04:30:03

+0

对不起,几个tpyos – user658213 2011-03-14 04:30:57

回答

1

SetX受保护,x无法从D2访问。你只能限制访问,你不能扩大它。

+0

但我为什么不能调用:d2.setX()? d2是D2的一个实例。事实证明,编译器错误 – user658213 2011-03-14 04:34:56

+0

出于同样的原因,如果你已经在'D2'本身声明了'setX',@ User,你就不能调用它。它受到保护,所以你不能从课外或其后代访问它。 – 2011-03-14 04:40:23

+0

你可以使用'using'来“扩大”访问。 – 2011-03-14 04:50:59

0

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

您无法调用setX的原因取决于调用上下文。如果您是从基地或D1(例如D2)派生出来的班级之外打电话,那么您将无法以相同的原因致电您,因为您无法致电任何受保护的成员 - 它们仅供派生班级使用。