Konstruktorinterne Liste + Pointer
-
Guten Abend erst mal!
Ich stehe momentan vor einem kleinen Verständnis Problem bezüglich Zeigern. Ich werde wohl am besten zuerst mal die Stelle zeigen, an der es bei meinem Verständnis scheitert :#ifndef ARRAY2D_H #define ARRAY2D_H #include <iostream> #include <cassert> template <typename T> class Array2D { Array2D(size_t z, size_t s) : zeilen(z), spalten(s), ptr(new T[z*s]) { } Array2D(size_t z, size_t s, const T& wert) : zeilen(z), spalten(s), ptr(new T[z*s]) { init (wert); }
Wie unschwer zu erkennen ist soll das eine Klasse für 2-Dimensionale C-Arrays darstellen. Kurz vorweg : Das ist natürlich nur ein kleiner Ausschnitt dieser Klasse.
Mein Problem liegt bei ->
ptr(new T[z*s])
Mir ist schon bewusst dass die Indexoperatoren immer in Zeigerdarstellung umgewandelt werden, aber müsste da nicht theoretisch so etwas wie
->ptr*(new T[z*s])
stehen?
Mit ist nicht klar wie aus dem oben genannten Beispiel ein Zeiger wird !
-
new gibt einen Zeiger zurück. Bei der initialisierung wird nur der Zeiger gesetzt, nicht der Inhalt verändert.
Schau dir doch das mal an. Es ist wirklich hilfreich, auch wenn es erst kindisch wirkt.
-
Fabolous12 schrieb:
Wie unschwer zu erkennen ist soll das eine Klasse für 2-Dimensionale C-Arrays darstellen.
Was ist ein C-Array?
Mein Problem liegt bei ->
ptr(new T[z*s])
Mir ist schon bewusst dass die Indexoperatoren immer in Zeigerdarstellung umgewandelt werden, aber müsste da nicht theoretisch so etwas wie
->ptr*(new T[z*s])
stehen?
Mit ist nicht klar wie aus dem oben genannten Beispiel ein Zeiger wird !Ich weiß nicht so ganz, wo man da ansetzen soll. Also beispielsweise ist da nirgends eine Indexoperation zu sehen. Dein Vorschlag ist auch syntaktisch völlig sinnlos. Du musst dir zwei Dinge anlesen, wenn du diesen Code verstehen willst:
- Initialisiererlisten
- den new-Operator für Arrays
Könnte ich dir erklären, aber da du von diesen Sachen anscheinend noch nie was gehört hast, wäre es besser, du versuchst es erstmal alleine.
-
Danke erst mal für die Antworten!
Bashar schrieb:
Fabolous12 schrieb:
Wie unschwer zu erkennen ist soll das eine Klasse für 2-Dimensionale C-Arrays darstellen.
Was ist ein C-Array?
Mein Problem liegt bei ->
ptr(new T[z*s])
Mir ist schon bewusst dass die Indexoperatoren immer in Zeigerdarstellung umgewandelt werden, aber müsste da nicht theoretisch so etwas wie
->ptr*(new T[z*s])
stehen?
Mit ist nicht klar wie aus dem oben genannten Beispiel ein Zeiger wird !Ich weiß nicht so ganz, wo man da ansetzen soll. Also beispielsweise ist da nirgends eine Indexoperation zu sehen. Dein Vorschlag ist auch syntaktisch völlig sinnlos. Du musst dir zwei Dinge anlesen, wenn du diesen Code verstehen willst:
- Initialisiererlisten
- den new-Operator für Arrays
Könnte ich dir erklären, aber da du von diesen Sachen anscheinend noch nie was gehört hast, wäre es besser, du versuchst es erstmal alleine.
Ich versichere dir, ich habe mich seit Wochen mit Zeigern auseinander gesetzt. Die Basis habe ich definitiv verstanden, dynamische Objekte erstellen, Pointer im Zusammenhang mit Arrays und auch C-Strings sind mir nicht unbekannt. Ich habe dieses Kapitel mittlerweile auch ziemlich oft wiederholt und sowas dann gesagt zu bekommen obwohl es vermutlich sogar wahr ist, ist ziemlich hart
.
Ich habe mich an dieses Forum gewendet, gerade weil ich durchs Internet und Bücher nicht weiter komme. Mir ist bewusst das Zeiger unverzichtbare Elemente in C++ sind und deshalb würde ich mich riesig über Hilfe freuen.Marthog schrieb:
new gibt einen Zeiger zurück. Bei der initialisierung wird nur der Zeiger gesetzt, nicht der Inhalt verändert.
Schau dir doch das mal an. Es ist wirklich hilfreich, auch wenn es erst kindisch wirkt.
Genau deshalb -> "new gibt einen Zeiger zurück" verstehe ich ja nicht warum "ptr" nicht vom Typ Zeiger ist! Genau da liegt meine Problemstellung und ich weiß beim besten Willen nicht wie das funktionieren soll.
-
Fabolous12 schrieb:
Ich versichere dir, ich habe mich seit Wochen mit Zeigern auseinander gesetzt.
Das ist auch gut so, allerdings hatte ich von Zeigern nichts gesagt, sondern von Initialisiererlisten und vom new-Operator. Du kannst dein Kapitel über Zeiger noch 100mal durchlesen, das wird dir hier nicht helfen, da musst du mal ein bisschen weiterblättern.
-
Wie ich schon sagte dynamische Objekte also auch new wird in diesem Kapitel behandelt. Initialisierungslisten sind wieder eine andere Sache, denn ich könnte das ja auch genau so gut mit einem normalen Konstruktor initialisieren, ohne Konstruktorinerne Liste(n), oder sehe ich da etwas falsch?
-
Fabolous12 schrieb:
.
Marthog schrieb:
new gibt einen Zeiger zurück. Bei der initialisierung wird nur der Zeiger gesetzt, nicht der Inhalt verändert.
Schau dir doch das mal an. Es ist wirklich hilfreich, auch wenn es erst kindisch wirkt.
Genau deshalb -> "new gibt einen Zeiger zurück" verstehe ich ja nicht warum "ptr" nicht vom Typ Zeiger ist! Genau da liegt meine Problemstellung und ich weiß beim besten Willen nicht wie das funktionieren soll.
Schau mal in die Membervariablen der Klasse, wo ptr deklaraiert wurde. Da solltest du so einen Stern sehen...