回想Engineer类的数据成员,有眼镜、背包等。某Engineer的眼镜、背包,是Glass、Bag类的对象。类中的数据成员,其类型可以是简单类型,也可以是类。通过这种方式,将某些类组合到另外的类中,当作其中的一个“部件”使用。
本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。

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

/*
* Copyright (c) 2015,烟台大学计算机学院
* All right reserved.
* 作者:邵帅
* 文件:Demo.cpp
* 完成时间:2015年04月08日
* 版本号:v1.0
*/
#include <iostream>
#include <cmath>
using namespace std;
class CPoint
{
private:double x;  // 横坐标double y;  // 纵坐标
public:CPoint(double xx=0,double yy=0);double distance1(CPoint p) const;   // 两点之间的距离void input();  //以x,y 形式输入坐标点void output(); //以(x,y) 形式输出坐标点
};
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; //三顶点
};
CPoint::CPoint(double xx,double yy):x(xx),y(yy) {};
double CPoint::distance1(CPoint p) const
{double s;s=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));return s;
}
void CPoint::input()
{char ch;cout<<"Please input the point(x,y):";while(1){cin>>x>>ch>>y;if (ch==',')break;cout<<"Wrong style,please input agein."<<endl;}
}
void CPoint::output()
{cout<<"("<<x<<", "<<y<<")"<<endl;
}
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)
{A=X;B=Y;C=Z;
}
float CTriangle::perimeter(void)//计算三角形的周长
{double s1,s2,s3;s1=A.distance1(B);s2=B.distance1(C);s3=C.distance1(A);return (s1+s2+s3);
}
float CTriangle::area(void)//计算并返回三角形的面积
{double p,s;double s1,s2,s3;s1=A.distance1(B);s2=B.distance1(C);s3=C.distance1(A);p=(s1+s2+s3)/2;s=sqrt(p*(p-s1)*(p-s2)*(p-s3));return s;
}
//以下来自贺老
bool CTriangle::isRightTriangle()//是否为直角三角形
{double a=B.distance1(C),b=C.distance1(A),c=A.distance1(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;elsereturn false;
}
bool CTriangle::isIsoscelesTriangle()//是否为等腰三角形
{double a=B.distance1(C),b=C.distance1(A),c=A.distance1(B);if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7))return true;elsereturn false;
}
int main() //测试数据,来自贺老
{CPoint X(2,5),Y(5,2),Z(7,8);CTriangle Tri1(X,Y,Z);  //定义三角形类的一个实例(对象)cout<<"该三角形的周长为:"<<Tri1.perimeter()<<",面积为:"<<Tri1.area()<<endl<<endl;cout<<"该三角形"<<(Tri1.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;cout<<"该三角形"<<(Tri1.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;return 0;
}

运行结果:

!判断是否构成直角三角形!

bool CTriangle::isRightTriangle()//是否为直角三角形
{double a=B.distance1(C),b=C.distance1(A),c=A.distance1(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;elsereturn false;
}

!判断是否构成等腰三角形!

bool CTriangle::isIsoscelesTriangle()//是否为等腰三角形
{double a=B.distance1(C),b=C.distance1(A),c=A.distance1(B);if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7))return true;elsereturn false;
}
@ Mayuko

转载于:https://www.cnblogs.com/mayuko/p/4567521.html

第五周项目2-对象作为数据成员相关推荐

  1. 第三周项目5-数组作数据成员

    设计一个工资类(Salary),其中类的数据成员如下: class Salary { private:double salarys[50]; //多人的工资int number; //实际人数 }; ...

  2. 第八周项目一-数组作数据成员(1)

     /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月17日*版 本 号: ...

  3. 第八周项目一-数组做数据成员(3)

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月19日*版 本 号:v1. ...

  4. 第八周项目一-数组作数据成员(2)

     /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月19日*版 本 号: ...

  5. [置顶] 第五周项目一构造函数————4)参数初始化表

    /* [项目1]设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化 * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsr ...

  6. 第五周 项目二 建立链栈算法库

    /* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第5周项目2--建立链栈算法库.cpp 作 者:孙仁圆 完成日期:2017年 ...

  7. python第五周项目答案_工作页python流程控制(第五周 ).doc_学小易找答案

    [单选题]Mary is ()hardworking than her sister, but she failed in the exam. (5.0分) [单选题]设a.b为float型变量,则以 ...

  8. 第六周上机项目2-对象作为数据成员.

    /* *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 . *All rights reserved. *作者:李家豪 *完成日期:2014年4月8日. *版本 ...

  9. 第五周项目四-长方柱型(2)

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年3月30日*版 本 号:v1. ...

最新文章

  1. jar中的类文件更新遇到的问题:请分析下原因呢
  2. ios 贝塞尔曲线 颜色填充_IOS 贝塞尔曲线(UIBezierPath)属性、方法整理
  3. 深入理解面向对象 -- 基于 JavaScript 实现
  4. UI自学宝典,完整UI学习线路图
  5. live555 源码分析:ServerMediaSession
  6. STM32中断优先级的管理(NVIC)
  7. 宿主不能访问本机虚拟机中的web服务器
  8. python分析数据走势_Python数据分析及可视化实例之个股走势预测(26)
  9. 职高计算机应用项目教程教案,高职院校计算机应用基础教学设计
  10. asp.net下ajax.ajaxMethod使用方法
  11. 第6章 人口城市化
  12. java awt image_JAVA;使用java.awt.Image的不稳定性
  13. 微贷网 Java_关于Java集合的小抄
  14. PDFLib9以上版本的去水印办法
  15. python读写音频文件小结
  16. API设计指南-RestAPI设计最佳实践
  17. Pytorch——Conv2d、conv2d
  18. 发送邮件到腾讯企业邮箱
  19. web.xml 3.0
  20. 旧金山州立大学计算机,旧金山州立大学(San-Francisco-State-University)_彬彬教育...

热门文章

  1. Windows 10系统安装JDK1.8与配置环境
  2. Agilent RF fundamentals (4)- Impedance match and distortions
  3. 【九章算法免费讲座第一期】转专业找CS工作的“打狗棒法”
  4. 操作数据库(对战小游戏)
  5. C++实现静态顺序表的增删查改以及初始化
  6. eclise配置tomcat出现服务Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4 and Java EE 5 Web modules...
  7. php连接mysql并读取数据
  8. MySQL使用裸设备
  9. ElasticSearch教程——自定义分词器(转学习使用)
  10. Linux下使用shell实现上传linux下某个目录下所有文件到ftp