热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第五周项目一:深入体验常成员函数的应用与特性

在本项目中,我们将设计一个平面坐标点类,实现计算两点间距离、到原点的距离以及关于坐标轴和原点的对称点等功能。为了确保这些操作不会修改原对象的状态,我们将其设计为常成员函数,以保证数据的一致性和完整性。此外,通过这种方式,我们可以更好地遵循面向对象编程中的封装原则,提高代码的可读性和可维护性。

项目要求

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

代码如下

#include 
#include 

using namespace std;

class CPoint
{
private:
    double x;  // 横坐标
    double y;  // 纵坐标
public:
    CPoint(double xx=0,double yy=0);
    double Distance1(CPoint p) const; //两点之间的距离(一点是当前点——想到this了吗?,另一点为p)
    double Distance0() const;          // 到原点(0,0)的距离
    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)+((*this).y-p.y)*((*this).y-p.y));
}

double CPoint::Distance0() const
{
    return sqrt(x*x+y*y);
}

CPoint CPoint::SymmetricAxis(char style) const//注意这个函数的格式
{
    CPoint p(this->x,this->y);
    if (x')
        p.y=-y;
    else if (y')
        p.x=-x;
    else if (o')
    {
        p.x=-x;
        p.y=-y;
    }
    return p;
}

void CPoint::input()
{
    char p;
    cout<<"请以x,y形式输入坐标点:"<>x>>p>>y;
        if (p==',') break;
        else
            cout<<"格式错误,请重新输入!"< 
 

运行结果




推荐阅读
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 原本打算将发现的漏洞提交给米拓官方,但客服建议直接通过后台提交,并承诺给予奖励。然而,最终只得到了一句‘你好棒’,这让我感到非常失望。 ... [详细]
  • 本文介绍如何通过 Python 的 `unittest` 和 `functools` 模块封装一个依赖方法,用于管理测试用例之间的依赖关系。该方法能够确保在某个测试用例失败时,依赖于它的其他测试用例将被跳过。 ... [详细]
  • 本文对唐代诗人陆龟蒙的《吴俞儿舞歌·剑俞》进行了详细的译文和赏析,深入解读了诗中的意象和情感。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • Flutter 开发中集成极光推送的详细步骤
    本文详细介绍了如何在 Flutter 项目中集成极光推送服务,包括配置和测试的具体步骤。 ... [详细]
  • 数字资产量化交易通过大数据分析,以客观的方式制定交易决策,有效减少人为的主观判断和情绪影响。本文介绍了几种常见的数字资产量化交易策略,包括搬砖套利和趋势交易,并探讨了量化交易软件的开发前景。 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 本文总结了在ArcGIS中进行栅格数据裁剪的经验,包括准备栅格影像和裁剪范围的步骤,以及使用ArcToolbox进行裁剪的具体操作。 ... [详细]
  • 客厅装修颜色选择指南:避免这些色彩导致家庭矛盾
    客厅是家庭活动的核心区域,选择合适的颜色至关重要。本文将介绍几种适合客厅的颜色,并提醒读者避免使用可能导致夫妻不合的色彩。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文将详细介绍在《守望先锋》中如何有效地对抗「猎空」,包括英雄选择、技能克制和团队配合等方面。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
author-avatar
杀手也热血_949
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有