C++项目——对象作为数据成员

本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。

  提示:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类;(2)三角形类参考下面CTriangle类的声明;(3)充分利用CPoint类中已有的代码实现;(4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。

#include<iostream>
#include<math.h>
using namespace std;

class CPoint{
public:
	CPoint(float x,float y):xpoint(x),ypoint(y){}
	float pointdistance(CPoint p) const;
	float outputX() const;
	float outputY() const;
private:
	float xpoint;
	float ypoint;
};
float CPoint::pointdistance(CPoint p) const
{
	return sqrt(pow((p.xpoint-xpoint),2)+pow((p.ypoint-ypoint),2));
}
float CPoint::outputX() const
{
	return xpoint;
}
float CPoint::outputY() const
{
	return ypoint;
}

class CTriangle  
{  
public:  
  CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z){} //给出三点的构造函数  
  void setTriangle(CPoint &X,CPoint &Y,CPoint &Z);//  
  float perimeter(void);//计算三角形的周长  
  float area(void);//计算并返回三角形的面积  
  bool isRightTriangle(); //是否为直角三角形  
  bool isIsoscelesTriangle(); //是否为等腰三角形  
private:  
  CPoint A,B,C; //三顶点  
};  
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)
{
	A=X;
	B=Y;
	C=Z;
	cout<<"A: ("<<A.outputX()<<","<<A.outputY()<<")"<<endl;
	cout<<"B: ("<<B.outputX()<<","<<B.outputY()<<")"<<endl;
	cout<<"C: ("<<C.outputX()<<","<<C.outputY()<<")"<<endl;
}
float CTriangle::perimeter(void)
{
	float c=0;
	c=A.pointdistance(B)+A.pointdistance(C)+B.pointdistance(C);
	return c;
}
float CTriangle::area(void)
{
	float p,s;
	p=(A.pointdistance(B)+A.pointdistance(C)+B.pointdistance(C))/2;
	s=sqrt(p*(p-A.pointdistance(B))*(p-A.pointdistance(C))*(p-B.pointdistance(C)));
	return s;
}
bool CTriangle::isRightTriangle()
{
	float max,min[2],temp;
	temp=(A.pointdistance(B)>A.pointdistance(C))?A.pointdistance(B):A.pointdistance(C);
	min[0]=(A.pointdistance(B)>A.pointdistance(C))?A.pointdistance(C):A.pointdistance(B);
	max=(temp>B.pointdistance(C))?temp:B.pointdistance(C);
	min[1]=(temp>B.pointdistance(C))?B.pointdistance(C):temp;
	if(pow(max,2)-(pow(min[0],2)+pow(min[1],2))<1e-7)
		return true;
	else 
		return false;
}
bool CTriangle::isIsoscelesTriangle()
{
	if((A.pointdistance(B)==A.pointdistance(C))||(A.pointdistance(B)==B.pointdistance(C))||(A.pointdistance(C)==B.pointdistance(C)))
		return true;
	else 
		return false;
}

void main()
{
	CPoint X(0,0),Y(1,0),Z(0,1);
	CTriangle ct(X,Y,Z);
	ct.setTriangle(X,Y,Z);
	cout<<"output the perimeter of this triangle: c="<<ct.perimeter()<<endl;
	cout<<"output the area of this triangle: s="<<ct.area()<<endl;
	cout<<"the triangle is righttriangle: yes/no(1/0): "<<ct.isRightTriangle()<<endl;
	cout<<"the triangle is oscelestriangle: yes/no(1/0): "<<ct.isIsoscelesTriangle()<<endl;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值