Mehrere Objekte vom User erstellen lassen / Aufruf von Methoden
-
Hallo,
Ich hab zwei Probleme bei der Realisierung meines Programms.
Der User soll selbst waehlen koennen wieviel objekte angelegt werden...
Hierzu fand ich folgende Zeile welche das ganze bewerkstelligt (in einer for-schleife mit num als zaehler z.b.)#include <mein_headerfile> int main() { ... automobil* objects = new automobil[num]; // erzeugt num objekte ... }
das klappt auch anscheinend...nur wie greif ich dann in der klasse auf diese objekte zu?
objects[num].name;
z.b. funktioniert nicht...
ich muss auch gestehen das ich den Vorgang von automobil* objects = new automobil[num]; nicht ganz nachvollziehen kann...
letzendlich plage ich mich schon seit 2 Tagen damit rum und ein Bekannter hat mir den codeschnipsel gegeben um sich direkt danach nicht
mehr auffinden zu lassen, weshalb ich nun euch löchere2. Frage...
Wie bewerkstellige ich es am kluegsten wenn ich in einer routine/methode von Klasse A, eine routine bzw eine methode in Klasse B aurufen will?
Vielen Dank schonmal und entschuldigt eventuellen Dilletantismus...Dies ist meine 2. Woche mit C++
Hafrel
-
nimm malloc() bzw. realloc()!
sieht das so aus?
struct automobil { char name[100]; } ... automobil *objects = new automobil[anz];
ansonsten bitte code posten!
mfG (c)h
PS.: automobil ist ein struct, bzw eine klasse
object ist ein array von automobilen mit "num" automobilenPPS.: beim zugriff brauchst du vielleicht klammern.....
-
ob man new oder malloc nimmt hängt ja wohl davon ab, ob man c oder c++ programmiert. und da hafrel von methoden spricht, geh ich ma von c++ aus. und dann wird es wohl auch ne klasse sein, kein struct.
@hafrel: zugriff auf die methoden geht mit dem pfeil operator, da es sich bei objects ja nicht um ein objekt sondern um einen pointer handelt. also so:
objects[num]->name; (*(objects[num]))->name; // geht auch
c ya
-
Bei 2. dann ja wohl eher der Punkt statt dem Pfeil
MfG SideWinder
-
@chille
Was soll uns eigentlich dein Post sagen? Dass du selber noch viel zu lernen hast??@Hafrel
Ich kann dir schon sagen, warum objects[num].name nicht funktioniert. objects[num] existiert nämlich nicht! Es existieren nur objects[0] bis objects[num**-1**].Zu deiner zweiten Frage:
Was ist dabei ein Problem? Eine Methode wird in einer anderen Methode genauso aufgerufen, wie immer. Der Methode muss natürlich die Klasse, dessen Methode du aufrufen willst, bekannt sein.Beispiel:
/* Klasse A hat die Methode machWas() Klasse B hat die Methode machWasAnderes() Die Methode machWas() von Klasse A bekommt ein Object vom Typ Klasse B als Parameter */ void A::machWas(B KlasseB) { B.machWasAnderes(); }
Klasse B kann auch eine Eigenschaft von Klasse A sein, dann brauchst du die Klasse natürlich nicht als Parameter übergeben.
-
@AJ: korrekt!
-
SideWinder schrieb:
Bei 2. dann ja wohl eher der Punkt statt dem Pfeil
MfG SideWinder
okay, ich muss auch noch lernen, hast natürlich recht...