objekt global erzeugen
-
Guten Tag,
ich würde gerne Wissen wie ich ein Objekt Global erzeuge, d.h dass ich das Objekt erstmal global deklariere und dann in einer anderen funktion initialisiere.
Ich hätte mir vorgestellt dass man das folgendermaßen machen soll
TKlasse Objekt; class TKlasse { public: int A; TKlasse(){} }; main() { Objekt(4); }
nun würde ich gerne wissen, wie es richtig ablaufen muss, bzw wie ich die erste zeile richtig schreiben soll, sodass der compiler keine Fehlermeldung ausgibt
-
Hallo,
um dein Objekt so zu initialisieren, wie du es beschrieben hast, musst du dem Konstruktor einen Parameter übergeben, damit A tatsächlich auch den Wert zugewiesen bekommt, ansonsten (bei mehreren Variablen) müsste der Computer raten, welche Variable du jetzt mit der übergebenen zahl bestücken willst.
class TKlasse { public: int A; TKlasse(int _A) { A = _A; } };
Besser hingegen ist aber:
class TKlasse { public: int A; TKlasse(int _A) : A(_A) {} };
Gruß Christopher
P.S.: Ich hoffe das ist das Richtige, denn mir ist deine Fehlermeldung ja nicht bekannt.
-
Des Weiteren kannst du keine Instanz einer Klasse erzeugen, die dem Compiler noch unbekannt ist. Ein Globales Objekt kannst du so erzeugen:
class TKlasse { public: int A; TKlasse(){} } MeinObjekt; //<-- (1)
Allerdings wird der Konstruktor - wie ihn mein Vorredner implementiert hat - dann bei Anmerkung(1) uafgerufen. Um das Objekt in einer Funktion zu initialisieren, solltest du dann eine init-Funktion schreiben.
-
erstmal danke!
ich hab das erstmal jetzt so gemacht:class TKlasse { public: int A; TKlasse(int _A) { A = _A; } }meinObjekt(4);
das funktioniert auch.
gibt es jedoch eine möglichkeit den Konstruktor an späterer stelle aufzurufen, da ich z.B den A wert per eingabe bestimmen will.
@ gast: meinst du mit einer init Funktion eine funktion, die auf
meinobjekt.A zugreift?
-
Hallo nochmal,
Der Konstruktor wird immer bei der Erstellung des Objekts aufgerufen. Um nun per Eingabe den Wert zu bestimmen, greifst du entweder direkt auf die vaiable zu, oder du machst das mit einer extra Funktion.
Objekt.A = 4;
int BenutzerEingabe = 4; // Du übergibst einfach den Eingegebenen Wert an die Funktion, dort bekommt A den übergebenen Wert. Objekt.Eingabe(BenutzerEingabe);
Und in der Klasse mit der entsprechenden Funktion:
class TKlasse { public: int A; TKlasse(int _A) { A = _A; } void Eingabe (int _A) { A = _A; } };
-
Oder du erstellst dein Objekt eben erst dann wenn es erstellt werden soll, also wenn der Benutzer was eingegeben hat...
-
dot schrieb:
Oder du erstellst dein Objekt eben erst dann wenn es erstellt werden soll, also wenn der Benutzer was eingegeben hat...
Das sollte wohl das simpelste sein
-
Alternativ
class A { public: A(int _A = 123456) : myA(_A) { } // erlaubt: A v1; A v1(50); A v3 = -4711; // getter int a() {return myA;} // setter void a(int aNeu) {set(aNeu);} void set(int aNeu) { myA = aNeu;} private: int myA; };
und Forumsuche nach "Regel der 3" oder so