0

サーフェスオブジェクトを定義していると仮定します

class surface
{
private:
    vector<point> points_;
    vector<hexFace> hexFaces_;
}

私はすでにpointクラスを作成しましたが、これは非常に必要ですがhexFace、実際には非常に単純で、int[4]である4つのポイントラベルのリストにすぎません。そして、私はそれに複雑な操作をする必要はありません。

hexFaceだから私の質問は、そのようなオブジェクトを定義するのに最も効率的な方法は何ですか?構造体を使用する必要がありますか、それともクラスなどを使用する方がよいでしょうか。あなたならどうしますか?ありがとう

また、クラスを使用する必要がある場合、現在のクラスに別のクラスをネストして定義できますか?可能であれば、このファイル内にもコンストラクターを記述する必要がありますか?

構造体はそれを初期化するためにコンストラクターを必要としますか?

4

1 に答える 1

3

あなたはいくつかの質問をします:

そのような hexFace オブジェクトを定義する最も効率的な方法は何ですか?

どのソリューションを選択しても、実行時の効率はほぼ同じです。コード行の効率、またはメンテナー プログラマーの頭脳の効率は、おそらくより価値があります。

C++ 11より前の機能に制限されている場合は、次を使用します。

struct hexFace {
  int labels_[4];
};

C++11 の機能を使用できる場合は、次を試してください。

class surface
{
private:
    std::vector<point> points_;
    std::vector<std::array<int, 4>> hexFaces_;
}

構造体を使用する必要がありますか、それともクラスなどを使用したほうがよいですか?

structclassほぼ同義です。意図をより明確に表していると思われる方を使用してください。「その他」については、試してみてくださいstd::array

現在のクラスに別のクラスをネストして定義できますか?

はい、できます。試す:

class surface
{
private:
    class hexFace { public: int lables[4]; };
    vector<point> points_;
    vector<hexFace> hexFaces_;
};

可能であれば、このファイル内にもコンストラクターを記述する必要がありますか?

他の場所に記述することを選択するか、ユーザー定義のコンストラクターを完全に省略することを選択することができます。

インラインで記述する方法は次のとおりです。

class surface {
public:
    class hexFace { public: hexFace() { std::cout << "inline constructor!\n" } };
}

外部に書き込む方法は次のとおりです。

class surface {
  public:
  class hexFace {
    public:
      hexFace();
  };

// in another file ...
surface::hexFace::hexFace() { std::cout << "extern constructor\n"; }

構造体を初期化するためにコンストラクターが必要ですか?

aclassもa もstructユーザー定義のコンストラクターを必要としませんが、どちらも許可します。

struct X {
  X() { std::cout << "in struct constructor!\n"; }
};
class Y {
  public: 
    Y() { std::cout << "in class constructor!\n"; }
};
于 2013-01-09T16:23:01.327 に答える