Übung Hilfe



  • Hi! Ich habe ein riesen Problem, ich habe mehrere Übungsaufgaben, bei denen ich einfach nciht weiterkomme. Vielleicht kann mir ja jemand helfen. Ich werde einfach mal die erste posten:

    Es sei eine abstrakte Klasse GraphElem gegeben. Definieren Sie eine Klasse Rechteck, die öffentlich vom GrapElem
    erbt. Eine andere solche Klasse könnte Dreieck sein (wir betrachten hier aber nur GraphElem und Rechteck).
    GraphElem habe die Attribute
    float x0,y0
    und die Methoden
    void zeichne()
    und
    void verschiebe(float x, float y)
    In verschiebe() werde zeichne() aufgerufen. Rechteck habe als zusätzliches Attribut
    float hoehe und float breite.
    Die Klassenhierarchie soll auf Polymorphismus vorbereitet sein. So soll Rechteck die Methode verschiebe (...) von
    GraphElem unverändert erben, jedoch zeichnen () überschreiben. Z.B. soll ein Container mit zeigen auf GraphElem
    auch alle Nachfahren aufnehmen und diese konsistent zeichnen und verschieben können.
    a)
    Schreiben Sie die Klassendefinitionen der beiden Klassen, so daß ein Rechteck bei Anwendung der geerbten
    Methode verschiebe() richtig gezeichnet wird.
    Definieren Sie auch geeignete Konstruktoren, die über entsprechende Parameter optional die Attribute initialisieren
    und Destruktoren.
    Geben Sie die Implementierungen für die Konstruktoren an. Soweit für zeichne() und verschiebe() Implementierungen
    notwendig sind, können Sie die Blöcke durch {...} andeuten. Dasselbe gilt für die Destruktoren, soweit deren
    Implementierung nicht leer ist.



  • HI

    Was hast du denn schon ?
    Gib uns den ansatz und wir geben Ratschläge.
    Oder sag und warum du nicht auf einen Ansatz kommst. 😉



  • bisher hab ich:

    class GraphElem
    {
    public:
       GraphElem(float x, float y);
       ~GraphElem {}
       virtual void zeichne();
       void verschiebe(float x, float y);
    protected:
       float x0, y0;
    }
    
    GraphElem::GraphElem(float x, float y): x0(x), y0(y)
    {}
    
    void GraphElem::zeichne()
    {...}
    
    void GraphElem:: verschiebe(float x, float y)
    {...}
    
    class Rechteck : public GraphElem
    {
    public:
       Rechteck(float x, float y);
       ~Rechteck {}
       void zeichne(float x, float y);
    protected:
       float x1, y1;
    }
    
    Rechteck::Rechteck(float x, float y) <- dann ???
    
    void Rechteck::zeichne(float x, float y)
    

    so, mal schauen, was ihr dazu sagt.

    aber noch eine frage dazu oder allgemein:
    1)wann sind destruktoren virtuell zu deklarieren? sobald eine virtuelle methode in der klasse ist?
    2)wann benutzt man den konstruktor der basisklasse im konstr. der abgeleiteten klasse?



  • Hallo,

    ich bin der meinung die methode zeichne() der klasse GraphElem sollte abstrakt sein, da man ein element hat von dem nicht wirklich definiert ist wie es aussieht kann man es auch nicht zeichnen.

    class GraphElem
    {
    public:
       GraphElem(float x, float y);
       ~GraphElem {}
       virtual void zeichne()=0;  //<= abstrakt und dementsprechend keine implementierung
       void verschiebe(float x, float y);
    protected:
       float x0, y0;
    }
    

    Ein Rechteck muss mit 4 werten initialisiert werden, x und y wert des Punktes und dann die hoehe und breite (die nach der aufgaben stellung auch hoehe und breite genant werden sollen, x1 und y1 verwirt nur den leser). dann benutzt du die werte die dem konstruktor uebergeben werden welche den Punkt (also x und y) repraesentieren und übergibst sie dem konstruktor der basisklasse (GraphElem) und die beiden anderen speicherst du selbst ab.

    class Rechteck : public GraphElem
    {
    public:
       Rechteck(float x, float y, float h, float b);
       ~Rechteck {}
       void zeichne(float x, float y);
    protected:
       float hoehe, breite;
    }
    
    Rechteck::Rechteck(float x, float y, float h, float b){
       GraphElem(x,y);
       hoehe = h;
       breite = b;
    }
    

    desweiteren ist das eine sehr gaengige aufgabe fuer die w*****einlich tausende loesungen in buechern und im inet zu finden sind


Anmelden zum Antworten