第五周 项目一-体验成员函数

问题

设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等。在设计中,由于求距离、求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成员被无意更改。

代码

#include <iostream>
#include <Cmath>
using namespace std;
class CPoint
{
private:
  double x;  // 横坐标
  double y;  // 纵坐标
public:
  CPoint(double xx=0,double yy=0);
  double Distance1(CPoint p) const;   // 两点之间的距离
  double Distance0() const;          // 到原点的距离
  CPoint SymmetricAxis(char style) const;   // 返回对称点
  void input();  //以x,y 形式输入坐标点
  void output(); //以(x,y) 形式输出坐标点
};
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;
}
// 求点到原点的距离
double CPoint::Distance0() const
{
  double d;
  d=sqrt(x*x+y*y);
  return d;
}

// 求对称点, style取'x','y'和'o'分别表示按x轴, y轴, 原点对称
CPoint CPoint::SymmetricAxis(char style) const
{
  CPoint p(this->x,this->y);//用复制构造函数时,写作p(*this)
  switch(style)
  {
  case 'x':
    p.y=-y; break;
  case 'y':
    p.x=-x; break;
  case 'o':
    p.x=-x;p.y=-y;
  }
  return p;
}

int main( )
{
  double distance;
  CPoint p1,p2,p;
  cout<<"第1个点p1,";
  p1.input();
  cout<<"第2个点p2,";
  p2.input();
  distance=p1.Distance1(p2);
  cout<<"两点的距离为:"<<distance<<endl;
  distance=p1.Distance0();
  cout<<"p1到原点的距离为:"<<distance<<endl;
  p=p1.SymmetricAxis('x');
  cout<<"p1关于x轴的对称点为:";
  p.output();
  p=p1.SymmetricAxis('y');
  cout<<"p1关于y轴的对称点为:";
  p.output();
  p=p1.SymmetricAxis('o');
  cout<<"p1关于原点的对称点为:";
  p.output();
  return 0;
}

运行结果:

知识点总结:

可以不写const,并没有改变初始值,写上不容易出错,减少脑力消耗。

学习心得:

好好学习 天天向上

时间: 2024-10-09 20:14:32

第五周 项目一-体验成员函数的相关文章

第五周项目4-静态成员应用

设计含有静态数据成员和成员函数的Time类.静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是"影响全局"的设置,适合作为类中的静态数据成员. /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:Demo.cpp * 完成时间:2015年04月08日 * 版本号:v1.0 */ #include <iost

HeyWeGo第五周项目总结

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

十五周 项目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++) {

条目五《尽量使用区间成员函数代替它们的单元素兄弟》

条目五<尽量使用区间成员函数代替它们的单元素兄弟> ** assign成员函数 主要是用于赋值,不像operator=只能拷贝一个同类型的容器,assign函数可以是赋值新的元素**. 对所有标准序列容器(vector,string,deque和list)都有效.无论何时你必须完全代替一个容器 的内容,你就应该想到赋值.如果你只是拷贝一个容器到另一个同类型的容器,operator=就是选择的赋值函数,但当想要给一个容器完全的新数据集时,assign就可以利用,但operator=做不了 这是在

第五周项目1-体验常成员函数

设计平面坐标点类,计算两点之间距离.到原点距离.关于坐标轴和原点的对称点等.在设计中,由于求距离.求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成员被无意更改. /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:Demo.cpp * 完成时间:2015年04月08日 * 版本号:v1.0 */ #include <iostream> #include <

第五周项目四 静态成员应用

[项目4-静态成员应用] 设计含有静态数据成员和成员函数的Time类.静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是"影响全局"的设置,适合作为类中的静态数据成员. [cpp] view plaincopyprint? class Time{ public: Time(int=0,int=0,int=0); void show_time( ); //根据is_24和from0,输出适合形式-2

第五周项目四 -静态成员应用 由老师版本的完善版

[项目4-静态成员应用] 设计含有静态数据成员和成员函数的Time类.静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是"影响全局"的设置,适合作为类中的静态数据成员. [cpp] view plaincopyprint? class Time{ public: Time(int=0,int=0,int=0); void show_time( ); //根据is_24和from0,输出适合形式-2

第五周项目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

第五周 项目四-静态成员应用

问题 设计含有静态数据成员和成员函数的Time类.静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是"影响全局"的设置,适合作为类中的静态数据成员. 代码: #include <iostream> using namespace std; class Time{ public: Time(int h=0,int m=0,int s=0):hour(h),minute(m),second