```cpp
#include<iostream>
using namespace std;
#include<cmath>
#define PI 3.14159
class Point {
private:
double m_x = 0, m_y = 0;
public:
void setx(double x) {
m_x = x;
}
void sety(double y) {
m_y = y;
}
double getx() const { return m_x; }
double gety() const { return m_y; }
Point(double x = 0, double y = 0) : m_x(x), m_y(y) {
cout << "Constructor of Point" << endl;
}
Point(const Point& p) :m_x(p.m_x), m_y(p.m_y) {
cout << "Copy constructor of Point" << endl;
}
void getpoint() {
Point p;
p.getx();
p.gety();
cout<<"点的坐标为" <<"("<< p.getx() << "," << p.gety()<<")";
}
~Point() {
cout << "Destructor of Point" << endl;
}
};
class Circle {
Point m_center; double m_radius = 1.0;
public:
friend void distance(Circle& c1, Circle& c2);
void setRadius(double r ) {
m_radius = r;
}
double getRadius() {
return m_radius;
}
Circle(double r = 1, const Point& p = Point()) :m_center(p), m_radius(r) {
cout << "Constructor of Circle" << endl;
}
void setcenter(Point center) {
m_center = center;
}
Point getcenter() {
return m_center;
}
void circumference() {
Circle c;
cout << "周长为: "<<2 * PI * c.getRadius() << endl;
}
void area() {
Circle c;
cout << "面积为: " << PI * c.getRadius() * c.getRadius()<<endl;
}
~Circle() {
cout << "Destructor of Circle" << endl;
}
};
void distance(Circle& c1, Circle& c2) {
double x = (c1.getcenter().getx() - c2.getcenter().getx()) * (c1.getcenter().getx() - c2.getcenter().getx());
double y = (c2.getcenter().gety() - c1.getcenter().gety()) * (c2.getcenter().gety() - c1.getcenter().gety());
double distance1 = x + y;
cout << "两点间的距离为"<<sqrt(distance1) << endl;
}
int main()
{
Point b(1, 0);
b.getpoint();
Circle c1(3,Point(2,3));
c1.circumference();
c1.area();
Circle a(2, Point(1, 1));
distance(c1, a);
cout << "end" << endl;
return 0;
}