2012-06-12 10 views
9

私はいつも構造体を固定サイズのオブジェクトとして考えていましたが、コンパイラのエラーが目立つように見えませんでしたが、これを実行するのが一般的であるかどうかは疑問でした。構造体をクラスに変更することをお勧めしますか、構造体も同様に機能しますか?構造体にベクターを格納することは可能ですか? C++

コードは、人々がうるさい得るという理由だけで:

struct Sprite 
{ 
    float x; 
    float y; 
    std::vector<Sprite> sprite; 
} 

親と同じ型として、クラスの子供をしている私がやっているの本質。親が死ぬと、子供たちもやります。

+7

'struct'は' private'ではなく 'public'のデフォルトの可視性を持つクラスです。 –

+2

structにcontructor/destructorを持つメンバーを追加すると、コンパイラーは構造体のコンストラクター/デストラクターも生成します。 POD構造を暗示するCスタイルのテクニックは動作しません。 –

+0

構造体の内部にベクトルを格納しても、サイズを変更することはありません。 Vectorのアイテムはヒープに格納されるため、ベクトルの要素数が0または1000であっても構造体のサイズは変わりません。 – mfontanini

答えて

15

std::vectorは特定の既知のサイズを持ち、それを含むクラスまたは構造体は特定の既知のサイズを持ちます。 std::vectorは、可変サイズのアレイとして動作するようにヒープ上にメモリを割り当て、前記メモリへのポインタを格納する。構造体とクラスの唯一の違いは、構造体がデフォルトでpublicであり、クラスがデフォルトでprivateであることです。 structclass

+0

ありがとうございます。これは、ベクトルがヒープ内のメモリへのポインタとしてのみ機能することは間違いありません。詳細な返信をありがとう。 –

+0

デフォルトですか?デフォルトでは? – Inverse

7

違いは、メンバーの可視性としなければならない。最も顕著な違いはstructのメンバーは、デフォルトで公開され、また、そのstructの継承は、デフォルトで公開されているということです。 classのメンバーとclassの継承は、デフォルトで両方ともプライベートです。それ以外に違いはありません。classで書かれたコードと同等のコードを生成するstructのコードを書くことができます。逆も同様です。

関連する問題