// Hat sich erledigt... Paar Fehler habe ich gleich mitbehoben.
zuQuote:
kunde1.create(i_name, i_nr);
if(Konto::create)
if(kunde1.create(i_name, i_nr))
Habs nun nachkontrolliert. Vielen Dank.Quote:
1. Bei deiner Klassendeklaration in Konto.h fehlt das ; hinter der schließenden geschweiften Klammer der Klasse.
if(kunde1.create(i_name, i_nr))
Ich wollte eigentlich durch Konto::create die Initialisierung durchführen für das Objekt, damit es mit Informationen vom Kunden gefüllt ist.Quote:
3. Deine Konto::create Methode macht nichts.
Das Programm soll auch später mit Ein-und Auszahlung etc. Buchungseinträge erweitert werden. Das mit den Variablen, sie zu verwirren, war nicht meine absicht.Quote:
4. Dein Programm macht auch nichts sinnvolles. Du erstellst ne Konto Variable, rufst create auf und verwirst die Variable danach direkt wieder.
Bin Zurzeit des öfteren durch den Wind. Das ist das erste Programm was ich überhaupt mal richtig begonnen habe, alles andere nur theoretisch durchgemacht.Quote:
Übrigens was dir noch Kopfzerbrechen bereiten könnte ist "if( ch = 'Y' || ch == 'y')". Wenn ich mich nicht irre weist du da der Variable "ch" den wert 'Y' zu und überprüfst nicht, wahrscheinlich leichtsinnsfehler.
Edit: Kopfzerbrechen, weil ich nicht weiß, ob der Compiler eine Fehlermeldung ausgibt, habs irgendwie in erinnerung das er's nicht macht (benutze jedoch MinGW)
#ifndef _Konto_h #define _Konto_h ... #endif
using namespace std;
void Anzeige(); bool create(string& , unsigned long& );
bool Konto::create(string& kontoinhaber , unsigned long& kontonummer)
{
if(kontoinhaber.size() <= 1){ cout << "Ihr Name muss groeßer als 1 Zeichen sein!" << endl; return false; }
else
return true;
}
// main function
#include "Konto.h"
int main()
{
cout << "Willkommen im Kontoprogramm - Main Menue" << endl;
cout << "Moechten Sie ein Konto erstellen? (Y)es or (N)o" << endl;
char ch; // Für die Eingabetaste des Benutzer's
cin >> ch; // Lesen der Eingabe
if( ch = 'Y' || ch == 'y') // Überprüfung
{
string i_name;
unsigned long i_nr;
cout << "Sie haben die Taste [" << ch << "] gedruekct und moechten ein neues Konto eröffnen" << endl << endl << endl;
cout << "Ihr vollstaendiger Name: ";
getline(cin, i_name);
cin.sync();
cin.clear();
cout << endl << endl << endl << "Geben Sie nun Ihre gewuenschte Kontonummer ein" << endl << "Beachten Sie dabei, dass die Nummer 9-stellig ist" << endl << "Kontonummer: ";
cin >> i_nr;
cin.sync();
cin.clear();
if(i_nr <= 99999999 || i_nr >=1000000000){
}
Konto kunde1;
kunde1.create(i_name, i_nr);
if(Konto::create)
{
cout << "Der Account wurde erfolgreich erstellt" << endl;
}
}
return 0;
}
Was sollte ich sonst machen? Die Tipps bisher gefallen mir und werde es mal versuchen es beizubehalten.Quote:
Globales using namespace ist unschön, globales using namespace im Header ist schlechter Stil. Solltest du dir sofort abgewöhnen.
Konstruktoren/Destruktoren werde ich mir jetzt gleich mal durchlesen.Quote:
Ebenfalls ist die Funktion "create" überflüssig. Sowas macht man mit dem Konstruktor. Dafür gibt es zwar durchaus ein paar Ausnahmen, aber dieser Fall gehört nicht dazu.
Du kannst über den Namespace auf die Funktionen/Methoden zugreifen (z. B. std::cout)Quote:
Was sollte ich sonst machen?
Das macht man für gewöhnlich durch den KonstruktorQuote:
Wie kann ich bei der Klasse Anfangswerte vergeben?
In C++ hat man die Möglichkeit einem Konstruktor Parameter/Variablen zu übergeben, sprich du kannst gleich bei der Erstellung des Objektes es mit Daten füttern, sofern du es im Konstruktor richtig gecoded hast.Quote:
Wenn ich nun ein Objekt erzeuge besitzt es ja alle Datenelemente wie Kontoinhaber etc. Wie kann ich das mit einer Methode initialisieren?
Also wie kann ich diese Datenelemente nun mit Informationen füttern?
Das Objekt habe dann erzeugt, kann aber ohne weitere Methode nichts initialisieren.
Man könnte es als eine Methode beschreiben, die automatisch bei der Erstellung des Objekets aufgerufen wird. Des Weiteren haben Konstruktoren nicht wirklich eine Return-Wert.Quote:
Könntest du mir das mit den Konstruktor weitererklären?
Das sind doch wie normale Methoden im Bereich einer Klasse oder nicht?
Wie könnte der Konstruktor aussehen?Quote:
In C++ hat man die Möglichkeit einem Konstruktor Parameter/Variablen zu übergeben, sprich du kannst gleich bei der Erstellung des Objektes es mit Daten füttern, sofern du es im Konstruktor richtig gecoded hast.
Konto::Konto(double 0.00/* Für den Anfangswert des Kontostands */)
// oder
Konto::Konto(/* Für den Anfangswert des Kontostands */)
{
double kontostand = 0.00}
Du kannst z.B. das using namespace in die Funktionen hinein schreiben(1), in denen du auf Funktionen und Klassen aus dem Namespace zugreifst. Du kannst auch nur über using sagen, was du aus dem Namespace genau nutzen möchtest(2). Alternativ kannst du auch die Funktion mitsamt Namespace ansprechen(3).Quote:
Was sollte ich sonst machen?
#include <iostream>
#incude <string>
#include <vector>
int main()
{
using std::string; //(2)
string someString;
std::vector<int> someVectorOfInt; //(3)
using namespace std; //(1)
cout << "foobar";
}
Das geht relativ einfach.Quote:
Konstruktoren/Destruktoren werde ich mir jetzt gleich mal durchlesen.
Wie kann ich bei der Klasse Anfangswerte vergeben?
#include <iostream>
#include <string>
class Foo
{
public:
Foo(int bar, float meow); //ctor
~Foo(); //dtor
private:
int mBar;
float mMeow;
};
Foo::Foo(int bar, float meow) :
mBar(bar),
mMeow(meow)
{
std::cout << "Foo wurde erstellt!" << std::endl;
}
//Alternativ (sehr viel langsamer als die initializer list):
/*
Foo::Foo(int bar, float meow)
{
mBar = bar;
mMeow = meow;
std::cout << "Foo wurde erstellt!" << std::endl;
}
*/
Foo::~Foo()
{
std::cout << "Foo wurde zerstoert!\n" << std::endl;
}
int main()
{
for(int i = 0; i < 5; ++i)
{
Foo foo(i, 0.5f);
std::cout << "Druecke Enter, um Foo zu zerstoeren!";
std::getline(std::cin, std::string());
}
std::cout << "Programmende!\n";
std::getline(std::cin, std::string());
}
Konto::Konto(double NeuerKontostand = 0)
{
Kontostand = NeuerKontostand;
}