| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 
 |  
#include <iostream>
#include <cmath>
using namespace std;
 
enum Pavillon { JollyRogers, CompagnieDuSenegal, CompagnieDOstende };
 
enum Etat { Intact, Endommage, Coule };
 
int sq(int x)
{
  return x*x;
}
 
class Coordonnees
{
public:
  Coordonnees(int un_x, int un_y) : x_(un_x), y_(un_y) {}
  int x() const {
    return x_;
  }
  int y() const {
    return y_;
  }
  void operator+=(Coordonnees const& autre); 
private:
  int x_;
  int y_;
};
 
class Navire
{
private:
	Coordonnees position_;
protected:
	Pavillon pavillon_;
	Etat etat_;
public:
	Navire(int x, int y, Pavillon p) :
		position_(x, y), 
		pavillon_(p), 
		etat_(Etat::Intact) {};
	Coordonnees position() const { return position_;  }
	void avancer(int de_x, int de_y) {
		position_ += Coordonnees(de_x, de_y);
	}
	void renflouer() { etat_ = Etat::Intact; }
	friend std::ostream& operator <<(std::ostream&, const Coordonnees&); 
	void afficher(ostream& sortie) const {
		sortie << " en " << position_
			   << " battant pavillon " << pavillon_
			   << ", " << etat_;
	}
};
ostream& operator<< (ostream& sortie, Coordonnees const& c) {
	sortie << "(" << c.x() << ", " << c.y() << ")";
	return sortie;
} | 
Partager