0

2 つの質問があります。

  1. 構造体でクラス オブジェクトを宣言できることはわかっています。しかし、デザインの観点からそれを行うことは倫理的ですか?

  2. 私のシナリオでは、膨大な数のメンバー要素を持つ構造があり、クラス オブジェクトも含めたいと考えています。ここで、別の質問があります。構造体全体を memset() すると、クラス ハンドルもリセットされます。そこで、クラス オブジェクトを除いた残りの構造体のサイズをチェックし、memset() を呼び出している間にそれを減算して、この問題を取り除きます。(ここでは STL クラス 'queue' を使用していることに注意してください。また、オーバーロードされていないため、オブジェクトに対して sizeof() 演算子を使用することはできません。)

しかし、これはそれを行うためのまったく受け入れられない方法ですか? この問題の解決策を提案できますか?

4

3 に答える 3

9
  • struct= class(デフォルトの可視性を除く)。

  • 「膨大な数のメンバー」がいる場合は、おそらく何か間違ったことをしている可能性があります。設計を変更しないと、手に負えなくなります。

  • 意味のある場合、クラスや構造体をネストすることはまったく問題ありません。たとえば、実装の詳細のためにネストされたクラスを定義するのが一般的です (そのため、クラスはメンバー クラスlinked_listを持つことができます)。node

  • 「クラス オブジェクト」などというものは存在せず、それが何を意味するのかは明確ではありません。

  • 使用しないでくださいmemset– おそらく必要ありません。通常のコンストラクタと代入を使用してください。

  • そして、オブジェクトで sizeof() 演算子を使用できません

    ダメ、使えます。

于 2012-06-26T10:12:12.010 に答える
1

解決策は、クラスと構造体を含む memset を避け、コンストラクターを使用することです。C++11 では、さまざまな条件下で初期化リストも使用できます。

于 2012-06-26T10:13:14.943 に答える
0

C++ では、クラスと構造体の間に機能的な違いはほとんどありません。構造体は、C との下位互換性のためにのみ c++ に存在します。したがって、構造体にクラス オブジェクトを含めることは問題ありません。ただし、私は通常、getter と setter を持つメンバー変数のみを持つ構造体を好みます。データを操作する構造体内の関数は使用しません。それが必要な場合は、クラスを使用します。

于 2012-06-26T10:11:14.597 に答える