0

以下のようにいくつかのクラスを作成しました(実際のクラスをここに置くことができないため、例としていくつか書いています)

 class One {
      private :
         char *link;
         int count 

        }


 class Two {
      private :
         char *link;
         int count 

        }

 class  Three :: public TWO  {
      private :
         char *link;
         int count ;
          One One_object;

        }

 int main() {

     Three test;
     cout << test.One_object.link ; // error becoz of accessing private member 

       }

ここで、プライベート メンバーにアクセスする最善の方法は何でしょうか。アクセスするだけの価値がある場合は、データを取得するための get メソッド関数を記述できます。

しかし、私の実際のクラスでは、多くのデータメンバーが保護されています..これについて光を通して誰かできますか..

4

2 に答える 2

1

privateおよびprotectedメンバー変数は、メンバー関数 aka を使用してアクセスすることを意図していますmethods

同じクラスのmethods別のクラスから内部的にのみ使用され、外部からは使用されないことを意図している はmethod、再び非公開または保護する必要があります。

選択private vs protectedは、そのクラスから継承するかどうかによって異なります。すべてのメンバーに protected を使用することをお勧めします。これにより、このクラスから継承する (将来可能性がある) すべてのクラスも、これらのメンバーにアクセスできるようになります。

また、外部から直接メンバーfriendにアクセスできる機能privateもあります。protected

于 2013-03-02T07:34:21.253 に答える
0

ではmain、オブジェクト インスタンスを直接取得しますが、その場合test.One_objectでも、このコンテキストからは見えないため、 のプライベート メンバにアクセスすることはできません。したがって、次の 2 つのオプションがあります。One_objectpublicOneOne

1) ClassOneが編集可能な場合、main からアクセスしなければならない変数を次のようにマークする必要があります。public

また

2) ofを作成Threeし、 inのメンバー変数ごとに関数を記述します。friend classOnegetterOne_objectThree

したがって、次のオプション 2-

class One {
      private :
         char *link;
         int count;

      friend class Three;
};
class  Three : public Two  {
      private :
         char *link;
         int count ;
      public:
         One One_object;
         int get_One_object_count(){
            return One_object.count;
         }

};

グローバルコンテキストからメンバーにアクセスすることはあまり良い設計方法ではないため、クラスの設計を再考するかもしれません。

との詳細についてはfriend classfriend functions こちらをご覧ください。

于 2013-03-02T08:28:09.527 に答える