Klassen+Vererbung
-
Boost.PointerContainer empfiehlt sich auf jeden Fall, wenn man Zeiger auf polymorphe Objekte in Containern speichern möchte. Die Schnittstelle ist soweit möglich kompatibel zur STL, aber man muss sich nicht um die Speicherverwaltung kümmern.
-
Ok danke werd ich gleic ausprobieren

Edit: ich will jetzt in jeder Klasse Auftrag die Zeit speichern, wann er ausgeführt werden soll. Ich will also nicht speichern in wie vielen Sekunden, sondern im Format hh
ss. Ich hab überhaupt keine Ahnung wie das geht
Über google hab ich nur eine Klasse time_t gefunden mit der man die aktuelle Uhrzeit speichern kann, wie aber einen festen Zeitpunkt in der Zukunft speichern? Ich hab mir das so vorgestellt: (pseudocode)time_t start=11:00:03 // Elf Uhr und 3 sekunden^^ ... if(start==aktuelle_zeit) AuftragAusführen();Geht das überhaupt so?

-
Nein, das geht so nicht. Das ist einfach eine Stuktur, die du füllen musst. Zur Benutzung kannst du z.B mal hier schauen:
http://en.wikipedia.org/wiki/Time_t
-
Hmm, kennt jemand eine funktion mit der ich die tm Struktur um zum Beispiel 10 Minuten nach hinten verschieben kann? Oder muss ich mir die selber schreiben?

-
Mit der Funktion
localtime()erhältst du die aktuelle Zeit in der Strukturtm. Dir wird allerdings ein Zeiger zurückgegeben; besser, du legst eine Kopie an. Dann änderst du den Membertm_min, und erhöhsttm_hourwenn nötig. Tipp: Benutze Modulo und Integerdivision.Genauere Beschreibungen zu der C-Zeitbehandlung findest du unter http://www.cplusplus.com/reference/clibrary/ctime/.
-
Nexus schrieb:
Dann änderst du den Member
tm_min, und erhöhsttm_hourwenn nötig.Ja schon klar, aber wenn es blöd läuft muss ich ja sogar das komplette Datum umschreiben, das Programm soll ja rund um die Uhr funktionieren^^, und ich glaube, dass das etwas kompliziert ist. Was ist denn wenn ich das ganze um 23:58 am 31.Dezember ausführe?

Nexus schrieb:
Tipp: Benutze Modulo und Integerdivision.
Was ist das?

Sry wenn ich mich so anstelle, für euch ist das wahrscheinlich alles eine Sache von ein paar Minuten

-
[MOP] schrieb:
Nexus schrieb:
Tipp: Benutze Modulo und Integerdivision.
Was ist das?

Modulo
Und was eine Division ist, wirst du ja wohl noch wissen
Der Modulo Operator ist sehr praktisch, wenn du etwas immer in einem Bereich halten möchtest. Ein kurzes Beispiel:
int seconds = 2342143; // Ich will jetzt wissen, wieviele Stunden, Minuten und übrig bleibende Sekunden dies sind. int hours = seconds / (60 * 60); seconds %= 60 * 60; // Modulooperator ist das Prozentzeichen '%' // In seconds steht nun der Rest der Division. Also liegt es im Bereich 0 - 3599. int minutes = seconds / 60; seconds %= 60; // Der Bereich von seconds ist nun 0 - 59.Falls du mehr machen willst mit Daten und dazu Funktionen suchst, würde sich natürlich noch Boost.DateTime anbieten. Sind aber um einiges komplexere Strukturen, bieten dafür natürlich viel mehr Möglichkeiten von Haus aus.
Grüssli
-
Ah ok, man muss einfach alles in sekunden speichern, und dann mit dem Modulo auf Stunden, Minuten usw umrechenen. Wenn es dann aber um Tage, Monate, und Jahre geht, ist das zu aufwendig, denke ich. Deswegen werde ich mir jetzt Boost.DateTime anschauen

Was wäre C++ nur ohne Boost?
-
[MOP] schrieb:
Wenn es dann aber um Tage, Monate, und Jahre geht, ist das zu aufwendig, denke ich.
Wenn du Dokumentationen nicht richtig liest und es über Modulo & Co machst, ja ...
Dokumentationen nicht richtig lesen deshalb:
http://www.cplusplus.com/reference/clibrary/ctime/mktime/Lies mal was dort ganz oben steht. Na, ich zitiere es lieber:
Convert tm structure to time_t
Interprets the contents of the tm structure pointed by timeptr as a calendar time expressed in local time. This calendar time is used to adjust the values of the members of timeptr accordingly and returned as an object of type time_t.The original values of the members tm_wday and tm_yday of timeptr are ignored, and the ranges of values for the rest of its members are not restricted to their normal values (like tm_mday being between 1 and 31).
The object pointed by timeptr is modified, setting the tm_wday and tm_yday to their appropiate values, and modifying the other members as necessary to values within the normal range representing the specified time.
Grüssli
-
Achso
Mann bin ich blöd 