Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

1

05.01.2006, 21:21

Arrays und new..

Ich bin erst vor einiger Zeit von Java auf C++ umgesteigen und gehöre damit eher zu der Minderheit die nicht schon mit C/C++ aufgewachsen ist.. Naja bisher hatte ich (fast) keine Probleme, ein Detail nervt mich aber im Moment.
Also ich hab einen Pointer auf eine Klasse, dem ich direkt mit "new" einen Speicherbereich zuweise:
CPPNoob* ich = new CPPNoob();
jetzt will ich aber ein Array aus CPPNoobs haben (man is das n bescheuertes Beispiel), dessen groesse erst beim zuweisen bekannt wird. Daher: Ein Pointer auf einen Pointer:
CPPNoob** array;
So, wie weise ich denn jetzt zu?
Ein Array erstellen und dessen Adresse zuweisen?
Ich hoffe ihr versteht mein Problem!
"Have you tried turning it off and on again?"

Anonymous

unregistriert

2

05.01.2006, 21:25

C-/C++-Quelltext

1
2
3
4
5
unsigned long *value = new unsigned long[10];

value[0] = 4;

delete [] value;


Sowas?

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

3

05.01.2006, 23:02

Zitat von »"nix da"«

C-/C++-Quelltext

1
2
3
4
5
unsigned long *value = new unsigned long[10];

value[0] = 4;

delete [] value;

Sowas?

Ich glaub schon, aber was ist wenn ich keinen primitiven Datentyp habe sondern einen Konstuktor mit Parametern brauche ?
"Have you tried turning it off and on again?"

Anonymous

unregistriert

4

05.01.2006, 23:07

Variante 1 mit Pointern

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const unsigned long dimension = 10;

foobar **array = new foobar[dimension];

for (unsigned long i=0; i<dimension; ++i)
    array[i] = new foobar (parameter);

// benutzung

array[0]->machwas();

// Freigeben

for (unsigned long i=0; i<dimension; ++i)
    delete array[i];

delete [] array;


Variante 2 mit CopyConstructor und Zuweisungsoperator

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
const unsigned long dimension = 10;

foobar *array = new foobar[dimension];

for (unsigned long i=0; i<dimension; ++i)
    array[i] = foobar (parameter);

// benutzung

array[0].machwas();

// Freigeben

delete [] array;

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

5

06.01.2006, 18:21

Für meinen Fall hab ichs nu auch mit ner Schleife gelöst.
Zu nix_da's Beispiel:
Was ist, wenn foobar keinen Standartkonstruktor hat?
new foobar[dimension] wird doch dann net gehen, da die Objekte erzeugt werden, aber der Compiler net weiss womit er sie initialisieren soll.
"Have you tried turning it off and on again?"

Anonymous

unregistriert

6

06.01.2006, 18:32

Chase
Wie keinen Standardconstructor?? Wer macht den sowas? Zu jeder Klasse gehören Die Big Three (C'tor, cC'tor und D'tor) und optional noch der Zuweisungsoperator.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

7

06.01.2006, 19:48

was is ein cC'tor?

Anonymous

unregistriert

8

06.01.2006, 19:50

Copyconstructor

Chase

Alter Hase

  • »Chase« ist der Autor dieses Themas

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

9

07.01.2006, 02:34

Naja in Java sieht man das dann etwas anders.
Rein logisch gesehen ist ein parameterloser C'tor nicht immer sinnvoll. Wenn eine Klasse Person zwingend einen Namen haben soll, hat jeder mögliche Konstruktor auch einen String als Parameter. So wird verhindert, dass bestimmte Variablen "leer" bleiben.
In c++ nimmt man dann wohl öfters Standartwerte zur Hand..
Mir fällt auch ein etwas praxisnäheres Beispiel ein:
Meine Klasse Sprite zeichnet eine Textur an eine Bestimmte Stelle. Dazu braucht sie aber ein D3DDevice.. Sollte eine Instanz der Klasse das jetzt nicht zwingend haben, könnten Fehler auftreten. Ich glaube der Vorsatz es müsse einen parameterlosen C'tor geben gehoert wohl der Vergangenheit an. Ich kann mir gut vorstellen, dass es in der Zukunft so aussehen wird:

Quellcode

1
foobar **array = new foobar[10]("fu");

Aber naja.. davon kann man im mom nut träumen :)
"Have you tried turning it off and on again?"

matthias

Alter Hase

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

10

07.01.2006, 11:29

ich glaube das problem sind automatisch aufgerufene Konstruktoren.
bsp.:
class1 wird einen automatisch generierten Konstruktor von class2 aufrufen. und die ausgabe von str1 gibt einen fehler.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include "class1.h"

int main()
{
    class1* c1 = new class1();
    c1->print();
    std::cin.get();
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include "class2.h"

class class1
{
public:
    class1(){};
    void print(){c2->print();};
private:
    class2* c2;
};

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>

class class2
{
public:
    class2(int i, std::basic_string<wchar_t> s){this->str1 = s;}
    void print(){std::wcout << str1 << std::endl;};
private:
    std::basic_string<wchar_t> str1;
};

Werbeanzeige