2

「セッター」がプライベートで「ゲッター」がパブリックであるC ++でデータエンティティを作成するのが最善の方法だと思っていました。つまり、エンティティの作成者はデータを設定できる必要がありますが、ユーザー/消費者/クライアントはデータを取得することしかできません。

エンティティ EntityX を考えてみましょう:

class EntityX
{
  public:
    EntityX(int x, int y) : x(x), y(y)
    {}
    int GetX() const {return x;}
    int GetY() const {return y;}
  private:
    int x,y; // Effective C++ third edition, Item 22: Declare data members private
}

そして、エンティティを作成してクライアントに返すクラス メソッド:

const shared_ptr<EntityX> classz::GetEntityX()
{
  shared_ptr<EntityX> entity(new EntityX(1,2));

  return entity;
}

これにより、セッターがプライベートになり、ゲッターがパブリックになりますが、データメンバーが5〜10を超える場合、この例は実用的ではありません...セッターが「プライベート」であり、 「ゲッター」は「パブリック」であり、コンストラクターにすべてのデータメンバー変数を取り込ませません。

前もって感謝します

4

3 に答える 3

2

作成者friendを次のように設定するのはどうですかclass EntityX:

   class EntityX
    {
      friend class Creator;
      public:
        EntityX(int x, int y) : x(x), y(y)
        {}
        int GetX() const {return x;}
        int GetY() const {return y;}
      private:
        int x,y; // Effective C++ third edition, Item 22: Declare data members private
    };

アップデート:

または、テンプレート化されたフレンドシップを使用することもできます。以下のコードを参照してください。

#include <iostream>
#include <memory>

template<class T>
class EntityX
  {
  friend T;
  public:
    EntityX(int x, int y) : x(x), y(y) {}
    int GetX() const {return x;}
    int GetY() const {return y;}
  private:
    int x,y; // Effective C++ third edition, Item 22: Declare data members private
  };

struct Creator
  {
    static const std::shared_ptr<EntityX<Creator>> create() 
      {  
      std::shared_ptr<EntityX<Creator>> entity = std::make_shared<EntityX<Creator>>(1,2);
      entity->x = 1;
      entity->y = 2;
      return entity;
      }
  };

int main()
{
  std::shared_ptr<EntityX<Creator>> const E = Creator::create();
  std::cout << E->GetX() << ", " << E->GetY() << std::endl;

  return 0 ; 
}
于 2014-05-01T21:24:20.627 に答える
0

あなたのゲッターは const を返すことができるので...

public:
int const& Getter();
private:
int const& Setter(int value);

with "setter" と "getter" は変数の名前に置き換えられます。それで...

public:
int const& X();
private:
int const& X(int value);

この構文で同じことを書くこともできます...

const int& X();

どのように書きたいかだけです。

頑張ってください、私が助けてくれることを願っています。

于 2014-05-01T21:26:17.337 に答える