c++ 类构造函数 这样写为何结果是异常的呢

c++ 类构造函数 这样写为何结果是错误的呢?
初学c++,我在尝试的时候发现下边的类构造函数的函数原型
Move:: Move(double a ,double b)
 {
 
   cout<<"enter two value: \n";cin>>a>>b;//错误在这儿,只要把这句去掉后边main()中的mm=aa.add(m)就可以正常。
   x=a;
   y=b ; 
 } 
当我把 cout<<"enter two value: \n";cin>>a>>b;去掉,后边main()中的
Move mm;
 mm=aa.add(m); 
 mm.showmove();
就能得出正确答案,否则就是错的。

不得不承认我写这句纯属多余,但是试了以后觉得奇怪,为什么会产生这样的情况,希望论坛上的前辈能帮我
解释一下这个疑惑。。非常感谢



#include<iostream> 
 
using namespace std;

class Move
{
private:
     double x;
     double y;

public:
     Move(double a=0,double b=0);
     void showmove()const;
     Move add(const Move & m) const;
     void reset(double a=0,double b=0);
}  ;  

//开始函数原型说明

Move:: Move(double a ,double b)
 {
 
   cout<<"enter two value: \n";cin>>a>>b;//错误在这儿,只要把这句去掉后边main()中的mm=aa.add(m)就可以正常。
   x=a;
   y=b ; 
 } 
 void Move::showmove()const
 {
  cout<<"now let's see the result: "
  <<"x = "<<x   <<";"<<" y = "<<y<<endl;
 }
 Move Move::add(const Move & m) const
 {
  double x1=x+m.x;
double y1=y+m.y;
return Move(x1,y1); 
 }
 
 
 void Move::reset(double a, double b)
 {
  x=a;
y=b; 
 } 
 
 //main实现 

 
 int main()
 {
  Move m(2,5);
  m.showmove();
Move aa(1,3); 
aa.showmove();
    
  Move mm;
 mm=aa.add(m); 
 mm.showmove();
 
  mm.reset(1,12); 
  mm.showmove();
 
mm.reset();
mm.showmove();
 
  system("pause");
  return 0;
 } 

------解决思路----------------------
本来那句就不对,你在先前已给出了a,和b的值,“cin>>a>>b;”这一句子又是给a和b的值就冲突了
------解决思路----------------------
引用:
Quote: 引用:

本来那句就不对,你在先前已给出了a,和b的值,“cin>>a>>b;”这一句子又是给a和b的值就冲突了

cin>>a>>b;我这儿是试了给他重新赋值。 后边执行的时候,确实是可以被改为输入的值。但是在add()那个函数实现的位置出了错。
AD里改一下改成   
    double x1=x+m.x;
    double y1=y+m.y;
    Move f;
    f.x=x;
    f.y=y;
    return f;