// geomFig.cpp

/*
 * Hier bitte Ihre FHA-E-Mail-Adresse angeben:
 *       ?????.?????@stud.fh-aargau.ch
 */

#include <iostream>
using namespace std;


class Shape {
  double x, y;
public:
  Shape(double x, double y) {
    setX(x);
    setY(y);
    cout << "Shape() called" << endl;
  }

  double getX() const  { return x; }
  double getY() const  { return y; }
  void setX(double xx) { x = xx; }
  void setY(double yy) { y = yy; }

  void move(double dx, double dy) {
    x += dx;
    y += dy;
  }

  void print() const {
  	cout << '(' << x << ", " << y << ')';
  }
};


class Circle : public Shape {
  double radius;
public:
  Circle(double x, double y, double r);

  double getRadius() const { return radius; }

  bool setRadius(double r) {
    if (r >= 0) {
      radius = r;
      return true;
    }
    else return false;
  }

  void print() const;
};


// AUFGABE 2.a
// Korrigieren Sie die Definition des untenstehenden Circle-Konstruktors:
//   inline Circle::Circle(double x, double y, double r)
//   : x(xx), y(yy), radius(r) { }

// Korrekte Definition des Circle-Konstruktors:





// AUFGABE 2.b
// Schreiben Sie die fehlende Definition der Funktion print() der Klasse Circle.
// Die Funktion gibt den Mittelpunkt und den Radius eines Circle aus.






// Leiten Sie von der Klasse Shape die Klasse Rectangle und von dieser die
// Klasse Square ab. Der Konstruktor fuer Rectangle erhalte als Argumente den
// Koordinatenbezugspunkt (origin) in der linken oberen Ecke (positive x-Achse
// nach rechts, positive y-Achse nach unten) sowie Hoehe und Breite. Nutzen Sie
// geerbte Instanzvariablen.
// Definieren Sie einen angepassten Konstruktor fuer Square.
// Definieren Sie fuer beide Klassen eine print-Funktion.






// Realisieren Sie ein main mit einem Array, das drei Zeiger auf Shapes auf-
// weist. Die Zeiger sollen auf einen Circle, einen Rectangle und einen Square
// zeigen, die alle auf dem Heap angelegt wurden.
// Iterieren Sie ueber das Array und senden Sie via Zeiger die Funktion print
// an die Shapes (ohne eigene Casts!). Nehmen Sie ggf. noetige Aenderungen an
// print vor. Zerstoeren Sie am Schluss alle Objekte vom hoechsten zum niedrig-
// sten Index. Nehmen Sie auch hier noetige Ergaenzungen in den Klassen vor.






