题目:
定义点类(Point),数据成员是一个点的坐标double x,y;
定义线段类(Line),包括如下数据成员
static int num; //程序中创建的线段对象的个数
Point p1,p2; //线段的起点和终点
int color; //线段的颜色
写出main函数输出线段的长度,输出线段的详细信息(包括线段的起点和终点的坐标,线段的颜色和线段对象的个数)。
要求:1.所有数据成员必须定义为私有(private)
2.这两个类都要有有参和无参的构造函数和拷贝构造函数,main函数中测试这些构造函数
3.设计合理的类结构。
实现代码:
#include<iostream>
#include<cmath>
using namespace std;
class Point
{
private:
double x, y;
public:
Point();
Point(double x_, double y_);
void set(double x__, double y__);
double changdu( Point p);
double Getx() { return x; }
double Gety() { return y; }
void shuchu();
void set_point(Point& p)
{
x = p.x;
y = p.y;
}
};
Point::Point()
{
x = 0; y = 0;
}
Point::Point(double x_, double y_)
{
x = x_; y = y_;
}
void Point::set(double x__, double y__)
{
x = x__;
y = y__;
}
double Point::changdu( Point p)
{
double changdu;
changdu = sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
return changdu;
}
void Point::shuchu()
{
cout << x << "," << y << endl;
}
class Line
{
private:
static int num;
Point p1, p2;
int color;
public:
Line();
Line(double p1x, double p1y, double p2x, double p2y, int colour);
Line(Point p0, Point p0_, int colour);
void set_line();
void set_line(double p1x, double p1y, double p2x, double p2y);
void set_line(Point p1__, Point p2__);
Line(Line &l)
{
p1.set_point(l.p1);
p2.set_point(l.p2);
color = l.color;
num++;
}
void display();
~Line()
{
num--;
}
};
Line::Line()
:p1(0, 0), p2(0,0), color(0)
{
num++;
}
void Line::set_line()
{
p1.set(0, 0);
p2.set(0, 0);
num++;
}
Line::Line(double p1x, double p1y, double p2x, double p2y, int colour)
:p1(p1x,p1y),p2(p2x,p2y),color(colour)
{
num++;
}
void Line::set_line(double p1x, double p1y, double p2x, double p2y)
{
p1.set(p1x, p1y);
p2.set(p2x, p2y);
}
void Line::set_line(Point p1__, Point p2__)
{
p1 = p1__;
p2 = p2__;
}
Line::Line(Point p1, Point p2, int colour)
:p1(p1), p2(p2), color(colour)
{
num++;
}
void Line::display()
{
cout << "起点:";
p1.shuchu();
cout << "终点:";
p2.shuchu();
cout << "颜色:" << color << endl;
double temp = p1.changdu(p2);
cout << "长度:" << temp << endl;
cout << "线段个数:" <<Line::num << endl;
}
int Line::num = 0;
int main()
{
Line l1(10, 20, 30, 40, 5);
l1.display();//1
Point p1(23, 56), p2(14, 37);
Line l2(p1, p2, 50);
l2.display();//2
l2.set_line(p1, p2);
l2.display();//2
Line l3(l1);
l3.display();//3
Line l4;
l4.display();//4
l4.set_line(10, 20, 30, 40);
l4.display();//4
return 0;
}