Unterschied zwischen einem Objekt und einer Klasse??



  • Ist Objekt ein anderes Wort für Instanz? 😕



  • estartu schrieb:

    Ist Objekt ein anderes Wort für Instanz? 😕

    Genau 😃



  • Ah jetzt ja... 😃



  • Klasse verhält sich zu Objekt, wie Typ zu Variable.



  • MFK schrieb:

    Ein Objekt kann andere Objekte beinhalten, wenn auch nicht von derselben Klasse.

    warum nicht von derselben klasse? vielleicht nicht in c++ aber in der theorie doch schon, oder?

    zum thema: ich kenn' so'n typ der gibt java-kurse für einsteiger, der sagt immer zu seinen schülern: "eine klasse ist ein 'bauplan' für objekte"



  • Wenn wir schonmal so schön dabei sind 😃

    Was sind Attribute und was sind Methoden 😕

    gruß mercer

    PS: wäre nett wenn mir jemand nen gutes eBook oder nen guten Link empfehlen könnte mit dessen hilfe ich mir die OOP etwas besser aneignen kann

    Danke



  • mercer schrieb:

    Was sind Attribute und was sind Methoden 😕

    Attribut = Membervariable
    Methode = Memberfunktion

    PS: wäre nett wenn mir jemand nen gutes eBook oder nen guten Link empfehlen könnte mit dessen hilfe ich mir die OOP etwas besser aneignen kann

    Hast du schon da geguckt? http://www.c-plusplus.net/cms/modules.php?op=modload&name=Downloads&file=index



  • Danke erstmal 👍

    [quote="estartu"]
    Attribut = Membervariable
    Methode = Memberfunktion
    [quote]

    Membervariable: sind das die Variablen der Klasse ???

    Kann mir jemand die funktion der Memberfunktion etwas genauer erklären???

    gruß



  • mercer schrieb:

    Membervariable: sind das die Variablen der Klasse ???

    Ja.

    Kann mir jemand die funktion der Memberfunktion etwas genauer erklären???

    Um es mit deinen Worten zu sagen: Das sind die Funktionen der Klasse. 🙂



  • Klasse, Danke 👍 👍

    vlg
    mercer



  • Um beim Bsp 'Mensch' zu bleiben, hier wäre es vieleicht sinnvoll für diese Klasse eine MemberFunktion 'Gehen' einzubauen. Für Dich als Objekt hieße das dann als QuellText:

    Mensch mercer; // Mensch erzeugen *hüstl*
    mercer.Gehen(); //   :D
    

    Ist halt immer so eine Sache mit solchen Beispielen 😉

    Und ja, MemberVariablen sind Variablen, i.d.R. sogar private Variablen, der Klasse.



  • Klassen sind nichts anderes als "Baupläne" für Objekte / Instanzen. Das Objekt "SuperHero" ist eine Variable vom Typ "krieger", "Hans" ein Objekt vom Typ "Mensch". Die Klasse ist abstrakt, das Objekt konkret (Adresse des Objekts: this-Zeiger im realen bzw. virtuellen Speicherraum).

    Klassen enthalten Member-Funktionen (Methoden) und Member-Variablen (Attribute).
    Der "Bau" der Objekte erfolgt in der Konstruktor-Funktion (kurz. Konstruktor).
    Der Konstruktor hat den gleichen Namen wie die Klasse.

    Der Zugriff auf Funktionen und Variablen wird bei deren Deklaration erledigt:
    public, protected oder private.

    Bei private kann nur von innerhalb der Klasse zugegriffen werden.
    Bei public kann man auch von außen auf die Daten der Klasse zugreifen.
    Bei protected können abgeleitete Klassen von außen zugreifen.

    Der Destruktor ist die "Abrissbirne". 😉

    Damit das nicht so trocken 'rüber kommt, ein kleines Konsolen-Beispiel:

    #include <iostream>
    #include <string>
    using namespace std;
    
    void wait()
    {
        std::cin.clear();
        std::streambuf* pbuf = std::cin.rdbuf();
        std::streamsize size = pbuf->in_avail();
        std::cin.ignore(size);
        std::cin.get();
    }
    
    class krieger
    {
      private:
        static int count_;
        string name_;
        int gesundheit_;
        int kraft_;
        int ruestung_;
        void holeAdresse() const;
      public:
        krieger();
        ~krieger();
        //get-Methoden inline
        string getName()    const {return name_;}
        int getGesundheit() const {return gesundheit_;}
        int getKraft()      const {return kraft_;}
        int getRuestung()   const {return ruestung_;}
        //set-Methoden inline
        void setName(string name)   {name_       = name;}
        void setGesundheit(int val) {gesundheit_ = val;}
        void setKraft(int val)      {kraft_      = val;}
        void setRuestung(int val)   {ruestung_   = val;}
    
        void angreifen( krieger& gegner );
    };
    
    int krieger::count_ = 0x40; 
    
    krieger::krieger()
    {
      cout << "ctor von: ";   
      holeAdresse();
      name_ = ++count_; 
      gesundheit_ = 100;
      ruestung_   =  30;
      kraft_      =  10;   
    }   
    
    krieger::~krieger()
    {
      cout << "dtor von: ";
      holeAdresse();     
    }   
    
    void krieger::angreifen( krieger& gegner )
    {
      cout << "Krieger " << name_ << " greift Krieger "
           << gegner.name_ << " an.\n";
      gesundheit_-=5;
      gegner.gesundheit_-= int( 3*kraft_ - 2*gegner.kraft_ - 0.1*gegner.ruestung_ );       
    }
    
    void krieger::holeAdresse() const
    {
      cout << this << '\n';
    }
    
    int main()
    {
      int n;
      cout << "Wieviele Krieger? ";
      cin  >> n;
      krieger* k = new krieger[n];
    
      for(int i=0; i<(n-1); ++i)  
      {   
          cout << endl;
          k[i].angreifen(k[i+1]);
          for(int j=0; j<(n); ++j)  
              cout << k[j].getName() << ": Gesundheit: " << k[j].getGesundheit() << "%\n";
      }  
      cout << endl;
      delete[] k;
    
      wait();
      wait();
    }
    
    #include <iostream>
    #include <vector> //STL
    using namespace std;
    
    void wait()
    {
        std::cin.clear();
        std::streambuf* pbuf = std::cin.rdbuf();
        std::streamsize size = pbuf->in_avail();
        std::cin.ignore(size);
        std::cin.get();
    }
    
    class Lampe
    {   
        private:
            int helligkeit_;
    
        public:
            Lampe() : helligkeit_(0){}
    
            void dimmen(int wert)
            {
                helligkeit_ = wert;
            }
    
            bool getEin() const {return getHelligkeit();}
            int  getHelligkeit() const {return helligkeit_;}
    };
    
    class Schalter
    {   
        private:
            bool ein_;
    
        public:
            Schalter() : ein_(false){}    
            void schalten()    
            {
                ein_ = !ein_;
            }
            bool getEin() const {return ein_;}  
    };
    
    class Beleuchtung
    {
        private:
            vector<Schalter> v_;
            Lampe l_;
    
        public:
            Beleuchtung( vector<Schalter> v, Lampe l ) : v_(v),l_(l){}
    
            void schalten(int i)
            {
                v_[i].schalten();
                if( 
                    (  v_[0].getEin() &&  v_[1].getEin() &&  v_[2].getEin() )   ||
                    (  v_[0].getEin() && !v_[1].getEin() && !v_[2].getEin() )   ||
                    ( !v_[0].getEin() &&  v_[1].getEin() && !v_[2].getEin() )   ||
                    ( !v_[0].getEin() && !v_[1].getEin() &&  v_[2].getEin() )   
                  )
                    l_.dimmen(100);
                else 
                    l_.dimmen(0);
            }
    
            void status() const
            {
                cout << "S1: "   << (v_[0].getEin()?"an ":"aus") << "  " 
                     << "S2: "   << (v_[1].getEin()?"gerade  ":"gekreuzt") << "  "
                     << "S3: "   << (v_[2].getEin()?"an ":"aus") << "  " 
                     << "Lampe: "      << (l_.getEin()?"an ":"aus") << " "
                     << "Helligkeit: " << l_.getHelligkeit() << endl;      
            }    
    };    
    
    int main()
    {
        Lampe l1;
        Schalter s1,s2,s3;
        vector<Schalter> v;
        v.push_back(s1);
        v.push_back(s2); 
        v.push_back(s3); 
        Beleuchtung b1(v,l1);
        for(int i=0; i<3; ++i)
        {
            b1.schalten(0);
            b1.status();
            b1.schalten(1);
            b1.status();
            b1.schalten(2);
            b1.status();
        }    
        wait();
        wait();
    }
    

    Hier siehst Du, wie aus abstrakten Konzepten konkrete Objekte werden. Man versucht mit OOP reale "Objekte" nachzubilden. In der MFC findest Du eine ganze Klassenhierarchie, die "nur auf dem Bildschirm lebende" Objekte aus der Windows-Welt nachbilden (Fenster, Buttons, Listen, Dialoge, Scrollbalken, ...)

    Hier Links zu zwei sehr guten C++-Tutorials:
    http://www.cpp-tutor.de
    http://www.volkard.de/vcppkold/klassen.html



  • 😮 😮 😮

    SCHLUCK,

    naja, bis ich so'n Prog hinbekommen dauerts wohl noch 😮

    Danke für die zahlreichen Beispiele. 👍
    Und Danke für den Link, werd die so schnell wie möglich durchgehen! 🕶

    gruß mercer

    PS:
    Ich bin ein VB/VBA-HobbyProgger, möchte aber auf cpp umsteigen.
    Vielleicht hat ja jemand nen Tipp wie ich das am besten anstelle 😕
    Danke!


  • Administrator

    Ich war vorher VBA mit Excel progger und bin auch auf cpp umgestiegen. Mir ging das sehr leicht mit folgendem Buch:
    Microsoft Visual C++ Schritt für Schritt
    Ist von Chuck Sphar und von der Microsoft Press.

    Da lernst du zuerst Grundlagen zu C++ und dann auch noch etwas von der MFC. Am Ende, wenn das Buch durch hast, hast du eine Art von Paint selber geproggt 😉
    Im Buch ist im übrigen noch eine Autorenversion von Visual Studio 2003 dabei.

    Bzw. allgemein empfiehlt es sich halt ein paar Tutorials zu machen. Gibt nichts schlimmeres als wenn man sich einfach an das Proggen macht, meiner Meinung nach ist das viel zu frustrierend und viel zu gefährlich ^^

    Grüssli



  • Heißt das "Paint" zufällig Scribble?
    Wenn das Buch dann noch auf Deutsch ist, muss ich mir das holen. Ich habe das nämlich mal auf Englisch (gibts in der MSDN kostenlos) durchgearbeitet, das ist genial.


  • Administrator

    Ne das Teil heisst dann MyDraw. Und es ist auf Deutsch, ich empfehle doch in einem Deutschen C++ Forum kein englisches Buch 😛
    Grüssli



  • Schade, wenn das nicht Scribble ist, dann isses nicht mehr sooo interessant. 😞


  • Administrator

    Aber es ist gut! Für dich vielleicht nicht interessant, da du schon alles weisst und kennst und nur nach einem Buch für deine Kindheitsträume suchst *lol* ... Aber sag mal, wie hiess das Buch denn in Englisch? Kann man doch sicher eine deutsche Übersetzung in Google finden. Sicherlich auch zum kaufen, bzw. offiziell übersetzt.

    Grüssli



  • Hey, ich weiß auch nicht alles, gerade mit CDC und den Drumherum stehe ich sehr auf Kriegsfuß. 😞
    Deswegen ja die kurzzeitige Begeisterung. Wenn es mir günstig über den Weg läuft, kommt es sicherlich trotzdem in die Sammlung. 🙂

    Das ist kein Buch, was ich meinte. Das ist in der MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vctutor98/HTML/_gs_scribble_tutorial_steps.asp



  • Ich glaub ich wiederhol mich 😃

    Aber nochmal...

    Klasse Danke 👍

    gruß mercer


Anmelden zum Antworten