Volevo chiedere agli esperti...cosa ne pensate della mia classe Point? Manca qualcosa? C'è qualcosa da modificare?

Comunque ho un problemino. Vorrei fornire assieme alla classe alcune funzioni di utilità non appartenenti ad essa. Ma così come le ho messe mi danno errore! (non-member function 'double getDistance(const Point&)' cannot have cv-qualifier). Che errore è? Che errore faccio io?
Le funzioni servono a calcolare la distanza tra due oggetti qualsiasi della classe e quindi ovviamente non possono fare parte della classe stessa! (Lo so che è una complicazione ma mi sembra più "elegante" calcolare la distanza tra due punti piuttosto che la distanza tra un punto e un'altro, anche se alla fine il risultato è lo stesso).
Non avete capito niente?xD
Rispiego: preferisco fare come sto tentando di fare piuttosto che creare una funzione del tipo

double getDistance(const Point &P2) const
{
return sqrt(pow(x - P2.x, 2) + pow(y - P2.y, 2));
}

Lo trovo più "elegante". Sto facendo una cazzata?!xD.

codice:
#ifndef POINT_H
#define POINT_H

#include <iostream>
using std::ostream;
using std::istream;

class Point
{
	friend ostream &operator<<(ostream &, const Point &);
	friend istream &operator>>(istream &, Point &);
	
public:
	Point();
	Point(const double &, const double &);
	~Point();
	
	void setX(const double &);
	void setY(const double &);
	double getX() const;
	double getY() const;
	
private:
	double x;
	double y;
};

double getDistance(const Point &) const;
double getDistance(const Point &, const Point &) const;

#endif
codice:
#include "point.h"

#include <iostream>
using std::endl;
using std::ostream;
using std::istream;

#include <cmath>
using std::pow;
using std::sqrt;

ostream &operator<<(ostream &output, const Point &point)
{
	output << point.x << ' ' << point.y;
	
	return output;
}

istream &operator>>(istream &input, Point &point)
{
	input >> point.x;
	input.ignore();
	input >> point.y;
	
	return input;
}

Point::Point()
{
	setX(0);
	setY(0);
}

Point::Point(const double &X, const double &Y)
{
	setX(X);
	setY(Y);
}

Point::~Point()
{
	;
}

void Point::setX(const double &X)
{
	x = X;
}

void Point::setY(const double &Y)
{
	y = Y;
}

double Point::getX() const
{
	return x;
}

double Point::getY() const
{
	return y;
}

double getDistance(const Point &P1) const
{
	return sqrt(pow(P1.getX(), 2) + pow(P1.getY(), 2));
}

double getDistance(const Point &P1, const Point &P2) const
{
	return sqrt(pow(P1.getX() - P2.getX(), 2) + pow(P1.getY() - P2.getY(), 2));
}