设计如下类:
1) 建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,
内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个
三角形。
2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制
3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,
面积显示。
#include<iostream>
#include<cmath>
using namespace std;
class point
{
private:
int x;
int y;
public:
point();//无参数的构造函数
point(int _x,int _y):x(_x),y(_y){}//有参数的构造函数
~point() {};//注意!加{}才是定义,声明完必须定义,若此处无{},类外也没定义,则报错
point(point& a) { x = a.x; y = a.y; };//拷贝构造函数
int getx()//建立函数目的:提供接口,可以访问私有变量
{
return x;
}
int gety()
{
return y;
}
//friend class line;
// 老师建议少使用友元
};
class line
{
private:
point p1,p2;
public:
line(): p1(0, 0), p2(0, 0){}
line(point p11,point p12):p1(p11),p2(p12){}
~line() {};//析构函数
line(line& l) { p1 = l.p1; p2 = l.p2; };
double length();//求线段长度
//friend class triangle;
};
class triangle
{
private:
line l1,l2, l3;
public:
triangle(int l1=0,int l2=0,int l3=0);
triangle(line a, line b, line c) :l1(a), l2(b), l3(c) {}
~triangle() {};
void judje();//判断是否是三角形
void area();//算面积
};
point::point()
{
x = 1;
y = 1;
}
double line::length()
{
double l;
int x1,y1, x2, y2;
x1 = p1.getx();
y1 = p1.gety();
x2 = p2.getx();
y2 = p2.gety();
l = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
return l;
}
void triangle::judje()//判断能否构成三角形
{
if ((l1.length() + l2.length() > l3.length()) && (l1.length() + l3.length() > l2.length())
&& (l2.length() + l3.length() > l1.length()))//l1.length后面如果没有(),不是函数
{
cout << "可以构成三角形"<<endl;
area();
}
else
cout << "不能构成三角形" << endl;
}
void triangle::area()
{
double p,s;
p = (l1.length() + l2.length() + l3.length())/2;//海伦公式算面积
s = sqrt(p * (p - l1.length()) * (p - l2.length()) * (p - l3.length()));
cout << "三角形面积为:" << s << endl;
}
int main()
{
int x1, y1;
cout << "A点坐标:";
cin >> x1>> y1;
point p1(x1, y1);
cout << "B点坐标:";
cin >> x1 >> y1;
point p2(x1, y1);
cout << "C点坐标:";
cin >> x1 >> y1;
point p3(x1, y1);
line l1(p1, p2);
line l2(p1, p3);
line l3(p2, p3);
l1.length();
l2.length();
l3.length();
triangle t(l1,l2,l3);
t.judje();
return 0;
}