c++ 类构造函数 这样写为何结果是错误的呢?

tandyx 2014-11-02 05:03:30
初学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;
}
...全文
76 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tandyx 2014-11-02
  • 打赏
  • 举报
回复
引用 5 楼 tandyx 的回复:
[quote=引用 3 楼 a7606508 的回复:] [quote=引用 2 楼 tandyx 的回复:] [quote=引用 1 楼 a7606508 的回复:] 本来那句就不对,你在先前已给出了a,和b的值,“cin>>a>>b;”这一句子又是给a和b的值就冲突了
cin>>a>>b;我这儿是试了给他重新赋值。 后边执行的时候,确实是可以被改为输入的值。但是在add()那个函数实现的位置出了错。[/quote]AD里改一下改成 double x1=x+m.x; double y1=y+m.y; Move f; f.x=x; f.y=y; return f; [/quote 非常感谢![/quote] 是 f.x=x1; f.y=y1;
tandyx 2014-11-02
  • 打赏
  • 举报
回复
引用 3 楼 a7606508 的回复:
[quote=引用 2 楼 tandyx 的回复:] [quote=引用 1 楼 a7606508 的回复:] 本来那句就不对,你在先前已给出了a,和b的值,“cin>>a>>b;”这一句子又是给a和b的值就冲突了
cin>>a>>b;我这儿是试了给他重新赋值。 后边执行的时候,确实是可以被改为输入的值。但是在add()那个函数实现的位置出了错。[/quote]AD里改一下改成 double x1=x+m.x; double y1=y+m.y; Move f; f.x=x; f.y=y; return f; [/quote 非常感谢!
tandyx 2014-11-02
  • 打赏
  • 举报
回复
谢谢大家的解答 我这儿已经发现问题所在。 Move Move::add(const Move & m) const { double x1=x+m.x; double y1=y+m.y; return Move(x1,y1); } 这里新建的Move(x1,y1)重新调用了构造函数导致了返回值被改。 再次谢谢大家的回帖!
a7606508 2014-11-02
  • 打赏
  • 举报
回复
引用 2 楼 tandyx 的回复:
[quote=引用 1 楼 a7606508 的回复:] 本来那句就不对,你在先前已给出了a,和b的值,“cin>>a>>b;”这一句子又是给a和b的值就冲突了
cin>>a>>b;我这儿是试了给他重新赋值。 后边执行的时候,确实是可以被改为输入的值。但是在add()那个函数实现的位置出了错。[/quote]AD里改一下改成 double x1=x+m.x; double y1=y+m.y; Move f; f.x=x; f.y=y; return f;
tandyx 2014-11-02
  • 打赏
  • 举报
回复
引用 1 楼 a7606508 的回复:
本来那句就不对,你在先前已给出了a,和b的值,“cin>>a>>b;”这一句子又是给a和b的值就冲突了
cin>>a>>b;我这儿是试了给他重新赋值。 后边执行的时候,确实是可以被改为输入的值。但是在add()那个函数实现的位置出了错。
a7606508 2014-11-02
  • 打赏
  • 举报
回复
本来那句就不对,你在先前已给出了a,和b的值,“cin>>a>>b;”这一句子又是给a和b的值就冲突了

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