C++第6周(春)项目3 用多文件组织多个类的程序

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接

【项目3-用多文件组织多个类的程序】
  将项目2用“一个项目多个文件”的方式实现,其中两个类的声明放在同一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优点。

  参考代码:

Geometry.h

#ifndef GEOMETRY_H_INCLUDED
#define GEOMETRY_H_INCLUDED

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);//
  double perimeter(void);//计算三角形的周长
  double area(void);//计算并返回三角形的面积
  bool isRightTriangle(); //是否为直角三角形
  bool isIsoscelesTriangle(); //是否为等腰三角形
private:
  CPoint A,B,C; //三顶点
};
#endif // GEOMETRY_H_INCLUDED

Geometry.cpp

#include <iostream>
#include"geometry.h"
#include <Cmath>
using namespace std;

CPoint::CPoint(double xx,double yy)
{
  x=xx;
  y=yy;
}

// 输入坐标点
void CPoint::input()
{
  char ch;
  cout<<"请输入坐标点(格式x,y ):";
  while(1)
  {
    cin>>x>>ch>>y;
    if (ch==',') break;
    cout<<"输入的数据格式不符合规范,请重新输入\n";
  }
}

// 输出坐标点
void CPoint::output()
{
  cout<<"("<<x<<", "<<y<<")"<<endl;
}

// 求两点之间的距离
double CPoint::distance1(CPoint p) const
{
  double d;
  d=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
  return d;
}

void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)
{
  A=X;
  B=Y;
  C=Z;
}

double CTriangle::perimeter(void)
{
  double a=B.distance1(C),b=C.distance1(A),c=A.distance1(B);
  return (a + b + c);
}

double CTriangle::area(void)
{
  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=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;
  else
    return 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;
  else
    return false;
}

Main.cpp

Main.cpp
#include <iostream>
#include"geometry.h"
using namespace std;

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;
}
china-pub | 亚马逊 | 京东
当当  | 豆瓣 
图灵社区  官方样章下载
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章分类目录(不定期更新)  ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
时间: 2024-08-04 05:54:57

C++第6周(春)项目3 用多文件组织多个类的程序的相关文章

C++第11周(春)项目1 - 存储班长信息的学生类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1 - 存储班长信息的学生类] class Stu //声明基类 { public: Stu(int n, string nam ); //基类构造函数 void display( ); //成员函数,输出基类数据成员 protected: //(*)访问权限为保护型的数据成员 int num; //学生学号 string name; /

C++第5周(春)项目3 对象数组操作长方柱类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-对象数组操作长方柱类] 编写基于对象的程序,求5个长方柱的体积和表面积.长方柱类Bulk的数据成员包括长(length).宽(width).高(heigth)等. 对照已经给出的代码,要做的工作及要求有: 需要你定义长方柱类 代码中已经给出由5个长方柱对象构成的对象数组b: B数组中的前3个对象b[0].b[1].b[2]直接参数初始

2013级C++第6周(春)项目——对象指针、const

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答 推荐"玻璃罩const"系列的三篇文章(http://blog.csdn.net/sxhelijian/article/details/7385683),掌握利用const完成数据保护. 1. 使用常对象--为共用数据加装一个名为const的玻璃罩: 2. 常(const)+ 对象 + 指针:玻璃罩到底保护哪一个:

2013级C++第11周(春)项目——通过继承拥有基类的资源

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 (注:本课资料由第9周直接到第11周,因为第10周是我校春假期,全校休课.春假,实际是五一.清明.端午打包一起休息,这亲戚的做法对按周安排活动的学校更好一些.) 第一部分 程序阅读 程序阅读1:  #include<iostream> using namespace std; class A { private: int x; protect

C++第13周(春)项目3 - 与圆心相连的直线

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3 - 与圆心相连的直线] 在项目1中定义的Point(点)类和Circle(圆)类基础上,设计一种方案,输出给定一点p与圆心相连成的直线与圆的两个交点. 提示: 参考解答: 方案1:用引用类型参数获得结果 #include <iostream> #include<Cmath> using namespace std; cl

2013级C++第5周(春)项目——用构造函数初始化

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答   有同学总结:老二说用数组法做给了我思路,真是有兄弟,不孤单.做了这道题才发现以前没用数组法做的那个判断第几天的程序结果存在错误. 我评论:每个人身边都有一帮子兄弟.靠兄弟,就不用靠老师.兄弟总在身边,弟兄们一起长大! 还有,实践中感受到的,就是真正学习到的.在学习中,只有将直接的体验与老师的讲解.看过的书交融起来,才能真

2013级C++第13周(春)项目——继承的进一步话题与GUI应用开发

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 程序阅读:阅读下面类的定义,请说出在测试函数中不同情况的调用产生的结果 #include <iostream> using namespace std; class A { protected: int a,b; public: A(int aa, int bb):a(aa), b(bb) {} void printA() { co

C++第15周(春)项目1 - 工资数据的输入

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1-工资数据的输入](本程序中需要的相关文件,请到http://pan.baidu.com/s/1qW59HTi下载.) (1)输入若干职工的工资(1000-10000的数字),将这些数字按降序排序后输出. 输入样例:3736.98 9169.35 5595.57 1006 6631.19 5917.13 6076.89 9692.97

C++第5周(春)项目1 三角形类1

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1-三角形类的构造函数] 设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化,可以由下面的类声明开始,需要自己实现相关的成员函数,以及增加要求的构造函数 class Triangle { public: double perimeter();//计算三角形的周长 double area();//计算并返回三角形的面积 void