class A
{
private:
int x;
public:
virtual void show()
{
cout<<"X: "<<x;
}
};
class B: public A
{
public:
virtual void show()
{
cout<<"In class B\n";
A::show();
}
};
我的问题是关于成员函数的可访问性。在这个例子中,我们可以说B的成员函数(B的show())可以访问A类中的X.
答案 0 :(得分:2)
由于x
中的private
被声明为A
,B
中的任何内容都无法直接访问它。当然,它可以间接访问 - B
可以调用可以访问A::show()
的{{1}}。但是x
无法访问B::show()
,x
也无法访问任何其他内容。
答案 1 :(得分:2)
您实际上并未访问A.x
,而是访问A.show()
。
要回答您的问题,B::show()
不访问x
中的私人成员A
。
原因是,class A
可以更改功能A::show()
并执行其他操作,而B
只能调用A::show()
。
这是封装的要点。你可以告诉A去做的事情(比如show()
),但A
决定如何做。
答案 2 :(得分:0)
2和3是可能的,因为A的“最易访问级别”被定义为公共。
Class B: public A
在您的代码中,具体而言,int x;
的可访问性级别无关紧要,因为它永远不会直接从B类访问。