//  Objectif : Définition d'un segment caractérisé par ses deux extrémités.

#include "Point.h"



class SegmentComposant {
public:		// Constructeurs

    SegmentComposant(const Point &p1, const Point &p2);
	// Initialiser le segment à partir de ses deux extrémités p1 et p2
	//
	//@ ensures e1() == p1;		// e1 initialisé
	//@ ensures e2() == p2;		// e2 initialisé
	//@ ensures &e1() != &p1;	// e1 différent de p1
	//@ ensures &e2() != &p2;	// e1 différent de p2

public:		// Requêtes

    const Point & e1() const;
	// une extrémité du segment

    const Point & e2() const;
	// l'autre extrémité du segment

    double longueur() const;
	// longueur du segment

public:		// Commandes

    void translater(double dx, double dy);
	    // Translater le segment de dx et dy suivant l'axe des X et l'axe
	    // des Y

    void afficher(std::ostream &out = std::cout) const;
	    // Afficher sur le flot de sortie out.

private:		// Caractéristiques de classes

    Point _e1, _e2;	// les deux extrémités du segment

};

inline std::ostream & operator << (std::ostream & out, const SegmentComposant &s)
{
    s.afficher(out);
    return out;
}

