2-5-1 体验常成员函数

问题及代码:

#include <iostream>
#include <cmath>
using namespace std;
class CPoint
{
private:
  double x;  // 横坐标
  double y;  // 纵坐标
public:
  CPoint(double xx=0,double yy=0):x(xx),y(yy){};
  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) 形式输出坐标点
};
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(this->x*this->x+this->y*this->y);

}
CPoint CPoint::SymmetricAxis(char style) const
{
    CPoint n=*this;
    switch(style)
    {
    case 'x':
        {
            n.x=-n.x;
            break;
        }
    case 'y':
        {
            n.y=-n.y;
            break;

        }
    case 'o':
        {
            n.x=-n.x;
            n.y=-n.y;
            break;
        }

    }
    return n;
}
void CPoint::input()
{
    int a,b;
    char c;
    while(1)
    {
        cin>>a>>c>>b;
        if(c!=',')
        {
            cout<<"error cin,retry."<<endl;
            continue;
        }
        else
            break;
    }
    x=a;
    y=b;
}
void CPoint::output()
{
    cout<<'('<<x<<','<<y<<')'<<endl;
}
int main()
{
    CPoint a(1,2),a1(1,0);
    char x,y,o;
    cout<<a.Distance1(a1);
    cout<<endl;
    cout<<a1.Distance0();
    cout<<endl;
    a.input();
    a.output();
    a1=a1.SymmetricAxis('o');
    a1.output();
    return 0;
}


 

运行结果:

学习小结:

有好多要说。

首先是学到了好多东西的感觉。

因为在之前的一个阅读程序和这个项目刚好有一个问题类似,就是我已开始不明白类成员之间可以直接赋值的,看到class A=*p的困惑可想而知。

在这个项目中在上机之前困扰我的第一个问题就是distance1(cpoint p)函数中的形式参数要怎么赋值,一开始我想到了实参写成(2,1)这样,error!

接着(cpoint a1(2,1))还是错了,最后终于联想到了阅读程序直接赋值的办法,尝试了一下,对了。

另外一个问题就是,在CPoint SymmetricAxis(char style) const函数中,我原本没有定义新的对象去操作的,而是直接用this指针和*this这些去操作,因为我感觉都一样,但是程序一直出错,实在想不到要怎么办,想问老师来着,但是老师刚好在指点别的同学,我就想自己去找找看,单步调试。结果意外的发现了this指针后面有一个让我惊喜的const,原来this指针是不能改变值的,难怪我把this->X=-(this->X)换成了n.X=-n.X后就正确了。

还有个小错误就是style 实参要加单引号。

主要这些都是自己主动去发现问题并解决的,我觉得比较难能可贵。相对于之前来说

最后的运行结果有点瑕疵,0显示成了-0,既然无伤大雅,我也就不改了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值