6-2对象作为数据成员
/*
* 作 者: 霍雨佳
* 完成日期: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对象作为数据成员相关推荐
- c++类对象公有数据成员访问
#include<iostream> using namespace std; class CDate {public:int Date_Year;int Date_Month;int D ...
- const成员函数、const类对象、mutable数据成员
1. const成员函数 只是告诉编译器,表明不修改类对象. 但是并不能阻止程序员可能做到的所有修改动作,比如对指针的修改,编译器可能无法检测到 2. 类体外定义的const成员函数,在定义和声明处都 ...
- java数据成员_Java基础教程之对象的方法与数据成员
在Java基础教程之从Hello World到面向对象一文中,我们初步了解了对象(object).对象中的数据成员表示对象的状态.对象可以执行方法,表示特定的动作. 此外,我们还了解了类(class) ...
- 04 c++ 类数据成员的地址和类对象数据成员的地址
2020年10月4日 1,类数据成员和类对象数据成员地址的区别 (1) 类定义是一种类型声明,存在于代码块中,并没有分配内存空间:对类的数据成员取地址,得到的是类的数据成员在类内的相对偏移量: (2) ...
- 对象数据成员的初始值
对象数据成员的初始值 对象的构造函数的作用是初始化类的成员变量,但是如果我们不显式定义构造函数,编译器就会给我们定义一个默认构造函数:这个默认构造函数中其实是什么都没有做的,如果这样,我们生成该类的对 ...
- Java基础02 方法与数据成员
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...
- 【C++面向对象】类的数据成员:绑定、布局和存取
一.数据成员的绑定(The binding of a data member) 先看一段代码: //某个头文件,从某处含入 extern float x;class Point3d { public: ...
- 常引用、常对象和对象的常成员
常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.我们经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改. 常引用的声明形式为:const 类型说明符 &引用名 ...
- 类静态数据成员的定义及初始化
#include <iostream> using namespace std; /* 在 C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有 对象共用.所以在所 ...
最新文章
- wxWidgets:wxTreeCtrl 示例
- 201521123052《Java程序设计》第7周学习总结
- jquery 里 $(this)的用法
- 【codevs1163】访问艺术馆
- 基于javaweb+springboot的在线购书系统网上书店图书商城(前台、后台)(java+Springboot+ssm+mysql+maven)
- 美文听力:别错过机会
- 模式识别属于计算机什么方面的应用,人工智能在模式识别方面的应用
- 多元线性回归案例(改)
- [转贴]电脑使用者的眼睛保护须知
- 修改未能正确启动的docker容器的配置文件
- 服务器操作系统查询命令,服务器操作系统查询命令
- java atlas mysql_jdbc连接atlas报错
- 波哥大BRT带来的启示
- Python爬虫爬取智联招聘(进阶版)
- hadoop问题集(1)
- 星环TranswarpInceptor通过waterdrop添加表,视图,函数和存储过程
- python 基础知识之(numpy、pandas、matplotlib、tensorflow)
- HMAC SHA512签名
- 百万格子的标签认领可以提高你在alexa的排名的格子
- ERROR: No matching distribution found for torch==1.2.0 解决方法