New int -> Deklaration!

Hallo,

ich habe zwei Klassen deklariert. In der zweiten Klasse (Y) will ich dynamisch eine Variable „dynam“ aus der ersten Klasse (X) deklarieren. Leider funktioniert das, was ich gemacht habe, nicht. Es müssen zwei Parameter übergeben werden. Die zweite Deklaration funktioniert ebenfalls nicht. Kann mir jemand helfen???

class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;

Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }

~Y() {

delete dynam;
delete a;
}
};

Maria

Hallo,

ich habe zwei Klassen deklariert. In der zweiten Klasse (Y)
will ich dynamisch eine Variable „dynam“ aus der ersten Klasse
(X) deklarieren.

Y(int T, int M) {
dynam = new X[A]; //???

das sind doch Arrya oder ?

a = new int*[T,M]; //??? }

und das ist auch nen Array

~Y() {

delete dynam;

also musst du auch array löschen

delete[] dynam;

delete a;

delete[] a;

Maria

Heisst [] gebe ganzen Vector frei

Sascha

Hallo Maria!

Hier meine Neufassung, müsste jetzt laufen:

class X{};
class Y {
 private:
 int A;
 // sollten auch private sein:
 X\* dynam;
 int \*\*a;
 const int SIZE;

 public:
 Y(int T, int M) 
 :
 // braucht Init-Liste. 10, oder was Du willst; du nimmst sonst Speichermüll als Groesse;
 // erst initialisieren, dann verwenden.
 A(10), dynam(0), a(0), SIZE(T+M) // so recht, T+M?
 {
 // sollte jetzt gehen
 dynam = new X[A]; // A war Speichermüll

 // Du willst eine Anzahl Einzel-Zeiger auf dem Doppel-Zeiger anhaengen, gut;
 // genuegt aber eine Konstante voll für die Groesse. die kannst Du dann auch im Destruktor verwenden.
 a = new int\*[SIZE];
 // das sind dann SIZE einzelne Zeiger;

 int i;
 for (i=0; ; i

Falls Du mit einer Tabelle (Matrix) was vorhast, mache dir am Besten eine "class Zeile", und mit der dann ein einfaches Array, also:


    class Zeile{};
    // dann:
    Zeile \*Z = new Zeile[SIZE];



lg
Martin


> <small>[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]</small>

Hallo,
Die
zweite Deklaration funktioniert ebenfalls nicht. Kann mir
jemand helfen???

class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;

Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }

also ein Konstructor kann initalisiert werden mit einer new classe(int Y, int X)
womit wir bei
a = new int(Y,X)

bei new Typ[] ist aber keine Initalisierungs Übergabe möglich
das muss mit Typvar.Init(X,Y) gemacht werden :smile:

und Init ist eine selbst zu definierender Member

gruss

Hallo,
Die
zweite Deklaration funktioniert ebenfalls nicht. Kann mir
jemand helfen???

class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;

Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }

also ein Konstructor kann initalisiert werden mit einer new

glaube ich nicht. Du kannst Varriable und Konstante init., den Konstruktor aber nicht.
Das „new“ ist bloss für Zeiger.

classe(int Y, int X)
womit wir bei
a = new int(Y,X)

Uuuups, " a " ist ein Doppelzeiger, ob da " new int* " nicht besser waere?

lg
Martin

Hallo,
Die
zweite Deklaration funktioniert ebenfalls nicht. Kann mir
jemand helfen???

class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;

Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }

also ein Konstructor kann initalisiert werden mit einer new

glaube ich nicht. Du kannst Varriable und Konstante init., den
Konstruktor aber nicht.
Das „new“ ist bloss für Zeiger.

Irrtum . mit new Erzeugte Objecte können mit überladenem Konstructor auch Initalisiert werden.

Lediglich greift new[] nur auf den default (also nicht überladen) Konstruktor zu.

classe(int Y, int X)
womit wir bei
a = new int(Y,X)

Uuuups, " a " ist ein Doppelzeiger, ob da " new int* " nicht
besser waere?

lg
Martin

Lieber martin ich bezog mich nicht auf ihr Beispiel
sondern auf mein Beispiel
wo int Y und int X
dann ist a auch ein int (aber eben mit initialisierung mit überladenenem Konstuctor;

Hallo,
Die
zweite Deklaration funktioniert ebenfalls nicht. Kann mir
jemand helfen???

class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;

Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }

also ein Konstructor kann initalisiert werden mit einer new

glaube ich nicht. Du kannst Varriable und Konstante init., den
Konstruktor aber nicht.
Das „new“ ist bloss für Zeiger.

Irrtum . mit new Erzeugte Objecte können mit überladenem
Konstructor auch Initalisiert werden.

Lieber RakonDark,

Ich hatte bloss bedenken, dass deine Formulierung für AnfaengerInnen etwas verwirrend sein könnte; der K. ist ja ein Mittel zum Initialisieren.

Lediglich greift new[] nur auf den default (also nicht
überladen) Konstruktor zu.

Wo Du recht hast, hast Du recht!

classe(int Y, int X)
womit wir bei
a = new int(Y,X)

Uuuups, " a " ist ein Doppelzeiger, ob da " new int* " nicht
besser waere?

lg
Martin

Lieber martin ich bezog mich nicht auf ihr Beispiel
sondern auf mein Beispiel
wo int Y und int X
dann ist a auch ein int (aber eben mit initialisierung mit
überladenenem Konstuctor;

Alles klar!

lg
Martin