/**
 * auteurs          : Michel Landschoot
 * mail             : direction@landsnet.com
 * date de création : 2013-12-21
 * description      : classe abstraite de base d'une hiérarchie de figures
 */

#ifndef FIGUREH
#define FIGUREH
#include <iostream>
#include "point.hpp"

using namespace std;

// classe abstraite de base
class Figure {

public:
    /**
     * Il est impossible de rendre les constructeurs de copie virtuels.
     * Par suite, une fonction virtuelle de copy est définie qui permet
     * la simulation de constructeurs virtuels.
     */
    virtual Figure * copy() = 0;

    virtual ~Figure() { };

	virtual void deplacer(const Point & trans) = 0;
	virtual void dessiner(ostream & os = cout) const = 0;
    virtual void afficher(ostream & os) const = 0;

    virtual double surface() const = 0;

	bool operator== (const Figure & f) const
	{
	    return (this == &f);
    }

    friend ostream & operator<< (ostream & os, const Figure & figure)
    {
        figure.afficher(os);
        return os;
    }
};
#endif
