第五周 项目三-多文件组织多个类

main.cpp

#include <iostream>
#include "header.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;
}

header.cpp

#include <iostream>
#include <cmath>
#include "header.h"
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;
}

header.h

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED

class CPoint
{
private:
  double x;
  double y;
public:
  CPoint(double xx=0,double yy=0);
  double distance1(CPoint p) const;
  void input();
  void output();
};

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 // HEADER_H_INCLUDED

运行结果:

学习心得:

好好学习 天天向上

时间: 2024-10-22 01:47:05

第五周 项目三-多文件组织多个类的相关文章

第五周项目3-用多文件组织多个类的程序

将项目2用"一个项目多个文件"的方式实现,其中两个类的声明放在同一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件.体会这样安排的优点. class.h #ifndef CLASS_H_INCLUDED #define CLASS_H_INCLUDED class CPoint { private: double x; // 横坐标 double y; // 纵坐标 public: CPoint(double xx=0,double yy=0); double

第六周项目三-人数不定的工资类

[项目3-人数不定的工资类] 设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出. 提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用.将salary声明为指针类型的成员,通过动态分配空间,分配正好大小的空间存储数据. class Salary { public: Salary(int n);  //n为职工人数,初始化时完成空

第5周项目3-用多文件组织多个类的程序-对象作数组成员

/* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2015年 4 月 5 日 * 版 本 号:v1.0 * * 问题描述: 本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点. 利用设计的三角形类,输入三角形的三个顶点,求出其面积,周长,并判断其是否为直角三角形和等腰三角形. 将项目2用"一个项目多个文件"的方式实现,其中两个类

第八周 项目三 (1)分数类中的运算符重载

[项目3-分数类中的运算符重载] (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算.可以在第4周分数类代码的基础上开始工作. [cpp] view plaincopyprint? class CFraction { private: int nume;  // 分子 int deno;  // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及用于测试的main()函数 /* *Copyright (c)2

第六周项目三——人数不定的工资类

设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出. 提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用.将salary声明为指针类型的成员,通过动态分配空间,分配正好大小的空间存储数据. class Salary { public: Salary(int n); //n为职工人数,初始化时完成空间的分配 ~Salary();

第9周项目三-人数不定的工资类

代码: /* *Copyright (c) 2016, 烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:main.cpp; *作 者:岳成艳: *完成日期:2015年5月6号: *版 本 号:vc++6.0: * *问题描述:设计一个工资类,其中数据成员包括职工人数number和number个职工的工资salary,要求输入职工工资并逐个输出 ,要求将salary声明为指针类型的成员,通过动态分配空间,分配大小正好的空间存储数据. . *程序输入:员工工资:

HeyWeGo第五周项目总结

HeyWeGo第五周项目总结 项目内容 使用java程序开发一款扫雷游戏 游戏项目规划: 确定游戏中方块格子的个数 确定游戏中地雷的个数(初始10个),完成布雷 计算每个方块周围的雷数,在方块周围本身没有地雷的情况下,统计周围地雷的个数 若周围没有地雷则翻开周围的空白方格,直到周围有附近地雷的格子 设计一个检测是否挖完所有的雷的方法 设定左键点击为翻开 设定右键点开为标记 项目进展 整合并调试修改各队员分段编写的代码,游戏已实现,已经修补上周不能右键标记部分. 完整代码 import java.

十一周 项目三 点类

#include<iostream> #include<Cmath> using namespace std; class Point //定义坐标点类 { public: Point():x(0),y(0) {}; Point(double x0, double y0):x(x0),y(y0){}; void PrintPoint(); //输出点的信息 double getx() { return x; } double gety() { return y; } protect

十五周 项目1 工资数据的输入

/* 输入员工工资1000-10000之间,并按从大到小输出*/ #include <iostream> using namespace std; int main( ) { double salarys[500]; int n=0; double t; while(cin>>salarys[n]) { n++; //从cin流读取数据 } //将n名职工的工资排序后输出 for(int i=0; i<n; i++) for(int j=0; j<n-1; j++) {