Dynamische Zuweisung mit DOPPEL-ZEIGER
Ich habe eine base-Klasse, Spielzeug und abgeleitete Klassen Toy_remote_car amd Toy_battery_car.
Ich bin, dies zu tun:
Toy** ptr;
ptr=new Toy*;
ptr[0]=new Toy_remote_car[1];
ptr[1]=new Toy_battery_car[1];/*this is completely wrong according to my teacher because i never created ptr[1]. Instead this is a misuse of memory according to him.*/
Den obigen code(ptr=new Toy*) ist die Schaffung einer einzigen Zeiger vom Typ Spielzeug(ptr[0]) enthält das Objekt der abgeleiteten Klasse Toy_remote_car.
Nun will ich schreiben, wie ein code:
->die Anzahl der Spielzeug-Typ Zeiger sollten nicht vorgegeben werden.
->stattdessen würde ich eine add_toy Funktion, die das schaffen würde, ptr, die zeigen wird, die Art des Objekts, die ich möchte. Außerdem, wenn ich rufen Sie die add_toy wieder funktionieren, sollte es nicht berechtigt, die Daten an die Vorherige ptr, aber es sollte erstellen Sie einen neuen ptr. Die folgende Konvention kann helfen:
ptr[0]=new Toy_remote_car[1];
/*we want to add more toys so add_toy function called. A check is applied.*/
/*The check checks that ptr[0] already contains a value so it creates another pointer ptr[1]*/
ptr[1]=new Toy_battery_car[1];
->desweiteren würde ich in der Lage sein, um Zugriff auf alle bisherigen Daten. Kurz gesagt:
ptr[0]//contains one type of data.
ptr[1]//contains another type.
//and so on
->so würde es automatisch einen Zeiger(ptr) geben Sie Spielzeug, wenn Sie ein neues Spielzeug Hinzugefügt wird.
Ich hoffe ich habe gut erklärt, was ich versuche zu implementieren, die in diesem code.
Bitte bitte helfen Sie mir in dieser Hinsicht.
Dank
InformationsquelleAutor Rafay | 2011-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
wo
n
hält die Anzahl derToy
Hinweise, die Sie wollen. Wächst das array ist schwer, aber es kann getan werden:Beachten, wenn die Allokation fehlschlägt, wird die alte
toypp
und alle Zeiger sind nicht bereinigt. Wirklich, wenn Sie möchten, ein array, das wächst, verwenden Sie einevector<Toy*>
statt:und fügen Sie Spielzeug, mit
push_back
.Vergessen Sie nicht
delete
jede einzelneToy*
, und mit der ersten Methode zudelete[]
dieToy**
.Umgang mit verschiedenen Arten von Daten kann getan werden, mit Vererbung.
Und außerdem n unbekannt ist, mit allen Mitteln, wie dem Spielzeug-Geschäft nicht bestimmte Anzahl von Spielzeug.
Lesen Sie auf Vektoren, Sie sollte in jedem C++ - Buch. Die kurze Geschichte ist: Sie sind arrays, die (Teil -) das Speicher-management für Sie und dynamisch wachsen können.
ignorieren Sie die Beratung nutzen
vector
bis Sie behandelt habe in der Klasse. Es ist eine gute Idee zu verstehen, die harte Konzepten, bevor Sie beginnen mit dem einfachen Verknüpfungen.Okay, ich werde es Lesen. Aber bitte bestätigen eine Sache. zunächst n=1, wenn add_toy genannt wird. Dann als add_toy ist callled wieder und wieder, wird n um 1 erhöht jedes mal. Aber ptr[0], ptr[1] und so weiter intakt bleibt. Nun, da sich die Anzahl der Spielwaren in der Filiale erhöht, das array von ptr ist, zu erhöhen. Bin ich in die richtige Richtung gehen oder Ihre Erklärung tun, eine andere Sache??
InformationsquelleAutor Fred Foo
Ich habe mit diesem code, der mit einer sehr einfachen Logik. Und das funktioniert ganz gut. Bitte geben Sie einen Blick und geben Stellungnahmen ab.
InformationsquelleAutor Rafay