Konstruktor mit Überprüfung
-
Dein Konstruktor
Datum::Datum(unsigned int x, unsigned int y, unsigned int z)wird nicht gerufen, weil 2007, 2 oder 29 alesints sind. Tu den weg, und pack die Überprüfung in deinen StandardkonstruktorDatum(const int x=1, const int y=1, const int z=1900).
Außerdem schreien die vollkommen unsinnigen Bezeichnerx, y, zfür Tag, Monat, Jahr (oder war's jetzt Monat, Tag, Jahr???) nach Verwechslungen. In deinen beiden vorhergehenden Beispielen hattest Du auch zwei verschiedene Reihenfolgen der Argumente.~edit: Typo.~
-
Ok ich werde drauf achten in Zukunft den Code lesbarer zu halten. Da hast du Recht, dass das sinnvoller ist.
Wenn ich die Abfrage in den Standardkonstruktor lege funktioniert die Abfrage.
Gibt es eine Möglichkeit die Abfrage in einen zweiten Konstruktor zu legen? Ich würde gerne einen Standardkonstruktor haben und einen modifizierten.
Zudem gibt es eine Möglichkeit MS-Visio so zu nutzen das ich das Programm Schritt für Schritt durchlaufe um besser Fehler zu finden?
Vielen Dank!
-
Tyle schrieb:
Gibt es eine Möglichkeit die Abfrage in einen zweiten Konstruktor zu legen? Ich würde gerne einen Standardkonstruktor haben und einen modifizierten.
Welchen Zweck hätte es, ungültige Daten zuzulassen?
Tyle schrieb:
Zudem gibt es eine Möglichkeit MS-Visio so zu nutzen das ich das Programm Schritt für Schritt durchlaufe um besser Fehler zu finden?
-> Debugger
-
Mach eben einen Konstruktor ganz ohne Argumente, anstatt einem mit Defaultargumenten:
Datum::Datum(): year(1900), day(1), month(1) { } Datum::Datum(int year, int month, int day) { /* was auch immer */}
-
Für das Programm ist es vollkommen ausreichend nur einen Konstruktor zu haben, das stimmt schon.
Nur soll das Programm 2 Konstruktor beinhalten, ich denke damit wir die Übleradung auch nutzen.
Anforderung:
- Einen Standardkonstruktor der Objekte mit dem Datum 1.1.1900 initialisiert.- Einen Konstruktor mit drei unsigned int-Parameter für Tag, Monat und Jahr
und der überprüft ob das übergebene Datum valid ist, mit Fehlerausgabe und falls ein Fehler vorliegt das Datum mit 1.1.1900 anlegt.Bisher habe ich (wenn ich den Standardkonstruktor entwerne nur den zweiten Konstruktor angelegt bis auf das der keine unsigned int Werte enthält.
-
Mach's doch einfach so:
SeppJ schrieb:
Datum::Datum(): year(1900), day(1), month(1) { } Datum::Datum(int year, int month, int day) { /* was auch immer */}Nimm aus dem Konstruktor mit Überprüfung einfach die Defaultwerte raus und Du bist fertig.
-
Stehe gerade ne wenig auf´m Schlauch.
Das sind meine beiden Konstruktoren:
//Deklarationen: ... Datum(const int x=1, const int y=1, const int z=1900); Datum(unsigned int, unsigned int, unsigned int); ... // Konstruktor Definitionen // // Standardkonstruktor Definition der jetzt die Kontrollfunktion abruft Datum::Datum(const int x, const int y, const int z) : tag_(x), monat_(y), jahr_(z) { { if (!isValid(x,y,z)) { cout << "Datum ist ungueltig!"; tag_ = 1; monat_ = 1; jahr_ = 1900; } } } // Konstruktor mit Überprüfung der nicht aufgerufen wurde Datum::Datum(unsigned int x, unsigned int y, unsigned int z) { { if (!isValid(x,y,z)) { cout << "Datum ist ungueltig!"; tag_ = 1; monat_ = 1; jahr_ = 1900; } }Meinst du das:
//Konstruktor mit Überprüfung ehemalig nun Standard Datum::Datum(unsigned int x, unsigned int y, unsigned int z) { }Und wie kann ich gucken welcher konstruktor aufgerufen wird? Eine Test-Textausgabe im Konstruktor würde mir spontan einfallen.
Edit: Habe das mit Textausgabe gemacht und es wird nur der 1. Konstruktor genutzt (der mit Überprüfung).
-
Tyle schrieb:
- Einen Standardkonstruktor der Objekte mit dem Datum 1.1.1900 initialisiert.
SeppJ schrieb:
Datum::Datum(): year(1900), day(1), month(1) { }Tyle schrieb:
- Einen Konstruktor mit drei unsigned int-Parameter für Tag, Monat und Jahr
Tyle schrieb:
Datum::Datum(unsigned int x, unsigned int y, unsigned int z) { { if (!isValid(x,y,z)) /*...*/ }Und hau' endlich die
x,y,zraus!
-
Habs gerade auch schon gemacht:
Deklaration Konsturktor
// Konstruktor Deklaration // // Überprüfungs Konstruktor Datum(unsigned int, unsigned int, unsigned int); // Standard Konstruktor Datum();Definiton Konstruktor
Datum::Datum(unsigned int x, unsigned int y, unsigned int z) : tag_(x), monat_(y), jahr_(z) { cout << "Konstruktor mit Ueberpruefung" << endl; { if (!isValid(x,y,z)) { cout << "Datum ist ungueltig!" << endl; tag_ = 1; monat_ = 1; jahr_ = 1900; } } } //Konstruktor ohne Überprüfung Datum::Datum() : tag_(1), monat_(1), jahr_(1900) { cout << "Konstruktor ohne Ueberpruefung" << endl; return; }Werde das mit den x,y und z jetzt auch ändern. Danke nochmal.