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

xは で宣言さprivateれているため、 から直接アクセスすることAはできません。Bもちろん、間接的にアクセスすることもBできA::show()ますx。しかしにアクセスすることはできず、 内の他のものにもB::show()アクセスできません。xB

于 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 に答える