私はC++を初めて使用しています。メインクラスから継承したC++でオブジェクトの配列を構築するには?
私は、オブジェクトの配列を作成する必要がある、と私は理解したものから、それを使用して行われます。
MyObject* instance = new MyObject[nb_of_instances_in_array];
けれども、それは非常に私のニーズに適合していません。
私は主なオブジェクトに3つの異なるオブジェクトを継承しています。
mainObject < - オブジェクト1
mainObject < - Object2に< - オブジェクト3
今私はObject1s、Object2s、およびObject3sを含めることができる配列を作成します。私のような何かをやってみました:
int nb_of_obj, i;
cin >> nb_of_obj;
mainObject* arrayOfMainObjects = new mainObject[nb_of_obj];
for(i = 0;i<nb_of_obj;i++)
{
//Menu to select Object to append to the array
arrayOfMainObjects[i] = Object2(args...);\\there are between 3 and 5 args for each object
}
delete arrayOfMainObjects;
私もSTDLIB.Hのmallocとfreeを使用して、よりC指向の方法を試してみました。
*(arrayOfMainObjects + i*max_size()) = Object2(args...);
の代わり:
arrayOfMainObjects[i] = Object2(args...);
using namespace std;
size_t max_size();
return (size_t)(max(max(sizeof(Object1),sizeof(Object2)), max(sizeof(Object3), sizeof(mainObject))));
mainObject* arrayOfMainObjects = NULL;
arrayOfMainObjects = (mainObject*) malloc(nb_of_obj*max_size());
//Globally, same code than above
free(arrayOfMainObjects);
私は私が間違ってやっているかわからないが、私も同じようなものを、アレイ内の「スポット」の次にアクセスしてやってみました
あなたが試したことで何が間違っているのかを実際に教えてくれるわけではありません(そして、通常は特別なニーズを除いてC++で 'malloc'を使用しません)。 – crashmstr
'std :: vector>'を使うことをお勧めします。 –
@πάνταῥεheもし彼が低いオーバヘッド(この状況では本当に配列を使用する理由のみ)に行くのであれば、 'std :: vector>'を使用するとそれはわずかに遅くなります。 (作成と削除の両方) –