第五周项目2-对象作为数据成员

回想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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!

全世界只有3.14 % 的人关注了爆炸吧知识谷歌排名第一的编程语言时什么&#xff1f;毫无疑问&#xff1a;肯定是 Python。也难怪&#xff0c;作为大数据时代和人工智能时代的必备语言&#xff0c;Python 的优点太多了&#xff0c;语言简洁、易学、开发效率高、可移植性强......另…

android主动显示流程,Activity加载显示基本流程

本文章是基于Android源码6.0讲解Activity加载显示基本流程首先上一张图给大家一个直观的了解首先一个布局页面的加载是在Activity中的setContentView(R.layout.res)开始;我们就从Acitvity源码中的setContentView方法入手public void setContentView(LayoutRes int layoutResID)…

VIM之Project 项目管理工具

VIM是Linux和Unix下常用的文本编辑工具&#xff0c;在编写代码和阅读代码中经常使用。但VIM进行代码项目管理时&#xff0c;没有IDE集成开发工具方便&#xff0c;现在提供一个VIM插件Project&#xff0c;可以对代码项目进行简单的集中管理一、 下载安装1、 在 Vim 网站上下载最…

vue数组刷新_Vue数组更新方法

Vue的核心是数据与视图的双向绑定&#xff0c;当我们修改数组时&#xff0c;Vue会检测到数据变化&#xff0c;所以用v-for渲染的视图也会立即更新。Vue包含了一组观察数组变异的方法&#xff0c;使用他们改变数组也会触发视图更新。push()pop()shift()unshift()splice()sort()r…

python提供什么机制处理程序运行错误_浅谈Python异常处理机制

异常机制己经成为衡量一门编程语言是否成熟的标准之一&#xff0c;使用异常处理机制的 Python 程序有更好的容错性&#xff0c;更加健壮。 对于计算机程序而言&#xff0c;情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦&#xff01;就算程序没有错误&#xff0c;你…

WPF DataGrid 通过自定义表头模拟首行固定

WPF DataGrid 通过自定义表头模拟首行固定独立观察员 2021 年 9 月 25 日最近工作中要在 WPF 中做个表格&#xff0c;自然首选就是 DataGrid 控件了。问题是&#xff0c;UI 设计的表格是在首行有一个新增按钮&#xff0c;那一行样式和其它数据行是一样的&#xff0c;就在表头下…

python和C语言分别实现插入排序

python语言代码&#xff1a;代码1 defInsertSort(numbers,n):2 fori inrange(1,n):3 j i-14 tem numbers[i]5 whilenumbers[j]>tem andj>0:6 numbers[j1] numbers[j]7 j -18 else:9 numbers[j1] tem10 print"Onthe sort:",numbers11 12 a [9,8,7,6,5,4,3,2,1,0…

Windows用户安全小技巧

本文适用于具有管理员用户和标准用户的所有Windows系统&#xff0c;如Windows 2000以上的操作系统&#xff0c;UAC是Windows Vista以上版本的具有功能。新安装的Windows系统或者新购买的含有Windows系统计算机一开始都需要安装许多软件并需要设置较多的含有Windows安全或用户控…

根据url获取html源码,通过URL访问和获取html源代码

Uniform Resource Locator ,在Internet的WWW服务程序上用于指定信息位置的表示方法指定互联网或本地上(web服务中)的文件、对象资源 等&#xff0c;或者说它相当于一个互联网上资源的一个指针协议 主机 路径 资源http://www.itfuture.org/forum/index.jsp …

从网恋到失恋只需要一秒...

1 原来放下一个人如此简单...▼2 而且到现在衣服都没找到▼3 这东西叫糖醋液&#xff0c;实验室比例是&#xff1a;糖&#xff1a;醋&#xff1a;酒&#xff1a;水1&#xff1a;2&#xff1a;3&#xff1a;4▼4 老师&#xff1a;这孩子真有原则▼5 呵&#xff0c;绝交吧▼…

Log4net数据表

