Class vs. Struct
-
Hi,
ich hab eine kleine Sammlung an Daten, für die eigentlich eine struct ausreichen würde. Nun hab ich aber bei Klassen den Vorteil, im Konstruktor die Inhalte mit Defaultwerten vorbelegen zu können. Allerdings kann ich dann nicht mehr einfach mit = alle Daten zuweisen. Ich schätze, dafür muss ich wohl einen entsprechenden Operator ausprogrammieren. Aber wie mach ich das? Insebsondere, welche datentypen definiere ich für den Parameter, damit sowas geht:
class cMyClass { public: QString a; QString b; QString c; int d; int e; int f; cMyClass(); } cMyClass x; x = { "a", "b", "c", 1, 2, 3 };
Wie unschwer zu erkennen ist, arbeite ich unter Qt...
Gruß, Heimchen
-
heimchen schrieb:
Allerdings kann ich dann nicht mehr einfach mit = alle Daten zuweisen.
Was meinst du damit? Meinst du beim initialisieren? Dann kannst du doch einfach einen zweiten Konstruktor schreiben, dem du die Werte zum initialisieren uebergeben kannst.
Oder was meinst du genau mit "= alle Daten zuweisen"?
-
Ja, das mit dem Konstruktor klappt zwar, aber gewünscht hätt ich mir eher sowas:
x = { "a", "b", "c", 1, 2, 3 };
Eben so, wie es auch bei Strukturen klappt.
-
Wenn du den entsprechenden Konstruktor hast, dann klappt
cMyClass x("a", "b", "c", 1, 2, 3);
oder mit etwas anderer Syntax:
cMyClass x = cMyClass("a", "b", "c", 1, 2, 3);
Dann hast du "im schlimmsten Fall" runde statt geschweifte Klammern. Ich sehe das Problem nicht?
-
Ja, so hab ich es jetzt auch gemacht. Die Frage hat sich auch von der Notwendigkeit eher zum Interesse hin gewandelt. Die Frage ist dann ja eigentlich, was für ein Typ so ein Konstrukt mit geschweiften Klammern ist.
Ohne dass ich das jetzt getestet hab, würd ich mal an sowas denken:
cMyClass & cMyClass::operator=(struct(QString a, QString b, QString c, int d, int e, int f) &data) { this->a = data.a; this->b = data.b; this->c = data.c; this->d = data.d; this->e = data.e; this->f = data.f; }