2011-02-07 16 views
1

私は公的および私的な権利の考え方を持っていることを確認したいだけです。プライベートアクセス指定子についてC++アクセス指定子

、それはどういう意味:クラス内でアクセスのみ

  • に使用することができますパブリッククラスメソッドがない限り
  • は、クラスのオブジェクトからアクセスすることはできません。それらにアクセスする(は、他のオブジェクトは、それらのパブリック関数を使用することはできますか?
  • 他のオブジェクトがそれらに
012にアクセスすることはできません

や公共のために:クラス 他のオブジェクトからアクセスし

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

    • は、右か?

    +1

    のサブクラスである: 'protected'は。プライベートのように機能しますが、サブクラスは保護されたメソッド/データにもアクセスできる点が異なります。もちろん、コンパイラはあなたのアクセスがインターフェイスに準拠していることをチェックします。プライベート・ロックは、基本クラスのプライベート・インタフェースからサブクラスをロックします。 – justin

    +0

    私はコンセプトを混ぜていると思います。 「クラスの目的」とは何ですか?この文脈では、クラスとクラスのオブジェクトは基本的に同じです。 – Gorpik

    答えて

    2

    私はまずは語彙の問題があると思います。

    C++(および多くの言語)では、classtypeです。実際に何かを構築するための青写真として考えることができます。

    • それは、それが適用される制限について説明し、それらの属性
    • を操作する方法を説明し
    • を開催している属性を説明します。これは、「ユーザー補助」

    objectがあるさ実際にクラスをインスタンス化することによって生成された、つまり、青写真が説明したものを構築します。多かれ少なかれ属性の束です。同じ青写真のいくつかの家を持つことができるのと同じクラスのいくつかのオブジェクトを持つことができます:その物理的な場所は明白な理由で異なっていることに注意してください:)

    今、典型的なアクセシビリティレベルは、public,protectedおよびprivateです。予想通り

    • public

      は、やや少ない簡単です、誰もがいずれかの属性やメソッド
    • protectedへのアクセス権を与えられていることを意味します。これは、オブジェクトまたはその子だけが属性(悪いアイデア*)またはメソッドにアクセスできることを意味します。 (プラス、C++、friend秒で)
    • privateのみ、そのクラスのオブジェクト(とない子どもが)(、C++で、friend秒プラス)属性やメソッドにアクセスする可能性があることを意味

    注:アクセシビリティのレベルがどのようなものであっても、オブジェクトは同じクラスのオブジェクトのすべての属性とメソッドにの制限なしのアクセスを持っています。

    (*)現在のところポップアップしても、一般にprotected属性を使用することは悪い考えです。カプセル化のポイントは、それだけでなく、誰がデータにアクセスできるかを正確に制御することによって、そのクラスがの不変式(単純な例では、格納する配列サイズを別にするには、「サイズ」が実際に配列内のアイテムの数を常に表していることを確認する必要があります)。 注:この制限は、というシールをC#などの階層にできる場合には当てはまりません。

    +0

    あなたの言い回しは、同じクラスの 'private'よりも' protected'音をより制限的にします。また、オブジェクトの子供は何ですか? – juanchopanza

    +0

    @juanchopanza: "子"は "スーパーオブジェクト"(ベースオブジェクトの属性にアクセスする派生インスタンスの場合)を意味します。あなたがより良い言葉を提案するなら、私はそれのためにすべてです。 –

    +0

    おそらくs/object/type /? – juanchopanza

    1

    これは正しいようです。公開されたデータメンバーおよび機能には、誰でもどこからでもアクセスできます。 privateとマークされたデータメンバーおよび関数は、クラスおよびその友人のみがアクセスできます。しかし、クラスのメンバ関数は任意のアクセス指定子を持つデータにアクセスできるため、パブリック関数はプライベートデータメンバを読み書きできます(これはOOPでは普遍的に使用されています)。

    4

    プライベート:クラスのメンバー機能と友人のみがアクセスできます。
    公開:オブジェクトにスコープがある場所ならどこでもアクセスできます。


    答える質問 -

    プライベート:

    1. はい
    2. はい。 (他のオブジェクトはそれらの公開関数を使用できますか?クラス関係を持たないため、クラスの1つのオブジェクトは他のメンバーと通信できません)
    3. フレンドはクラスのプライベートメンバーにアクセスできます。だから、答えはあなたのクラスが友人かどうかによって決まります。公共

    1. はい
    2. は、オブジェクトがアクセスしようとしているメンバーのクラスに階層的な関係を持っているかどうかによって異なります。
    +0

    OOPでは、ここで完全に除外されている非常に重要なアクセス指定子はもちろん 'protected'です。宣言クラスのサブクラスはそれらのメンバーにもアクセスできる点を除いて基本的に' private'のように動作します。 – pdinklag

    +0

    @pdinklag:それほど重要ではありません。間違いなく、関数には役に立たない、属性のための悪い考えは、いくつかのシナリオでは、コンストラクタ/代入/デストラクタと共に使用できます。 –

    +2

    @Matthieu、機能には役に立たないものではありません。純粋な仮想保護された関数のセットは、派生クラスが実装すべきインターフェースを定義するためによく使用されます。次に、基本クラスはこのインタフェースを使用して実際のタスクを実行します。 [QIODevice :: readData()](http://doc.qt.nokia.com/latest/qiodevice.html#readData)はその良い例です。 –

    2

    プライベートメンバーには、同じクラスのメンバー関数と静的関数、およびそのクラスの友人のみがアクセスできます。その関数が呼び出されるオブジェクトは関係ありません。したがってケース

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

    は完全に合法です。

    0

    C++のデータとfnは1単位としてカプセル化されています。 我々は書き込むことでプログラムを開始 プリプロセッサディレクティブ その後、我々はまた、(、官民または保護された)アクセス修飾子ついに

    &メイン()プログラムを指定する機能(FN)が続くクラス宣言 宣言。

    我々はFNを宣言する場合 プライベート:データすることができます:クラスのオブジェクト内のデータのみがIT-

    公開(データとプライベートFNを持つオブジェクト)内で定義されたFNによってアクセスされます任意のfnによってアクセスされる

    プロテクト:プライベートに似ていますが、データには別のクラスのプロパティを継承するサブクラスでアクセスすることもできます。

    例クラスAがクラスBから継承する場合、thenAは第3の共通レベルがありますB.

    +0

    あなたはこれが役に立つと思います。 –

    関連する問題