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

来源:互联网 发布:迅雷mac版下载速度是0 编辑:程序博客网 时间:2024/05/29 11:12

问题及代码:

#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,既然无伤大雅,我也就不改了

 

0 0
原创粉丝点击