C++学习日记之对象作为数据成员
来源:互联网 发布:mac上好用的邮箱软件 编辑:程序博客网 时间:2024/06/04 01:24
项目:
本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。 提示:(1)这个问题需要用到两个类,顶点类为CPoint类;(2)三角形类参考下面CTriangle类的声明;(3)充分利用CPoint类中已有的代码实现;(4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。
代码如下:
#include<iostream>#include<cmath>class CPoint{private: double x; // 横坐标 double y; // 纵坐标public: CPoint(double xx=0,double yy=0); double Distance1(CPoint p) const; // 两点之间的距离(一点是当前点,另一点为参数p) double Distance0() const; // 到原点的距离 CPoint SymmetricAxis(char style) const;//style取'x','y'和'o'分别表示按x轴, y轴, 原点对称 void input(); //以x,y 形式输入坐标点 void output(); //以(x,y) 形式输出坐标点};CPoint::CPoint(double xx,double yy){x=xx;y=yy;}double CPoint::Distance1(CPoint p) const {return sqrt((this->x-p.x)*(this->x-p.x)+(p.y-this->y)*(p.y-this->y));}double CPoint::Distance0() const{return sqrt(x*x+y*y);}CPoint CPoint::SymmetricAxis( char style) const{CPoint point;switch (style){case 'x': point.y=-y;point.x=x;return point;case 'y':point.x=-x;point.y=y;return point;case 'o':point.x=-x;point.y=-y;return point;default:std::cout << "input error!";break;}}void CPoint::input(){char ch; std::cin >>x >>ch >>y;if(ch!=',')std::cout << "输入格式错误!";}void CPoint::output(){std::cout<<"("<<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; //三顶点 }; void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z){A=X;B=Y;C=Z;}float CTriangle::perimeter(){return (A.Distance1(B)+A.Distance1(C)+B.Distance1(C));}float CTriangle::area(){ double a=B.Distance1(C),b=C.Distance1(A),c=A.Distance1(B); double s = (a + b + c) / 2; return sqrt(s * (s - a) * (s - b) * (s - c)); }bool CTriangle::isRightTriangle(){double a=C.Distance1(B),b=A.Distance1(C),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)&&(b*b-a*a-c*c)<1e-7||(max==c)&&(c*c-b*b-a*a))return true;elsereturn false;}bool CTriangle::isIsoscelesTriangle(){double a=C.Distance1(B),b=A.Distance1(C),c=A.Distance1(B);if(abs(a-b)<1e-7||abs(b-c)<1e-7||abs(a-c)<1e-7)return true;else return false;}int main(){CPoint X(1,0),Y(5,0),Z(1,8); CTriangle Tri1(X,Y,Z); //定义三角形类的一个实例(对象) std::cout<<"该三角形的周长为:"<<Tri1.perimeter()<<",面积为:"<<Tri1.area()<<std::endl<<std::endl; std::cout<<"该三角形"<<(Tri1.isRightTriangle()?"是":"不是")<<"直角三角形"<<std::endl; std::cout<<"该三角形"<<(Tri1.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<std::endl; return 0; }
运行结果如下:
0 0
- C++学习日记之对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 第五周项目二之对象作为数据成员
- 项目2 - 对象作为数据成员
- 6-2对象作为数据成员
- 六.2对象作为数据成员
- Best Time to Buy and Sell Stock II -- LeetCode
- dll和exe的共享节------多进程共享dll/exe全局变量
- 火星坐标和正常坐标之间的转换
- 我们为什么而活
- Debian GUN/Linux Desktop grap语言配置 [大三四八九月实习]
- C++学习日记之对象作为数据成员
- 谈谈android反编译和防止反编译的方法
- SVN 文件已锁定解决方法
- JavaScript 全局函数
- 空指针异常,可自己找不到问题的所在,谁能帮下我?
- Remove Duplicates from Sorted List
- JSP自定义标签开发入门
- Wifi共享精灵2014.3.17版怎么样?
- R语言之作者合作网络jaccard系数及余弦相似性实现篇