Klassen und Objecte



  • RIeßen Dank sowas hab ich gebraucht , da weiß ich welche Variablen mit welchen Übereinstimmen müssen , noch ma Big Thx !!! Ich hau mich wieder aufs Bett weiter lernen ,.. Immer mit meinem Ziel vor Augen 🙂

    MFG Toa



  • Hallo,

    das Beispiel ist etwas merkwuerdig. Du hast keine Get-Methode, um an den Wert
    zu kommen.

    BTW: Das mit cout ist schon richtig so.

    Mit Klassen kapselst du Daten und diese Daten sind private, weil der Benutzer
    der Klasse diese lediglich ueber ein definiertes Interface benutzen soll.

    Man koennte sich zum Speichern eines Bruches z. B. folgende Klasse schreiben:

    class Fraction {
        private:
            int numerator;
            int denumerator;
        public:
            Fraction(const int& n, const int& d)
                : numerator(n), denumerator(d) 
            {}
    
            int get_numerator() {
                return numerator;
            }
    
            int set_numerator(const int& n) {
                numerator = n;
            }
    
            int get_denumerator() {
                return denumerator();
            }
    
            int set_denumerator(const int& d) {
                denumerator = d;
            }
    

    Mit Hilfe der set-Methoden kannst du die Werte entsprechend setzen.

    Fraction fraction(4, 5); //ctor aufruf => numerator = 4, denumerator = 5
    
    cout<<fraction.get_numerator()<<"/"<<fraction.get_denumerator()<<endl;
    
    //wir wollen einen anderen Bruch, z. B. 3/4
    fraction.set_numerator(3);
    fraction.set_denumerator(4);
    
    //und wieder ausgeben
    cout<<fraction.get_numerator()<<"/"<<fraction.get_denumerator()<<endl;
    

    Warum der Umweg ueber Methoden? Unter Umstaenden willst du noch irgendwelche
    Ueberpruefungen machen, um die der Benutzer nicht drum herum kommen soll. Z. B.
    die Pruefung, ob 'denumerator' auf 0 gesetzt wird (was nicht zulaessig waere).

    gruss
    v R



  • So ich hab jetzt

    #include <iostream.h>
    
    class ausgabe
    {
        public:
        int zahl_ausgabe(int variable)
        {
            zahl=variable;
            return variable;
        }
        private:
        int zahl;
    };
    
    int main()
    {
        ausgabe die_ausgabe;
        ausgabe.zahl_ausgabe(10);
    
    }
    

    Aber Compiler bringt mir den Fehlr Expected Primary Expression befor ´.´ bei
    ausgabe.zahl_ausgabe(10);

    Aber es stimmt doch alles ? ..



  • Du musst mit dem Objekt arbeiten, welches du angelegt hast.

    ausgabe eine_ausgabe;
    

    Instanziiert ein Objekt vom Typ 'ausgabe'. Dein Objekt wird nur ueber
    'eine_ausgabe' referenziert und damit arbeitest du auch.

    Korrekt muesste es also heissen:

    eine_ausgabe.zahl_ausgabe(10);
    

    BTW: Du solltest eine extra get- und set-Methode schreiben. Denn immer wenn
    du etwas ausgeben willst, ueberschreibst du es zunaechst mit einer neuen Wert.

    gruss
    v R



  • Sorry für den Fall das ich eventuell nerve ,

    aber irgendwie klappts net obwohl ich jetzt schon ziemlich viel richtig gemacht hab meiner Meinung nach xD

    #include <iostream.h>
    
    class ausgabe
    {
        public:
    
        int SetZahl(int variable);
        int GetZahl();
    
        private:
    
        int zahl;
    }
    
    int ausgabe::SetZahl(int variable)
    {
        zahl=variable;
    }
    
    int ausgabe::GetZahl()
    {
        return zahl;
    }
    
    int main()
    {
        ausgabe eine_ausgabe;
        eine_ausgabe.SetZahl(10);
        cout << eine_ausgabe.GetZahl();
    }
    


  • Definiere "klappt nicht". Gibt es irgendwelche Fehler? Bitte angeben 😉

    gruss
    v R



  • Also es kommen folgende fehlermeldungen

    Zeile 16 : new types may not be defined in a return type
    Zeile 16 : extraneous int ignored
    Zeile 16 : prototyp for ausgabe ausgabe::SetZahl(int) does not match any in class ausgabe
    Zeile 7: candidate is : int ausgabe::SetZahl(int)
    Zeile 16 : ausgabe ausgabe::SetZahl(int) and int ausgabe::SetZahl(int) cannot be overloaded



  • Die Klassendeklaration muss mit einem Semikolon abgeschlossen werden. Ausserdem
    solltest du den Rueckgabetyp der set-Methode in void umaendern.

    gruss
    v R



  • ohh haaa danke , wenn ich groß bin will ich auch so gut Proggen können wie du , mir is grad aufgefallen das du schon Seit 2000 hier bist ,.. du musst ziemlich gut sein. Hab leider erst jetzt mit C++ angefangen und vorher meine Zeit mit Qbasic vergoldet .. 😕 ...



  • Toa schrieb:

    ohh haaa danke , wenn ich groß bin will ich auch so gut Proggen können wie du , mir is grad aufgefallen das du schon Seit 2000 hier bist ,.. du musst ziemlich gut sein. Hab leider erst jetzt mit C++ angefangen und vorher meine Zeit mit Qbasic vergoldet .. 😕 ...

    Noe, hat nix mit gutsein zu tun. Nur sind das so Fehler, die man im Laufe seiner
    Jahre natuerlich auch selbst oft genug gemacht hat, daher schaut man direkt
    erstmal auf diese Art von Fehler ;).

    Das ich seit 2000 hier bin, sagt ja nix ueber die Qualitaet meiner Beitraege oder
    mein koennen aus.

    gruss
    v R


Anmelden zum Antworten