Anfänger bei OOP



  • Hallo Leute,

    bin neu hier im Forum und lerne seit 3 Tagen C++. Versuche gerade die OOP zu verstehen und an Beispielen zu lernen. Habe jetzt einfach mal eine Klasse aufgesetzt und komme nicht wirklich weiter, bräuchte mal ein kleinen Gedankenschubser von euch, wo ich den Fehler habe?

    Danke im voraus

    mfg

    Wetschi86

    #include <iostream>
    #include <string>
    using namespace std;
    
    class konto {
    
          private:
                  string kundenname;
                  int kontonummer;
                  double kundenkonto;
    
          public:
                 konto(string kundenname_wert, int kontonummer_wert, double kundenkonto_wert); 
                 void set_kundenname(string kundenname_wert);
                 void set_kontonummer(int kontonummer_wert);
                 void set_kundenkonto(double kundenkonto_wert);
                 void ausgeben();
    
          };
    
          //Kunstruktor
          konto::konto(string kundenname_wert, int kontonummer_wert, double kundenkonto_wert)
          {
             kundenname = kundenname_wert;
             kontonummer = kontonummer_wert;
             kundenkonto = kundenkonto_wert;
          }
    
          //Methoden
          //SET
          void konto::set_kundenname(string kundenname_wert)
               {
                    kundenname = kundenname_wert;
               }
          void konto::set_kontonummer(int kontonummer_wert)
               {
                    kontonummer = kontonummer_wert;
               }   
    
          void konto::set_kundenkonto(double kundenkonto_wert)
               {
                    kundenkonto = kundenkonto_wert;
               }
    
          //GET
          string konto::get_kundenname()
               {
                     return kundennamen;
               }
    
          int konto::get_kontonummer()
               {
                     return kontonummer;
               }
    
          double konto::get_kundenkonto()
               {
                     return kundenkonto;
               }                      
          // TEXT AUSGEBEN
    
          void ausgeben() 
               {
                     cout << "Kunde:       " << konto::get_kundenname() <<endl;
                     cout << "Kontonummer: " << konto::get_kontonummer() <<endl;
                     cout << "Kontostand:  " << konto::get_kundenkonto() <<endl;
               }   
    // MAIN
    
    int main() {
    
        konto kunde1;
    
        kunde1.set_kundenname("Max Mustermann");
        kunde1.set_kontonummer(123456);
        kunde1.set_kundenkonto(3000);
    
        kunde1.ausgeben();    
    
        return 0;
    }
    

  • Mod

    Was genau ist deine Frage?

    Deine Datentypen sind ziemlich ungünstig gewählt (Eine Kontonummer ist eine Ziffernfolge, keine arithmetische Zahl. Den double verstehe ich überhaupt nicht, was der soll.) und einiges könnte man geschickter machen (Initialisierung, Ausgabe) und das Design ist nicht optimal (Wenn sowieso alles Getter und Setter hat, wo ist dann die Kapselung?), aber was willst du konkret wissen? Du sprichst von einem Fehler. Welchem?

    insgesamt ist es aber ok, für den ersten Versuch. So ungefähr sieht jeder erste Versuch aus und fast alles was ich gesagt habe, kannst du nach 3 Tagen nicht wirklich besser wissen (Wahl der Datentypen, Ausgabe, Initialisierung, Kapselung).



  • Geraten: es fehlt der Defaultkonstruktor. Warum benutzt du die setter-Methoden, wenn du einen Konstruktor mit entsprechenden Parametern hast?



  • Hallo,

    danke euch für die schnelle Antwort.

    Den double verstehe ich überhaupt nicht, was der soll.

    ja da hab ich den Namen für die Variable ungünstig gewählt, das soll nähmich der Kontostand sein.

    Geraten: es fehlt der Defaultkonstruktor.

    meinst du diesen:

    konto::konto() {
             kundenname  = "Max Mustermann";
             kontonummer = 123456;
             kundenkonto = 3000;               
          }
    

    Zum Fehler: ich kann das Programm nicht compilieren
    Fehlermeldung:

    no`std::string konto::get_kundenname() member of function declared in class `konto`

    usw bei den anderen Methoden das selbe ...

    wenn ich den default Kunstruktor setze, bekomme ich ähnliche Meldungen zum Kunstruktor...

    Danke



  • Wetschi86 schrieb:

    Zum Fehler: ich kann das Programm nicht compilieren
    Fehlermeldung:

    no`std::string konto::get_kundenname() member of function declared in class `konto`

    Du hast in deiner Klasse ja auch kein get_kundenname() etc. deklariert, ich seh dort nur Deklarationen für die ganzen set_ Funktionen...



  • So wie die set-Methoden zwei mal auftauchen muss es bei den anderen auch sein.

    Willst du wirklich einen Max Mustermann? Soll ja sogar schon Stimmzettel damit gegeben haben. Ein Defaultkonstruktor macht hier eigentlich keinen Sinn, aber man könnte ihn so definieren.



  • Danke 🙂



  • so die Fehler sind weg, hab aber nun bei der Methode ausgeben Probleme ...

    Fehlermeldungen:
    In function void ausgeben()': 77cannot call member functionstd::string konto::get_kundenname()' without object
    78cannot call member function int konto::get_kontonummer()' without object 79cannot call member functiondouble konto::get_kundenkonto()' without object

    ...

    vll kann mir das einer erklären, danke



  • void ausgeben() => void konto::ausgeben()



  • manni66 schrieb:

    void ausgeben() => void konto::ausgeben()

    Danke hat geklappt 🙂


Anmelden zum Antworten