Brauche Hilfe bei den Klassen - Class in C++ ! Verständnis Problem !



  • Hallo

    Mein Problem ist, daß ich die "Klassen bzw Class" nicht verstehe. Ich arbeite mich schon durch das dritte C++-Buch und hab mir einiges aus dem Internet ausgedruckt.

    Meine Fragen sind nun Folgende:

    1. Wofür benötigt man Klassen ?
    - Ich hab das so verstanden: Klassen ist ein (teilweise)
    zugriffsgeschützter "Bereich/Speicher" auf den nur autorisierte Personen
    bzw Anweisungen zugriff haben.

    2. Wie bzw. wann kann ich außerhalb einer Klasse auf Daten aus einer Klasse
    zugreiffen.
    - ???

    Es wäre nett wenn mir jemand die Funktion des folgenden Prog. erläutern könnte
    oder mir die Funktion an einem anderen Beispiel erklären könnte.
    -------------------------------------------------------

    Beispielprogramm Kontodaten anzeigen:

    Header-Datei : KONTO.H

    #include <string>

    class KONTO
    {

    private:
    unsigned int Kontonummer;
    double Kontostand;
    string Inhaber;

    public:

    KONTO(unsigned int, double,const string&);

    ~KONTO();
    void KontenDatenAnzeigen();
    };

    CPP-Datei: KONTO.CPP

    #include<iostream>
    #include"KONTO.H"

    KONTO::KONTO(unsigned int_Kontonummer,double_Kontostand,const string&_Inhaber)
    {
    Kontonummer = _Kontonummer;
    Kontostand = _Kontostand;
    Inhaber = _Inhaber;
    }

    KONTO::~KONTO()
    {
    ::std::cout << "\n Objekt gelöscht!\n";
    }

    void KONTO::KontenDatenAnzeigen()
    {
    ::std::cout << "\n Kontonummer = " << Kontonummer << Kontonummer
    <<\nKontostand = " << Kontostand << \n Inhaber = " << Inhaber << "\n";
    }

    MAIN-Datei: MAIN.CPP

    #include<iostream>
    #include"KONTO.H>

    int main()
    {
    KONTO ErstesKonto(1234, 10203.99,"H.Mueller");

    ErstesKonto.KontenDatenAnzeigen();

    return(0);
    }

    ------------------------------------------------------------

    Mir würden auch Kommentare zu den einzelnen Zeilen reichen !!!!!!

    Im voraus tausend mal DANKE !!!!

    Gruß
    Thiemo

    P.S. Ich hab diese Frage schon in einem anderen Rubrik im C++Forum gestellt und bin darauf hingewiesen worden, das diese Rubrik die richtige wäre.
    Also bitte nicht auf beide Fagen antworten, wenns geht nur hier.



  • Hallo

    Ich habe dir auch schon im anderen Forum geantwortet und nehme Bezug auf deine letzte frage dort:
    Auf private Elemente hat man nur innerhalb der Klasse Zugriff. Klassen zerstört man wieder, wenn man Sie nicht mehr braucht. Kleines Beispiel:
    Klasse Intro wird gebarucht, wenn man ein Spiel startet. Sobald man sich aber im Hauptmenü befindet, braucht man dies Klasse nicht mehr und zerstört Sie mit dem Destruktor. In diesem kann man zum Beispiel Speicher wieder freigeben.

    chrische



  • CKonto::CKonto(unsigned int Kontonummer, double Kontostand, const string& Inhaber) // Konstruktor 
    { 
       m_Kontonummer = Kontonummer; // Die Membervariable m_Kontonummer bekommt den werd der Variable Kontonummer 
       m_Kontostand  = Kontostand; // Die Membervariable m_Kontostand bekommt den werd der Variable Kontostand 
       m_Inhaber     = Inhaber; // Die Membervariable m_Inhaber bekommt den werd der Variable Inhaber CKonto::CKonto(unsigned int Kontonummer, double Kontostand, const string& Inhaber) // Konstruktor
    

    ... aber hier bin ich doch nicht mehr in der Klasse, oder .... ?

    Gruß
    Thiemo



  • Thiemo schrieb:

    1. Wofür benötigt man Klassen ?

    Um das Leben eines Programmierers leichter zu machen 👍



  • Hallo Freak_Coder

    jetzt mal im Ernst (ja und ich weiß,daß aus Spaß ganz schnell Ernst werden kann und der ist jetzt 3 Jahre):

    Hab ich das richtig verstanden ??? Stimmen meine Antworten ?

    Gruß Thiemo



  • Thiemo schrieb:

    ... aber hier bin ich doch nicht mehr in der Klasse, oder .... ?

    Doch mittendrinn du implementierst einen constructor der Klasse CKonto.
    Kurt



  • Hallo

    Wo sollen wir denn auf deine Fragen antworten? Es wäre cool, wenn du dich auf einen Thread festlegen könnstest. Also entweder C++ Forum oder MFC Forum. Wo bei es wohl eher zu C++ gehört.

    chrische



  • Hallo ZuK

    Dann kann ich also mit :

    CKonto::CKonto(unsigned int Kontonummer, double Kontostand, const string& Inhaber)

    von überall auf meine Klasse "CKonto" zugreifen ?

    Gruß
    Thiemo



  • i e



  • Hallo

    Du musst eine Instanz deiner Klasse erstellen:

    CKonto my_Konto(123,-500,"Thiemo");
    

    Dann kannst du mit my_Konto weiterarbeiten.

    chrische



  • Thiemo schrieb:

    Dann kann ich also mit :
    CKonto::CKonto(unsigned int Kontonummer, double Kontostand, const string& Inhaber)
    von überall auf meine Klasse "CKonto" zugreifen ?

    Nein du greifst nicht auf Klassen zu sondern du arbeitest mit Instanzen von Klassen.
    K



  • Hallo ZuK

    Wie kann man eine Instanz einer Klasse beschreiben ?

    Ist die Instanz eine Art Link ?



  • Hallo

    Eine Instanz erzeugt man genau so:

    CKonto my_Konto;
    

    Du musst die dabei deine Klasse als Variablentyp wie zum Beispiel int vorstellen.

    chrische



  • Welchen Programmteil meinst Du genau ?
    Ich kann "CKonto my_Konto;" in dem Programm nicht finden, welche Anweisung ersetzt es ?



  • Hallo

    in deinem "Programm" gibt es diese Zeile nicht, weil mit der Klasse nicht gearbeitet wird. wenn du aber die Funktionen dieser Klasse nutzen möchtest, musst du eine Instanz deiner Klasse erzeugen.

    chrische



  • Thiemo schrieb:

    Wie kann man eine Instanz einer Klasse beschreiben ?

    Vielleicht so
    Die Klasse ist der Bauplan die Instanz das Gebäude. ( Du kannst viele verschiedene Häuser mit einem Plan bauen.)
    Kurt



  • Das heißt...

    ich lege den "Bauplan" in meiner Klasse ab z.B. eine leere Tabelle bzw. eine reihenfolge einer Auflistung, die ich dann für mehrere Programmteile nutzen kann.



  • Thiemo schrieb:

    ich lege den "Bauplan" in meiner Klasse ab

    die klasse ist der bauplan.

    class Foo
    {
    public:
       int a;
       double b;
       void fun ();
    };
    

    ist der Bauplan für Objekte, die den Typ "Foo" haben. Jedes Objekt vom Typ "Foo" (=jede Instanz von Foo) hat einen integer namens a, der öffentlich zugänglich ist, einen double namens b, der öffentlich zugänglich ist und eine funktion fun, die keine argumente annimmt und nichts zurückgibt.

    Wenn du nach diesem Bauplan ein Objekt vom Typ "Foo" bauen willst, schreibst du:

    Foo ein_objekt;
    

    ein_objekt ist jetzt die Instanz, das konkrete Objekt, mit dem du arbeiten kannst.

    ein_objekt.a = 15;
    ein_objekt.b = 2.22;
    ein_objekt.fun();
    

    die elementfuntktion fun musst du allerdings erst noch definieren. das geht entweder inline in der klasse, oder z.b. so:

    void Foo::fun ()
    {
      cout << "hf\n";
    }
    


  • ja so wie in deinem Konto Beispiel. Du definierst welche Daten ( Kontostand, Kontonummer, Inhaber ) deine Klasse enthält. Und obendrein definierst du auch noch die Methoden mit denen diese Daten manipuliert werden können.( in deinem Beispiel KontenDatenAnzeigen() ).
    Natürlich braucht eine Konto Klasse noch ein Paar nützliche Methoden wie z.B
    void einzahlen( int betrag );
    void abheben( int betrag );
    usw.
    Kurt



  • DANKE !!!

    Ich werd jetzt mich ans rumspielen machen und Eure Tips versuchen umzusetzten.
    Meld mich am Wochenende wieder und sag Euch dann wie´s geklappt hat.


Anmelden zum Antworten