/*
* 作    者: 霍雨佳
* 完成日期:2014 年4月1日
* 版 本 号:v1.0
* 问题描述:本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。
*           利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
* 样例输出:
* 问题分析:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类;
*          (2)三角形类参考下面CTriangle类的声明;
*          (3)充分利用CPoint类中已有的代码实现;
*          (4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。
*/
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
class CPoint
{
private:
double x;  // 横坐标
double y;  // 纵坐标
public:
CPoint(double xx=0,double yy=0):x(xx),y(yy) {};//构造函数初始化
double Distance1(CPoint p) const;   // 两点之间的距离(一点是当前点,另一点为参数p)
void input();  //以x,y 形式输入坐标点
void output(); //以(x,y) 形式输出坐标点
void judge(CPoint X,CPoint Y,CPoint Z);//判断三点是否在同一直线上
};
void CPoint::input()  //以x,y 形式输入坐标点
{
char c;
while(1)
{
cin>>x>>c>>y;
if(c!=',')
{
cout<<"输入格式有误,请重新输入"<<endl;
}
else
break;
}
x=x;
y=y;
}
void CPoint::output() //以(x,y) 形式输出坐标点
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
double CPoint::Distance1(CPoint p) const   // 两点之间的距离(一点是当前点,另一点为参数p)
{
double l;
l=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return l;
}
void CPoint::judge(CPoint X,CPoint Y,CPoint Z)//判断三点是否在同一直线上
{
double k,b;
k=(X.y-Y.y)/(X.x-Y.x);
b=X.y-X.x*k;
if(Z.y==(Z.x*k+b))
{
cout<<"三点在同一直线上不能构成三角形,退出"<<endl;
exit(1);
}
}
class CTriangle
{
public:
CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z) {} //给出三点的构造函数!!!!!!!!
CTriangle(double m=0,double n=0,double z=0):a(m),b(n),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; //三顶点
double a,b,c; //三条边
};
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)//给三角形三边赋值
{
double d1,d2,d3;
d1=X.Distance1(Y);
d2=Y.Distance1(Z);
d3=Z.Distance1(X);
a=d1;
b=d2;
c=d3;
}
float CTriangle::perimeter(void)//计算三角形的周长
{
int l;
l=a+b+c;
return l;
}
float CTriangle::area(void)//计算并返回三角形的面积
{
int s,p;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
bool CTriangle::isRightTriangle() //是否为直角三角形
{
double max;
bool f=0;
max=a;
if(max<b)
{
max=b;
}
if(max<c)
{
max=c;
}
if(max=a&&a*a==b*b+c*c)
{
f=1;
}
if(max=b&&b*b==a*a+c*c)
{
f=1;
}
if(max=c&&a*a+b*b==c*c)
{
f=1;
}
return f;
}
bool CTriangle::isIsoscelesTriangle() //是否为等腰三角形
{
bool p=0;
if(a==b||b==c||c==a)
{
p=1;
}
return p;
}
int main()
{
CPoint p,q,v,r;
CTriangle s;
double l,s1;
cout<<"请输入A B C三点的坐标x,y:"<<endl;
p.input();
q.input();
v.input();
cout<<"A B C三点的坐标分别为:"<<endl;
p.output();
q.output();
v.output();
s.setTriangle(p,q,v);
r.judge(p,q,v);
l=s.perimeter();
cout<<"三角形的周长为:"<<l<<endl;//计算三角形的周长
s1=s.area();//计算并返回三角形的面积
cout<<"三角形的面积为:"<<s1<<endl;
while(s.isRightTriangle())
{
cout<<"是直角三角形"<<endl;
break;
}
while(s.isIsoscelesTriangle())
{
cout<<"是等腰三角形"<<endl;
break;
}
cout<<endl;
return 0;
}

运行结果:

开始时忽略了三点在一条直线上的可能,现在也不够完美,

构不成就直接退出了继续努力,使其构不成时可循环输入

6-2对象作为数据成员相关推荐

  1. c++类对象公有数据成员访问

    #include<iostream> using namespace std; class CDate {public:int Date_Year;int Date_Month;int D ...

  2. const成员函数、const类对象、mutable数据成员

    1. const成员函数 只是告诉编译器,表明不修改类对象. 但是并不能阻止程序员可能做到的所有修改动作,比如对指针的修改,编译器可能无法检测到 2. 类体外定义的const成员函数,在定义和声明处都 ...

  3. java数据成员_Java基础教程之对象的方法与数据成员

    在Java基础教程之从Hello World到面向对象一文中,我们初步了解了对象(object).对象中的数据成员表示对象的状态.对象可以执行方法,表示特定的动作. 此外,我们还了解了类(class) ...

  4. 04 c++ 类数据成员的地址和类对象数据成员的地址

    2020年10月4日 1,类数据成员和类对象数据成员地址的区别 (1) 类定义是一种类型声明,存在于代码块中,并没有分配内存空间:对类的数据成员取地址,得到的是类的数据成员在类内的相对偏移量: (2) ...

  5. 对象数据成员的初始值

    对象数据成员的初始值 对象的构造函数的作用是初始化类的成员变量,但是如果我们不显式定义构造函数,编译器就会给我们定义一个默认构造函数:这个默认构造函数中其实是什么都没有做的,如果这样,我们生成该类的对 ...

  6. Java基础02 方法与数据成员

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...

  7. 【C++面向对象】类的数据成员:绑定、布局和存取

    一.数据成员的绑定(The binding of a data member) 先看一段代码: //某个头文件,从某处含入 extern float x;class Point3d { public: ...

  8. 常引用、常对象和对象的常成员

    常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.我们经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改. 常引用的声明形式为:const 类型说明符 &引用名 ...

  9. 类静态数据成员的定义及初始化

    #include <iostream> using namespace std; /* 在 C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有 对象共用.所以在所 ...

最新文章

  1. wxWidgets:wxTreeCtrl 示例
  2. 201521123052《Java程序设计》第7周学习总结
  3. jquery 里 $(this)的用法
  4. 【codevs1163】访问艺术馆
  5. 基于javaweb+springboot的在线购书系统网上书店图书商城(前台、后台)(java+Springboot+ssm+mysql+maven)
  6. 美文听力:别错过机会
  7. 模式识别属于计算机什么方面的应用,人工智能在模式识别方面的应用
  8. 多元线性回归案例(改)
  9. [转贴]电脑使用者的眼睛保护须知
  10. 修改未能正确启动的docker容器的配置文件
  11. 服务器操作系统查询命令,服务器操作系统查询命令
  12. java atlas mysql_jdbc连接atlas报错
  13. 波哥大BRT带来的启示
  14. Python爬虫爬取智联招聘(进阶版)
  15. hadoop问题集(1)
  16. 星环TranswarpInceptor通过waterdrop添加表,视图,函数和存储过程
  17. python 基础知识之(numpy、pandas、matplotlib、tensorflow)
  18. HMAC SHA512签名
  19. 百万格子的标签认领可以提高你在alexa的排名的格子
  20. ERROR: No matching distribution found for torch==1.2.0 解决方法

热门文章

  1. android学习:模拟微博看看界面
  2. 拯救者Y7000关闭的流程
  3. [精简]托福核心词汇100
  4. 《狂人日记》 词语解释 | 经典语录
  5. 算法的时间复杂度表示法(大O表示法)
  6. Bunny's plan
  7. java开发入门实验报告_Java实验二实验报告 20135108 李泽源
  8. 访问www.baidu.com经历了什么
  9. RTB 广告投放流程详解
  10. 金三银四求职季,程序员面试必备——编程语言篇