USE [ASPNETDB] GO /****** 对象: Table [dbo].[Log] 脚本日期: 12/21/2011 22:41:53 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Log]([ID] [int] IDENTITY(1,1) NOT NULL,[Date] [datetime] NOT NULL,[Threa…

go float64 比较_Go 每日一库之 plot

Go 每日一库之 plot简介本文介绍 Go 语言的一个非常强大、好用的绘图库——plot。plot内置了很多常用的组件&#xff0c;基本满足日常需求。同时&#xff0c;它也提供了定制化的接口&#xff0c;可以实现我们的个性化需求。plot主要用于将数据可视化&#xff0c;便于我们观察、…

大前端快闪:package.json文件知多少?

最近在公司某项目参与了一些前端工作&#xff0c;作为后端抠脚大汉&#xff0c;改点前端细节磕磕绊绊&#xff0c;改点大前端、工程化、HTTP交互倒也还能做到柳暗花明。于是打算用后端程序猿的视角记录一些{大前端}的知识快闪&#xff0c;也算是帮助读者构建完整的全栈技能体系…

大牛C++编程开发学习建议50条

2019独角兽企业重金招聘Python工程师标准>>> 每个从事C开发的朋友相信都能给后来者一些建议&#xff0c;但是真正为此进行大致总结的很少。本文就给出了网上流传的对C编程开发学习的50条建议&#xff0c;总结的还是相当不错的&#xff0c;编程学习者&#xff08;不仅…

JQuery函数在IE浏览器中测试的注意事项

这几天刚学JQuery&#xff0c;在测试hide&#xff0c;show&#xff0c;slideToggle函数的时候&#xff0c;在firefox浏览器都很正常&#xff0c;而在IE浏览器里面却出现一些动画异常。这些过渡效果快结束的时候&#xff0c;都出现了一些跳动的现象&#xff0c;例如我对一个段落…

html2canvas改成同步,html2canvas转为图片异步转同步问题(记录)

描述&#xff1a;最近使用html2canvas插件截取页面上指定dom为图片&#xff0c;然后将生成的图片替换页面上的dom后&#xff0c;将替换后的页面内容保存至数据库&#xff0c;结果保存的是保存前的页面&#xff0c;初步判定是html2canvas的异步执行造成的。参考了两篇博文&#…

杨辉再发声明:没有及时交流工作进展,深表歉意

全世界只有3.14 % 的人关注了爆炸吧知识pixabay.com编者按加州大学付向东教授实名举报中科院上海神经所杨辉事件在过去一周成为学术界讨论的热点话题。付向东称自己2018年在神经所做学术报告后&#xff0c;杨辉重复其实验却未告知并抢发文章。杨辉7月3日发表声明&#xff0c;称…

fedora12下pppoe服务器的搭建

1. 查看系统上是否安装了pppoe服务器软件[rootlocalhost ~]# rpm -qa | grep pppoerp-pppoe-3.10-6.fc12.i686若显示以上信息则已经安装了pppoe软件&#xff0c;若无信息则首先安装pppoe软件[rootlocalhost ~]# yum install pppoe2. 配置系统支持IP转发[rootlocalhost ~]# vim …

z变换公式表_如何使用标准正态分布表?

正态分布这个概念在统计学中很常见&#xff0c;在做与正态分布有关计算的时候经常会用到标准正态分布表。如果知道一个数值的标准分数即z-score&#xff0c;就可以非常便捷地在标准正态分布表中查到该标准分数对应的概率值。任何数值&#xff0c;只要符合正态分布的规律&#x…

android 钢琴识别音阶对错_Sans钢琴音阶手机版|Sans钢琴音阶安卓版下载 v1.4 - 跑跑车安卓网...

Sans钢琴音阶游戏是一款有趣的音乐节奏类手机游戏&#xff0c;sans经典角色还原&#xff0c;融入闯关游戏元素&#xff0c;丰富的玩法&#xff0c;赶快来下载体验吧。游戏介绍Sans钢琴音阶游戏是一款拥有着大量不同类型游戏歌曲各种不一样游戏玩法的闯关类型音乐游戏&#xff0…