Klassenfrage



  • Hallo, hab ein Beispiel im Buch.. Verstehe aber leider nicht ganz und muss leider Fragen stellen damit ich weiterkomme. 🙄
    Ich gebe euch mal den ganzen Code..
    -------------------------

    // Beginn von Rect.hpp
    #include <iostream.h>
    
    class Point
    {
    public:
           void SetX(int x) { itsX = x; }
           void SetY(int y) { itsY = y; }
           int GetX()const { return itsX; }
           int GetY()const { return itsY; }
    private:
            int itsX;
            int itsY;
    };
    
    class Rectangle
    {
    public:
           Rectangle(int top, int left, int bottom, int right);
           ~Rectangle() { }
    
           int GetTop()const { return itsTop; }
           int GetLeft()const { return itsLeft; }
           int GetBottom()const { return itsBottom; }
           int GetRight()const { return itsRight; }
    
           Point GetUpperLeft()const { return itsUpperLeft; }
           Point GetLowerLeft()const { return itsLowerLeft; }
           Point GetUpperRight()const { return itsUpperRight; }
           Point GetLowerRight()const { return itsLowerRight; }
    
           void SetUpperLeft(Point Location) { itsUpperLeft = Location; }
           void SetLowerLeft(Point Location) { itsLowerLeft = Location; }
           void SetUpperRight(Point Location) { itsUpperRight = Location; }
           void SetLowerRight(Point Location) { itsLowerRight = Location; }
    
           void SetTop(int top) { itsTop = top; }
           void SetLeft(int left) { itsLeft = left; }
           void SetBottom(int bottom) { itsBottom = bottom; }
           void SetRight(int right) { itsRight = right; }
    
           int GetArea() const;
    private:
            int itsUpperLeft;
            int itsLowerLeft;
            int itsUpperRight;
            int itsLowerRight;
            int itsTop;
            int itsLeft;
            int itsBottom;
            int itsRight;
    }; // Ende von Rect.hpp
    

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

    // Beginn von rect.cpp
    #include "rect.hpp"
    Rectangle::Rectangle(int top, int left, int bottom, int right)
    {
    itsTop = top;
    itsLeft = left;
    itsBottom = bottom;
    itsRight = right;
    
    itsUpperLeft.SetX(left);
    itsUpperLeft.SetY(top);
    
    itsUpperRight.SetX(right);
    itsUpperRight.SetY(top);
    
    itsLowerLeft.SetX(left);
    itsLowerLeft.SetY(bottom);
    
    itsLowerRight.SetX(right);
    itsLowerRight.SetY(bottom);
    }
    
    int Rectanlge::GetArea() const
    {
     int Width = itsRight - itsLeft;
     int Height = itsTop - itsBottom;
     return (Width * Height);
    }
    
    int main()
    {
     Rectangle MyRectangle (100, 20, 50, 80 );
    
     int Area = MyRectangle.GetArea();
    
     cout << "Flache: " << Area << "\n";
     cout << "Obere linke X-Koordinate: ";
     cout << MyRectangle.GetUpperLeft().GetX();
     return 0;
    } // Ende von Rect.cpp
    

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

    Fragen:
    1.Frage

    Point GetUpperLeft()const { return itsUpperLeft; }
           Point GetLowerLeft()const { return itsLowerLeft; }
           Point GetUpperRight()const { return itsUpperRight; }
           Point GetLowerRight()const { return itsLowerRight; }
    

    Was ist hier mit Point am Anfang gemeint? Normalerweise int, void oder so.. oder? 😕
    -------------------------
    2.Frage

    void SetUpperLeft(Point Location) { itsUpperLeft = Location; }
           void SetLowerLeft(Point Location) { itsLowerLeft = Location; }
           void SetUpperRight(Point Location) { itsUpperRight = Location; }
           void SetLowerRight(Point Location) { itsLowerRight = Location; }
    

    void SetLowerLeft{Point Location)
    Wieso Location? Könnte man hier auch ein anderes Wort verwenden? Das Wort wurde ja vorher nicht definiert oder so. 😕
    -------------------------
    3.Frage

    void SetTop(int top) { itsTop = top; }
    

    Wieso schreiben wir hier nochmal int top? Haben wir denn ganz oben im Konstruktor nicht defieniert oder so? 😕
    -------------------------
    4.Frage
    Wieso muss ich überall const hinschreiben.. Was ändert sich eigentlich wenn ich nur int GetArea(); hinschreiben würde? 😕
    -------------------------
    5.Frage
    Ich verstehe den Sinn dieses Programms garnicht, wieso wird überall return itsUpperLeft; oder return itsTop; und solche dinger geschrieben? 😕
    -------------------------
    6.Frage

    Rectangle MyRectangle(100, 20, 50, 80);
    

    Wieso steht hier auf einmal ein My vor Rectangle? 😕
    -------------------------

    Ich weiss, das sind echt sehr viele Fragen, aber anders kann ich nicht.. Ihr müsst nicht alle aufeinmal beantworten, ich habe bisschen Zeit.

    Mit freundlichen Grüßen
    technology



  • 1. Point ist die Klasse die du definierst. Die Funktionen geben jeweils ein Objekt der Klasse zurueck (Instanz).
    2. Location ist einfach nur die Bezeichnung der Variable. Du kannst auch
    void SetLowerLeft(Point p) { itsLowerLeft = p; }
    schreiben.
    3. void SetTop(int top) { itsTop = top; }
    Dies ist eine Methode, mit der man eben nachher noch den Wert itsTop veraendern kann. Im Konstruktor wird die Variable uebrigens nicht definiert, das geschieht hier:

    private:
            int itsUpperLeft;
            int itsLowerLeft;
            int itsUpperRight;
            int itsLowerRight;
            int itsTop; // Hier
            int itsLeft;
            int itsBottom;
            int itsRight;
    

    Im Konstruktor und in der Methode wird nur ein neuer Wert zugewiesen.
    4. Mit const stellst du sicher, dass der Wert nicht veraendert wird. Wird zumbeispiel verwendet, wenn man ein Objekt an eine Methode uebergibt, auf das Objekt zugreift, es aber nicht veraendert will! Wenn man das tut erhaelt man vom Compiler ne Warnung!
    5. Ich gehe mal vom folgenden aus:
    Point GetUpperLeft()const { return itsUpperLeft; }
    Verwenden kann man das dann so:
    Rectangle rec( 1, 2, 3, 4 );
    rec.GetUpperLeft()
    Du legst ein neues Objekt von Rectangle an, und mit der Methode erhaelst du ein Objekt vom Typ Point zurueck. Die Methode gibt eben ein Objekt vom Typ Point zurueck.
    6. MyRectangle ist eine Variable vom Typ Rectangle!

    Noch Fragen, die Erklaerung ist sicher nicht vollstaendig!

    mfg



  • (omg schon 7 durch! meine woche hat 6 tage...)

    erster rat: geh ein kapitel weiter zurueck und arbeite das nochmal durch. normalerweise sollte dein buch genug erklaert haben, bevor du einen solchen quelltext vor dir liegen hast.

    Point ist eine Klasse. du kannst "Point" so verwenden wie andere klassen und typen auch.
    wenn du nur eine zahl willst, heisst es "int zahl;". wenn du aber einen punkt haben willst (2 koordinaten), dann heisst es "Point punkt;"

    class Rectangle
    {
    ...
    private:
            int itsUpperLeft; // die vier hier muessen vom typ Point sein, nicht int
            int itsLowerLeft; //
            int itsUpperRight; //
            int itsLowerRight; // 
            int itsTop;
            int itsLeft;
            int itsBottom;
            int itsRight;
    };
    

    1.)
    Point ist ein typ (genauer eine klasse) von variable, aehnlich wie z.b. "string" oder int.
    wenn eine funktion einen Point zurueckgibt, dann hat sie eben auch den typen Point, wie du im quelltext siehst.

    2.)
    "Location" wird hier einfach der erste parameter genannt, damit du ihn in der funktion (alles zwischen den {}) ansprechen kannst.
    parameter sind die werte in klammern, wenn du eine funktion aufrufst.
    du koenntest auch ein anderes wort in der parameterliste nehmen, aber dann musst du dieses auch in der funktion aendern.

    3.)
    "int top" nochmal, weil in der parameterliste der typ jedes parameters stehen muss. mit dem konstruktor hat das nichts zu tun.
    "top" ist nur der name des parameter, "itsTop" ist teil der klasse (genauer des objektes).

    4.) const schreibst du bei denen funktionen, welche die variablen des objektes nicht veraendern (den status). wenn eine funktion nur die werte der membervariablen zurueckgibt, dann veraendert sie diese ja nicht. deswegen sollte man die funktion "const" deklarieren. genauer will ich dich damit nicht nerven, aber wenn du mehr wissen willst, sieh mal da: http://tutorial.schornboeck.net/constmethode.htm
    wenn du das const weglassen wuerdest, dann dueftest du diese methoden nicht bei einem "const Rectangle meinrechteck;" aufrufen, weil du durch das fehlende const zu verstehen gibst, dass du das objekt aendern wirst. genau das darfst du aber bei einem konstanten objekt (const Rectangle meinrechteck) nicht.

    5.)
    return bedeutet, dass die funktion einen wert zurueckgibt.
    alle diese funktionen mit dem return geben die werte der membervariablen (variablen des objektes) zurueck, damit man sie sich ansehen kann.

    6.)
    "Rectangle MyRectangle" ist der variablenname, so aehnlich wie bei "int meinezahl"

    ich bin nicht besondert gut in C++, also kann es gut sein, dass ich einiges nicht oder falsch erklaert habe.
    du solltest wirklich nochmal ein oder zwei lektionen zurueckgehen, das buch langsam lesen und jeden satz verstehen.



  • 👍 Es ist 7:37 in der Früh, freut mich echt sogar um diese Zeit solche super Antworten zu bekommen. Habe heute nach dem Feier bis 6 in C++ solche Programme versucht, nicht verstanden und hier gefragt.. Danke nochmal 😃

    Wie ihr schon mit empfohlen habt, werde ich von neu beginnen. mit allem. Ich werde überall Notizen machen. Ich denke das wird sich etwas bringen.

    Eine frage hätte ich noch. Wie habt ihr die Sprache gelernt? Am Anfang vom Buch, dannach Tutorials?

    Wünsche euch viel Erfolg im Jahr 2006 :xmas1:

    Mit freundlichen Grüßen
    technology



  • vorher PHP gekonnt, dann ein grottenschlechtes C++ buch bekommen und die sache liegen lassen, dann mit online tutorials angefangen mich durchzubeissen. die grundlage PHP (hat auch geschweifte klammern) und programmieren generell hat viel zum verstaendnis geholfen.



  • das beispiel ist müll und du solltest das buch noch heute wegwerfen. sag aber vorher noch die isbn-nummer oder sowas, damit auf meiner homepage vor dem buch warnen kann.



  • volkard schrieb:

    sag aber vorher noch die isbn-nummer oder sowas, damit auf meiner homepage vor dem buch warnen kann.

    😃 😃 😃

    technology schrieb:

    Eine frage hätte ich noch. Wie habt ihr die Sprache gelernt? Am Anfang vom Buch, dannach Tutorials?

    Schritt für Schritt 😉 und es kommmt immer noch ein Schritt dazu 🙄

    Zuerst wie auch rackwitz mit php angefangen und es ungefähr 1 Jahr lang gemacht.
    Danach war PHP irgendwie tote Hose und ich fing mit C++ an.
    Eine einfach Buch gekauft, jedes Kapitel mind. 2 mal durchgelesen, manche sogar 3 mal und dann eine "Buchstufe" höher gegangen und nochmal das selbe 🙂

    Von Tutorials ausm Internet würde Ich dir am Anfang abraten. Dann sitzt du ja dauernt vorm Bildschirm und andere Sachen am PC können dich ablenken.

    Mit einem Buch kannst du schön im Bett liegen/sitzen und es konzentriert durchlesen.

    👍



  • volkard schrieb:

    das beispiel ist müll und du solltest das buch noch heute wegwerfen. sag aber vorher noch die isbn-nummer oder sowas, damit auf meiner homepage vor dem buch warnen kann.

    siehe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-131191.html

    scheint Jetzt lerne ich C++ (Start ohne Vorwissen) von Jesse Liberty zu sein. Verlag ist Markt + Technik, was dann schon mal einen leicht skeptischen Blick hervorrufen sollte. Und weil das Bild so schoen ist und du nach der ISBN fragtest, hier nochmal direkt:
    Jetzt lerne ich C++ | ISBN: 3827268303

    MfG


Anmelden zum Antworten