对象作为数据成员

#include <iostream>
#include <cmath>
using namespace std;
class Cpoint
{
public:
	Cpoint(double xx=0,double yy=0):x(xx),y(yy){};
	double Distancel(Cpoint p) const;    //两点之间的距离(一点是当前点,另一点为参数p)
	void input()
	{
		cout<<"输入坐标:";
		cin>>x>>y;
	}
private:
	double x; //横坐标
	double y; //纵坐标
};
double Cpoint::Distancel(Cpoint p) const
{
	//将(x-p.x)更改为(this->x-p.x)可以更便于理解,d是当前点*this和参数给出的点p间的距离
	double d=sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
	return d;
}
class Ctriangle
{
public:
	Ctriangle(Cpoint &X,Cpoint &Y,Cpoint &Z):A(X),B(Y),C(Z){}
	void setTriangle(Cpoint &X,Cpoint &Y,Cpoint &Z);
	double perimeter();//计算周长
	double area();//计算并返回三角形面积
	bool isRightTriangle();//是否为直角三角形
	bool isIsoscelesTriangle();//是否为等腰三角形
private:
	Cpoint A,B,C;//三顶点
};
void Ctriangle::setTriangle(Cpoint &X,Cpoint &Y,Cpoint &Z)
{
	A=X;
	B=Y;
	C=Z;
}
double Ctriangle::perimeter()
{
	double d;
	d=B.Distancel(C)+C.Distancel(A)+A.Distancel(B);
	return d;
}
double Ctriangle::area()
{
	double a=B.Distancel(C),b=C.Distancel(A),c=A.Distancel(B);
	double s=(a+b+c)/2;
	return sqrt(s*(s-a)*(s-b)*(s-c));
}
bool Ctriangle::isRightTriangle()//是否为直角三角形  
{  
	double a=B.Distancel(C),b=C.Distancel(A),c=A.Distancel(B);  
	double max=a;  
	if(b>max) max=b;  
	if(c>max) max=c;  
	if(((max==a)&&(abs(a*a-b*b-c*c)<1e-7))||((max==b)&&(abs(b*b-a*a-c*c)<1e-7))||((max==c)&&(abs(c*c-b*b-a*a)<1e-7)))  
		return true;  
	else  
		return false;  
}  
bool Ctriangle::isIsoscelesTriangle() //是否为等腰三角形  
{  
	double a=B.Distancel(C),b=C.Distancel(A),c=A.Distancel(B);  
	if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7))  
		return true;  
	else  
		return false;  
}  
int main()
{
	Cpoint X,Y,Z;
	X.input();
	Y.input();
	Z.input();
	Ctriangle Q(X,Y,Z);
	cout<<"该三角形周长:"<<Q.perimeter()<<",面积:"<<Q.area()<<endl;
	cout<<"该三角形"<<(Q.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;  //比if判断更简洁
    cout<<"该三角形"<<(Q.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl; 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值