1

公的権利と私的権利の概念を確実に把握したいだけです。

プライベートアクセス指定子に関して、それは次のことを意味しますか:

  • クラス内のみアクセス可能
  • それらにアクセスするために使用できる public クラス メソッドがない限り、クラスのオブジェクトからアクセスすることはできません (他のオブジェクトはそれらの public 関数を使用できますか? )
  • 他のオブジェクトはそれらにアクセスできません

そして公開の場合:

  • クラスのオブジェクトからアクセス
  • 他のオブジェクトからアクセス

そうですか?

4

5 に答える 5

4

private : クラスのメンバー関数とフレンドのみがアクセスできます。
public : オブジェクトがスコープを持つ場所ならどこでもアクセスできます。


質問に答える -

プライベート:

  1. はい
  2. はい。(他のオブジェクトはそれらのパブリック関数を使用できますか? クラス関係がなければ、クラスの一方のオブジェクトは他方のメンバーと通信できません。)
  3. 友達は、クラスのプライベート メンバーにアクセスできます。したがって、答えはクラスに友達がいるかどうかによって異なります。

公開:

  1. はい
  2. アクセスしようとしているメンバーのクラスとオブジェクトが階層関係にあるかどうかによって異なります。
于 2011-02-07T09:03:00.477 に答える
2

そもそも語彙の問題があると思います。

C++ (およびほとんどの言語) では、 aclassは atypeです。実際に何かを構築するための設計図と考えることができます。

  • 保持されている属性について説明します
  • それらの属性を操作するメソッドについて説明します
  • 適用される制限について説明します。これが「アクセシビリティ」です。

Anobjectは、実際にクラスをインスタンス化することによって生成されます。つまり、ブループリントが記述したものを構築します。それは多かれ少なかれ属性の束です。同じ設計図からいくつかの家を持つことができるように、同じクラスのいくつかのオブジェクトを持つことができます: 明らかな理由で物理的な場所が異なることに注意してください :)

では、アクセシビリティについて。publicアクセシビリティには、 、 、の 3 つの一般的なレベルがありprotectedますprivate

  • publicは、予想どおり、全員が属性またはメソッドのいずれかにアクセスできることを意味します
  • protectedやや自明ではありません。これは、オブジェクトまたはその子のみが属性 (悪い考え*) またはメソッドにアクセスできることを意味します。(さらに、C++ では、friends)
  • privateそのクラスのオブジェクト (およびその子ではない) のみが属性またはメソッドにアクセスできることを意味します (さらに、C++ では、friends)

注: アクセシビリティのレベルに関係なく、オブジェクトは同じクラスのオブジェクトのすべての属性とメソッドに無制限にアクセスできます。

(*) ときどきポップアップしますが、protected属性を使用するのは一般的に悪い考えです。カプセル化のポイントは、詳細を隠すことです。これは、そのためだけでなく、データにアクセスできるユーザーを正確に制御することで、クラスがその不変条件(単純な例では、サイズを格納する配列) を維持できるようにするためです。個別に、「サイズ」が実際に配列内のアイテムの数を常に表していることを確認する必要があります)。注: この制限は、たとえば C# のように階層を封印できる場合には適用されません。

于 2011-02-07T10:38:32.020 に答える
2

プライベート メンバーには、同じクラスのメンバー関数と静的関数、およびクラスのフレンドのみがアクセスできます。その関数がどのオブジェクトで呼び出されるかは問題ではありません。だからケース

class Foo
{
  private:
    void bar() {}
  public:
    void baz(Foo& var)
    {
      var.bar();
    }
}

完全に合法です。

于 2011-02-07T09:13:24.180 に答える
1

それは正しいようです。public とマークされたデータ メンバーと関数は、誰でもどこからでもアクセスできます。private とマークされたデータ メンバーと関数には、クラスとそのフレンドのみがアクセスできます。ただし、クラスのメンバー関数は任意のアクセス指定子を使用してデータにアクセスできるため、パブリック関数はプライベート データ メンバーを読み書きできます (これは OOP で広く使用されます)。

于 2011-02-07T09:02:25.353 に答える