gruebel gruebel
-
hier der code
#include <iostream.h> const int DefaultSize = 10; template <class T> // das Template und die Parameter deklarie class Array // die parametrisierte Klasse { public: // Konstruktoren Array(int itsSize = DefaultSize); Array(const Array &rhs); ~Array() { delete [] pType; } // Operatoren Array& operator=(const Array&); T& operator[](int offSet) { return pType[offSet]; } /*warum wird hier der index operator benutzt?*/ // Zugriff int getSize() { return itsSize; } private: T *pType; int itsSize; };
hat der indexoperator noch ne andre funktion als bei arrays?
also *ptype ist doch ein objekt der klasse array oder?
aber doch kein array?
also warum benutzt man ptype[blah]; ist doch nur ein objekt
ist das was spezielles?
-
...gab es nicht denselben thread vor ca zwei Wochenschon mal? *wirr*
lookias schrieb:
also *ptype ist doch ein objekt der klasse array oder?
nein! es ist ein Attribut/Eigenschaft der Klasse. Ein Objekt ist eine Instanz der Klasse, dh eine Variable des Typs Array
lookias schrieb:
also warum benutzt man ptype[blah]; ist doch nur ein objekt
ptype ist der Zeiger auf das 0-te Elemnt im Array, dh auf den Beginn
-
...gab es nicht denselben thread vor ca zwei Wochenschon mal? *wirr*
wenn dann sry das bsb ist aus jesse liberty
nun wenn ich von array sone instanz meinetwegen array<int> instanz erzeuge
dann steht doch in der klasse array ein zeiger
int *ptype
oder?
das geht irgendwie nicht konform mit meinem wissen ueber normale klassen
-
lookias schrieb:
das geht irgendwie nicht konform mit meinem wissen ueber normale klassen
Ich sehe nicht im welchen Zusammenhang dein Problem mit Klassen steht. Vielleicht verstehe ich aber auch einfach dein Problem nicht.
pType ist ein Zeiger und damit ein gültiges Argument für den eingebauten operator[], der ja nichts weiter bedeutet als *(zeiger + offset).
Könntest du dein Problem vielleicht nochmal genauer formulieren?
-
lookias schrieb:
nun wenn ich von array sone instanz meinetwegen array<int> instanz erzeuge
dann steht doch in der klasse array ein zeiger
int *ptype
oder?
Ja, aber der Konstruktor sieht mit Sicherheit so oder ähnlich aus:
Array::Array(int itsSize) : pType(new T[itsSize]), itsSize(itsSize) { }
-
aso?
kannst mir bitte mal geschwinde erklaehren wie man diesen index operator bei zeigern anwendet
und was man davon haben kann?
das ist wohl dann mein prob
-
lookias schrieb:
nun wenn ich von array sone instanz meinetwegen array<int> instanz erzeuge
dann steht doch in der klasse array ein zeiger
Deine Instanz besitzt genau die Attribute, die in der Klassendefinition festgelegt sind. instanz ist somit ein Objekt der Klasse Array und besitz die Eigenschaften: pType (Zeiger auf den Anfang) und itsSize (Größe). Der Indexoperator operator[] ermöglicht dir den direkten Zugriff auf ein bestimmtes Element im array.
-
lookias schrieb:
kannst mir bitte mal geschwinde erklaehren wie man diesen index operator bei zeigern anwendet
Type *pointer; pointer[n] == pointer + n == n[pointer]
-
...gib's zu: du hast noch nie Speicherplatz dynamisch allokiert, oder?
hier ein Bsp:int num; std::cin >> num; int * ptr = new int[num]; //Speicher anlegen: array mit num Elemnten vom Typ int //statisch angelegt sähe es so aus: int ptr[num]; dazu muß die Größe aber schon beim Compilieren bekannt sein //jetzt kannst du mit dem array genau so umgehen als wenn es statisch angelegt wäre, zB verwende operator[] ptr[1]=9; delete []ptr; //Speicher freigeben nicht vergessen!
-
ptype(new T[itsSize]);
ruft doch den in diesem moment deklarierten konstruktor auf richtig
nun koennte man das auch so schreiben?
ptype = new t(itssize);
wenn nicht bitte erklaehren
-
aua, aua, aua, das tut weh,
-
na immer locker fang damit gerade erst an
-
don't worry! war doch nicht bös' gemeint. Aber hast du schuldest mir noch eine Antwort. s.o.
Hast du dich schon mal mit Zeigerarithmetik befasst? Ich glaube, daß du das mal vorher tun solltest, sonst steigst du beim this ganz aus. Mutig vorwärts!
-
jojo
das geht alles
nur war mir das mit dem dyn array nicht so bekannt
dachte man nimmt da generell listen
nun frag ich mich allerdings inwiefern listen dieser technik ueberlegen
sind oder auch nicht
-
mal zum verstaendnis das ganze dient doch nur dazu
im programm ein bel grosses array erzeugen zu koennen
und mit dem zweiten konstruktor moeglicherweise ein array zu kopieren ja?
-
<ot>und was hat das mit "gruebel gruebel" zutun? dem threadtitel?
bitte geeignete threadtitel wählen, möglichst angepasst der frage, die man hat.sonst haben wir gleich wieder hunderte von "ich suche hilfe" threads...uff
ps: es schult auch, genau zu formulieren, wo es hackt.</ot>
-
i) zum Beispiel
ii) true! Nennt sich auch Copykonstruktor
-
jo werdsch machen trotzdem sehr vielen dank fuer die antworten
da haet ich sonst noch uebermorgen gegruebelt