Klassen und Konstruktoren
-
Hallo!
Habe eine Klasse (Konto) in der ich 4 Variablen (ID, Name, Betrag, Datum) setze. Zudem mehrere Methoden, die einen Datensatz anlegen/ändern/ausgeben ... sollen. Mit dem Konstruktor
konto () { create(); print();};
lege ich vor dem Programmstart ein Konto an.
Wie kann ich nun das Konto ändern?
Kann der User auswählen, wie viele Objekte der Klasse er anlegen will?
Hier mein Code:#include <iostream> #include <string> using namespace std; class konto { private: int id; string name; float betrag; int datum; public: void create (); void update (); void cancel (); void print (); konto () { create(); print();}; }; void konto::create () { cout << "Konto anlegen" << endl; cout << "Bitte Konto ID eingeben:" << endl; cin >> id; cout << "Bitte Name eingeben:" << endl; cin >> name; cout << "Bitte Betrag eingeben:" << endl; cin >> betrag; cout << "Bitte Datum eingeben:" << endl; cin >> datum; } void konto::update () { cout << "Bitte Name eingeben:" << endl; cin >> name; cout << "Bitte Betrag eingeben:" << endl; cin >> betrag; cout << "Bitte Datum eingeben:" << endl; cin >> datum; } void konto::print () { cout << "ID:" << id << endl; cout << "Name:" << name << endl; cout << "Betrag:" << betrag << endl; cout << "Datum:" << datum << endl; } void main () { konto eins; }
Danke und viele Grüße,
sole2202
-
eins.create(); eins.update(); eins.print();
anmerkungen:
-wo speicherst du die daten hin?
-es heißt 'int main()'
-was soll bei eins.update() passieren und was passiert tatsächlich?
-
Ich hab nur void main genommen, da es keinen Rückgabewert gibt! Ich weiß ja eben nicht wie ich die Daten speichern soll und mit update möchte ich den Datensatz ändern.
Aber wie?
Gruß, sole2202
-
sole2202 schrieb:
Hallo!
Habe eine Klasse (Konto) in der ich 4 Variablen (ID, Name, Betrag, Datum) setze. Zudem mehrere Methoden, die einen Datensatz anlegen/ändern/ausgeben ... sollen. Mit dem Konstruktor
konto () { create(); print();};
lege ich vor dem Programmstart ein Konto an.
Wie kann ich nun das Konto ändern?
Kann der User auswählen, wie viele Objekte der Klasse er anlegen will?
Hier mein Code:[cpp]#include <iostream> // Ich glaub hier fängt das Problem bereits an
// Vielleicht probierst Du das einfach einmal so:
#include<windows.h>#include <string> // Eine weitere Ursache der Misere. Einfach weglassen.
// (windows.h hat sich darum gekümmert: LPSTR)using namespace std; // Ist ja nur eine Übung, die Klasse hier, aber wenn's
// sein mussclass konto {
private:
int id;
LPSTR name;
float betrag;
int datum; // Überleg mal, ist ein Datum wirklich ein gewöhnlicher int?
// Versuch vielleicht, ein ...
// struct Date{
// USHORT day;
// USHORT month;
// USHORT year;
// }// ... zu verwenden, dann kann das Member
Date datum;
// ... heißen, und es wird obendrein auch richtig gespeichert
public:
// überleg mal, vielleicht brauchst Du hier eher solche Methoden,
// die können Dir später einmal erlauben, wirklich schnell und zügig
// tolle Anwendungen diesen Typs zu schreiben// Falls Du keinen HWND angibst, soll die Funktion einfach nur
// den Namen zurückgeben, andernfalls aktualisiert sie gleich auch noch
// den Text in dem für den User wahrnehmbaren Feld - also einem Control
LPSTR GetName(HWND zielcontrol=NULL)// Das Gegenstück dazu soll, falls ein Handle zu einem Control
// angegeben wird, den LPSTR ignorieren, und sich den Neuen Namen
// direkt selber aus dem Edit Control abholen
void SetName(LPSTR NeuerName,HWND SourceControl=NULL);// Genau die gleichen Setz- und Auslesefunktionen machst Du dann
// auch noch für die anderen Membervariablen, jede einzelne Funktion
// ist unspektakulär einfach zu schreiben, und trotzdem brauchst Du
// sie später an allen Ecken und Enden// Wenn es um mehrere Konten geht, muss sich dann
// natürlich eine größere Klasse darum kümmern, die dann auch bestimmt,
// wo die Konten dann in welchem Format hingespeichert werden (also
// über einen entsprechenden Filehandle verfügt) <wobei sie sich
// einer entsprechenden anderen Klasse bedienen wird, die darauf
// spezialisiert ist>// Die ganzen Funktionen hier sind eher von zweifelhaftem Wert, viel
// mehr als einfache (und komfortabel einzusetzende)
// Setz- und Lesefunktionen brauchst Du bei
// Datensatzklassen eigentlich nicht unbedingtvoid create ();
void update ();
void cancel ();
void print ();
konto () { create(); print();};
};[/cpp]Danke und viele Grüße,
sole2202
// Hoffe, ich habe Dir wenigstens ein paar interessante Denkanstösse geben
// können.
-
sole2202 schrieb:
Ich hab nur void main genommen, da es keinen Rückgabewert gibt! Ich weiß ja eben nicht wie ich die Daten speichern soll und mit update möchte ich den Datensatz ändern.
Aber wie?
Gruß, sole2202
Es ist wirklich egal, ob Du void main oder int main schreibst, ein anständiger Compiler macht daraus ohnehin int main.
-
Nein, ein anständiger Compiler weist zumindest mit ner Warnung daraufhin, daß das nicht standard-konform ist und man lieber int main verwenden sollte, weil es portabel ist.
-
Danke für die vielen Informationen. Ich progge nocht nicht sehr lange mit C++ und dies ist mein erster Versuch mit Klassen. Die windows.h Bibliothek kenne ich bisher auch noch nicht und werde sie deshalb erstmal außer acht lassen. Das mit dem Konstruktor läuft und mein Problem liegt darin, dass ich über das Objekt eins nicht die anderen Funktionen aufrufen kann. Vielleicht könnte mir jemand einen Tipp geben. Was letztendlich an der Stelle update/print/cancel passiert ,soll nicht im Vordergrund stehen. Wichtig ist die richtige Benutzung der Klassen.
#include <iostream> #include <string> using namespace std; class konto { private: string id; string name; float betrag; int datum; public: void create (); void update (); void cancel (); void print (); konto () { create(); print();}; }; void konto::create () { cout << "Konto anlegen" << endl; cout << "Bitte Konto ID eingeben:" << endl; cin >> id; cout << "Bitte Name eingeben:" << endl; cin >> name; cout << "Bitte Betrag eingeben:" << endl; cin >> betrag; cout << "Bitte Datum eingeben:" << endl; cin >> datum; } void konto::update () { cout << "Bitte Name eingeben:" << endl; cin >> name; cout << "Bitte Betrag eingeben:" << endl; cin >> betrag; cout << "Bitte Datum eingeben:" << endl; cin >> datum; } void konto::print () { cout << "ID:" << id << endl; cout << "Name:" << name << endl; cout << "Betrag:" << betrag << endl; cout << "Datum:" << datum << endl; } void cancel () { cout << "Der Vorgang wird nun abgebrochen!" << endl; } int main () { int auswahl; konto eins; eins.update; do { cout << "Was moechten Sie nun machen ?" << endl; cout << "(1) Update" << endl; cout << "(2) Print" << endl; cout << "(3) Cancel" << endl; cin >> auswahl; switch (auswahl) { case 1: eins.update; case 2: eins.print; case 3: eins.cancel; } }while (auswahl != 3); return (0); }
Gruß, sole2202
-
sole2202 schrieb:
Danke für die vielen Informationen. Ich progge nocht nicht sehr lange mit C++ und dies ist mein erster Versuch mit Klassen. Die windows.h Bibliothek kenne ich bisher auch noch nicht und werde sie deshalb erstmal außer acht lassen. Das mit dem Konstruktor läuft und mein Problem liegt darin, dass ich über das Objekt eins nicht die anderen Funktionen aufrufen kann. Vielleicht könnte mir jemand einen Tipp geben. Was letztendlich an der Stelle update/print/cancel passiert ,soll nicht im Vordergrund stehen. Wichtig ist die richtige Benutzung der Klassen.
[cpp]int main () {
int auswahl;
konto eins;
eins.update**()**; // Den Klammeroperator bei Funktionen nicht ver-
// gessen!
do
{
cout << "Was moechten Sie nun machen ?" << endl;
cout << "(1) Update" << endl;
cout << "(2) Print" << endl;
cout << "(3) Cancel" << endl;
cin >> auswahl;switch (auswahl) {
case 1:
eins.update**(); // !!!
case 2:
eins.print(); // !!!
case 3:
eins.cancel()**; // !!!
}
}while (auswahl != 3);
return (0);}[/code]
Gruß, sole2202
// Ansonsten müsste das jetzt einigermaßen klappen
-
Danke für die schnelle Antwort. Es hat geholfen. Habe nicht an die Klammern gedacht.
Gruß, sole2202.