0
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。

4

3 回答 3

2

Since x is declared private in A, nothing in B can directly access it. Of course, it can be accessed indirectly -- B can call A::show() which can access x. But B::show() cannot access x, nor can anything else in B.

于 2012-05-18T00:29:08.500 回答
2

你不是真的在访问A.x,你是在访问A.show()

要回答您的问题B::show()不访问.xA

这样做的原因是,class A可以更改功能A::show()并执行其他操作,并且B可以调用A::show().

这是封装的要点。您可以告诉 A 做某事(如),但决定如何做show()A

于 2012-05-18T00:46:08.887 回答
0
  1. A::show() 可以访问它自己的类 A 中的任何成员变量。
  2. B 类中的成员函数可以访问 A 类中的任何公共或受保护 成员变量
  3. B 类中的成员函数可以访问 A 类中任何受保护的公共成员函数

2 和 3 是可能的,因为 A 的“最易访问级别”被定义为公共。

Class B: public A

具体来说,在您的代码中,可访问性级别int x;无关紧要,因为它永远不会直接从 B 类访问。

于 2012-05-18T01:02:21.407 回答