Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // KontenCPP.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
- #include <iostream>
- #include <fstream>
- #include <cstring>
- using namespace std;
- /*************************************************************************
- * Basisklasse: cKonto *
- *************************************************************************/
- class cKonto{
- protected: // protected um cSparkonto Zugriff auf Kontostand zu gewähren,
- int mAccNo; // theoretisch könnten Name und AccNo private bleiben
- float mBalance;
- char* pmName;
- public:
- /************************************************************
- * Konstruktoren / Destruktor *
- ************************************************************/
- cKonto( int accNo = 123456, float balance = 1234.56f, char* name = "Max Mustermann")
- {
- mAccNo = accNo;
- mBalance = balance;
- pmName = new char[strlen(name)+1];
- strcpy(pmName, name);
- }
- cKonto( const char* fileName ) // 2. Konstruktor um Objekte direkt über Dateien zu initialisieren
- {
- ifstream db;
- db.open( fileName, ios::in);
- if(db.fail())
- {
- cout << "Dateiname nicht gefunden";
- }
- char buffer1[30], buffer2[30];
- db >> mAccNo >> buffer1 >> buffer2 >> mBalance;
- pmName = new char[strlen(buffer1) + 1 + strlen(buffer2) + 1];
- strcpy(pmName, buffer1);
- strcat(pmName, " ");
- strcat(pmName, buffer2);
- db.close();
- }
- cKonto( const cKonto& source )
- {
- pmName = new char[ strlen(source.pmName) + 1 ];
- strcpy(pmName, source.pmName);
- mBalance = source.mBalance;
- mAccNo = source.mAccNo;
- };
- virtual ~cKonto(){
- delete [] pmName;
- };
- /************************************************************
- * Set/Get *
- ************************************************************/
- int getAccNo()
- {
- return mAccNo;
- }
- void setAccNo(int neu)
- {
- mAccNo = neu;
- }
- float getBalance()
- {
- return mBalance;
- }
- void setBalance(float neu)
- {
- mBalance = neu;
- }
- char* getName()
- {
- return pmName;
- }
- void setName(const char* neu) // Reallokation des Speichers auf neue Stringgröße
- {
- if(pmName)
- delete [] pmName;
- pmName = new char[strlen(neu) +1 ];
- strcpy(pmName, neu);
- }
- /************************************************************
- * Methoden *
- ************************************************************/
- virtual void einauszahlen(float amount) // virtual, da die Funktion in cSparkonto überschrieben wird
- {
- mBalance += amount;
- }
- virtual void ueberweisung(cKonto& empfaenger, float amount) // s.o.
- {
- mBalance -= amount;
- empfaenger.mBalance += amount;
- }
- void print()
- {
- cout << "-----------------------\n";
- cout << "- " << pmName << "\n";
- cout << "- Kontonummer:\n";
- cout << "- \t" << mAccNo << "\n";
- cout << "- Guthaben:\n";
- cout << "- \t" << mBalance << "\n";
- cout << "-----------------------\n";
- }
- void saveToFile(char* fileName)
- {
- ofstream output;
- output.open(fileName, ios::out);
- output << mAccNo << " " << pmName << " " << mBalance;
- output.close();
- }
- bool loadFromFile( const char* fileName ) // Einlesen aus Datei als Methode, um dynamisch erstellte Objekte
- { // auch ausserhalb des Konstruktors über Dateien mit Daten zu füllen
- ifstream db;
- db.open( fileName, ios::in);
- if(db.fail())
- {
- cout << "Dateiname nicht gefunden";
- return false;
- }
- char buffer1[30], buffer2[30];
- db >> mAccNo >> buffer1 >> buffer2 >> mBalance;
- if(pmName)
- delete [] pmName;
- pmName = new char[strlen(buffer1) + 1 + strlen(buffer2) + 1];
- strcpy(pmName, buffer1);
- strcat(pmName, " ");
- strcat(pmName, buffer2);
- db.close();
- return true;
- }
- void init( int accno, float stand, const char* name)
- {
- setName(name);
- mBalance = stand;
- mAccNo = accno;
- }
- };
- /*************************************************************************
- * Klasse: cSparkonto -> cKonto *
- *************************************************************************/
- class cSparkonto:public cKonto{ // abgeleitete Klasse
- private:
- float mPraemie; // Hoehe der Praemie
- public:
- cSparkonto(float praemie = 50.00f, int accNo = 123456, float balance = 1234.56f, char* name = "Max Mustermann" ) : cKonto(accNo, balance, name) // Standardkonstruktor
- {
- mPraemie = praemie;
- mBalance += mPraemie;
- }
- void einauszahlen(float amount) // Funktion "überschrieben", um Überziehung zu verhindern
- {
- if( mBalance+amount >= 0 )
- {
- mBalance += amount;
- }
- else
- {
- cout << "Konto nicht gedeckt" << endl;
- }
- }
- void ueberweisung(cKonto& empfaenger, float amount) // Polymorphie: Funktion akzeptiert sowohl Basisklasse
- { // als auch abgeleitete Kontoklassen
- if( mBalance-amount >= 0 )
- {
- mBalance -= amount;
- empfaenger.einauszahlen(amount);
- }
- else
- {
- cout << "Konto nicht gedeckt" << endl;
- }
- }
- };
- int main(int argc, char argv[])
- {
- cSparkonto konto1;
- cKonto konto2(345345, 1000.00f, "Max Meier");
- konto1.init(12345, 33.33f, "Dob Dob"); // vererbte init-Fuktion
- konto1.einauszahlen(-50); // sollte Fehler produzieren
- konto1.print();
- konto1.einauszahlen(+50); // möglich
- konto1.print();
- cout << "----------- Ueberweisung ------------" << endl;
- konto2.ueberweisung(konto1, 300.00f);
- konto1.print();
- konto2.print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement