2012-04-11 7 views
0

Ich arbeite an einem Programm und muss ein Array von Objekten erstellen, insbesondere habe ich ein 31x1 Array, wo jede Position ein Objekt ist (jedes Objekt ist im Grunde aus 6 Ints aufgebaut). Hier ist, was ich habe, aber etwas ist falsch, und ich könnte etwas Hilfe verwenden, danke.Konstruktor/Destruktor mit einer Klasse und einer Struktur

31x1 struct header“

const int days=31; 

struct Arr{ 

    int days; 
    int *M; 
}; 
typedef Arr* Array; 

31x1 Matrix Konstruktor:

void constr(){ 
    int *M; 
    M = new Expe[31]; // Expe is the class 

Klasse-Header:

class Expe { 
private: 
    //0-HouseKeeping, 1-Food, 2-Transport, 3-Clothing, 4-TelNet, 5-others 
    int *obj; 
} 

Klasse Objektkonstruktor:

Expe::Expe() { 
    this->obj=new int[6]; 
} 

hilfe bitte ... weil ich ziemlich verloren bin.

+3

"etwas ist falsch" ist nicht sehr beschreibend. Können Sie mehr Informationen bereitstellen - ein komplettes kurzes Programm, das Sie testen, was Sie erwarten, was tatsächlich passiert ...? – DCoder

+0

Ein 31x1 Array? Bist du sicher? –

+0

teh Weise ich es baue es iswnt worig ist alles gelesen ... und ies seine eindimensionale Array und ich kann vector.h ... tus tun es ist meine Hausaufgaben .. und ich muss von modularen Programmierung zu objcet orientiert ändern –

Antwort

3

Sie sollten new nicht verwenden, außer Sie müssen. Sie ordnen Speicher dynamisch zu, den Sie anschließend manuell löschen müssen. statisch zugewiesenen Arrays

Stattdessen verwenden:

struct Arr{ 
    int days; 
    Expe M[31]; 
} 

Auf diese Weise brauchen Sie nicht M zu konstruieren, wird es automatisch mit 31 Expe Objekte gefüllt. Gleiches gilt für das Array "int" in Expe.

(Hinweis: structs und Klassen sind fast identisch Sie einzige Unterschied besteht darin, dass Standardsichtbarkeit für structs Öffentlichkeit Davon abgesehen, structs Mitgliederfunktionen und Konstrukteure haben können wie Klassen zu tun...)

Wenn Sie dynamische Zuordnung zu verwenden, sollten Sie diese Notation folgen:

X* variableName = new X[size]; 
... 
delete[] variableName; //Be sure to get rid of unused memory afterwards. 

Pointers nur vom Typ int* sein soll, wenn Sie ein Array von ints darin gespeichert werden sollen.

Sie können auch const int s für Array-Größenangaben verwenden. Also das ist gültig:

const int size = 5; 
int X[size]; 

Sie können dies verwenden, um die "magische Zahlen" in Ihrem Code loszuwerden.

Typedefs wie typedef Arr* Array; werden in der Regel in C verwendet, nicht in C++ so sehr. Es gibt kaum eine Situation, in der Sie so etwas schreiben müssten.

Wenn Sie Ihren gesamten Code veröffentlichen, bieten wir möglicherweise eine bessere Hilfe an. Es scheint, dass Sie nicht nur ein oder zwei Fehler in Ihrem Code haben, sondern auch ein grundlegendes Verständnis.

+0

danke, aber ich muss dynamische Methode verwenden ... und sagen wir, ich habe es noch nicht wirklich gut bekommen. Ok, ich werde einen Blick darauf werfen, wenn ich es beheben kann, ich werde den Code posten, vielen Dank –

Verwandte Themen