-1

私の仕事は、騎士 (name,level,xp) を表すクラスを作成することであり、彼は最大 10 個のアイテム (別のクラスでなければなりません) (item_name,value) を持つことができます。

それで、私はこのようなことをしたいのですが、クラスではどうすればそれを行うことができますか?

struct item
{
    char itemName[21];
    int value;
};

struct knight
{
   char name[21];
   int xp;
   int level;
   struct item cucc[10];
};
4

3 に答える 3

1

だから、こういうことをしたいのですが、クラスでどうやってやるの?

あなたはすでに持っています。キーワードは、キーワードstructと同じように、C++でクラスを定義classします。唯一の違いは、で導入されたクラスのデフォルトの可視性がプライベートではなくパブリックであるということですstruct

itemまた、クラスの定義の後に、まったく同じタイプstruct itemに名前を付けることに注意してください。itemC ++には、Cが持つ型と構造体タグの分離はありません。

詳細については、C ++ 11標準のセクション9(または無料で入手できるn3337最終作業ドラフト)を参照してください。特に、9.1クラス名は次で始まります。

クラス定義は新しいタイプを導入します。[例:

struct X { int a; };

さらに、この宣言はクラス名をスコープに導入し、スコープ内にあるstruct Xかどうかなどによって、それ自体が何を意味するのかを明確にすることを説明しXます。

structとの違いについては、 11メンバーのアクセス制御11.2基本クラスおよび基本クラスメンバーのアクセシビリティclassについて後述します。

キーワードclassで定義されたクラスのメンバーは、デフォルトでプライベートです。キーワードstructまたはunionで定義されたクラスのメンバーは、デフォルトでパブリックです。

…</p>

基本クラスのアクセス指定子がない場合、派生クラスがクラスキーで定義されている場合はパブリックが想定され、クラスがクラスキー structで定義されている場合はプライベートが想定されます class

于 2013-02-21T19:42:16.117 に答える
1

c++でクラスを相互に配置するにはどうすればよいですか?

まあ、それがあなたの言いたいことなら、それらをネストしてください:

struct knight
{
    struct item
    {
        char itemName[21];
        int value;
    };

    char name[21];
    int xp;
    int level;
    item cucc[10]; // Notice, that the struct keyword isn't necessary here
};

更新:(実際に質問するつもりだった質問についてもう少しよく考えた後)

それで、私はこのようなことをしたいのですが、クラスではどうすればそれを行うことができますか?

まず、structs は C++ のクラスです。しかし、おそらく「このデータをクラスにカプセル化し、それらの間に有向の関連付けを確立するにはどうすればよいですか?」ということでしょう。

この場合、私は次のようなものに行きます:

class item
{
public:
    // The constructor to set an item's name and value
    item(std::string name, int value);
    // Supposing your item's names and values don't change,
    // so only getters on the class's interface
    std::string get_name() const;
    int get_value() const;
private:
    // Member variables are private (encapsulated).
    std::string itemName;
    int value;
};

// Skipping member function definitions. You should provide them.

class knight
{
public:
    // The constructor to set a knight's name
    knight(std::string name);
    // Supposing the name is unchangeable, only getters on the interface
    std::string get_name() const;
    // ...
    // What goes here very much depends on the logic of your application
    // ...
private:
    std::string name;
    int xp;
    int level;
    std::vector<item> cucc; // If you need reference semantics, consider
                            // std::vector<std::shared_ptr<item>> instead
};

// Skipping member function definitions. You should provide them.
于 2013-02-21T19:38:12.180 に答える
0

クラスと構造体 (私はこれらの用語を構文的にではなく意味的に使用します --- 以下を参照してください) は、任意にネストできます。

#include <string>
#include <array>

struct Knight {
  struct Item {
    std::string name;
    int value;
  };

  std::string name;
  int xp;
  int level;
  std::array<Item,10> cucc; // us an `std::vector` if the size is *not* fixed  
};

クラスについて: 構造体とクラスの間に構文上の違いはほとんどありませんが、オブジェクトの目的を区別する必要があります。単なるデータの集合である場合、概念的には構造体であり、structキーワードを使用してこれを示す必要があります。それがインテリジェントなデータ構造であり、メンバー関数を通じて独自のプライベート メンバーを管理する場合、それは概念的にクラスであるため、通常はclassキーワードで宣言されます。

ただし、構文上classおよびstructメンバーと親の型のデフォルトの可視性のみを変更します (class暗黙的privateに、struct暗黙的にpublic)。

于 2013-02-21T19:42:09.220 に答える