冥玫怪盗 发表于 2008-7-11 17:34

C++构造函数传参的问题

请看下面代码:
#include "stdafx.h"
#include "iostream.h"


class Computation
{
public:
int i,j;

Computation(int i,int j);
Computation(int i);
Computation(const Computation & fzComputation);
~Computation();
};
Computation::Computation(int i,int j)
{
i = i;
j = j;
cout<<i<<"+"<<j<<'='<<i+j<<'\t'<<"调用了 Computation(int i,int j)构造方法"<<'\n';
}
Computation::Computation(int i)
{
i = i;
j = i;
cout<<i<<"-"<<j<<'='<<i-j<<'\t'<<"调用了 Computation(int i)构造方法"<<'\n';
}
Computation::Computation(const Computation & fzComputation)
{
i = fzComputation.i;
j = fzComputation.j;
cout<<i<<"+"<<j<<'='<<i+j<<'\t'<<"调用了Computation(const Computation & Computation)复制构造方法"<<'\n';
}
Computation::~Computation()
{
}
Computation CopyData(Computation obj)
{
return obj;
}
void test()
{
Computation cpt(10,5);
CopyData(cpt);
}
int main(int argc, char* argv[])
{
test();
return 0;
}
此代码输出结果是:
10+10=20 调用了 Computation(int i,int j)构造方法
-858993460+-858993460=-1717986920 调用了Computation(const Computation & Co
mputation)复制构造方法
-858993460+-858993460=-1717986920 调用了Computation(const Computation & Co
mputation)复制构造方法
Press any key to continue

后面输出的2行是并不是我想要的结果,原因是因为:
Computation::Computation(int i,int j)
{
i = i;
j = i;
cout<<i<<"+"<<j<<'='<<i+j<<'\t'<<"调用了 Computation(int i,int j)构造方法"<<'\n';
}中的参数与成员变量同名,我在学习java的时候,遇到这种情况可以加 this关键字解决,可是在c++中却不能使用(我知道换个参数名就可以正确显示,我只是想知道在c++中,遇到同名的时候有什么方法解决)。
更换参数名后输出结果是:
10+5=20 调用了 Computation(int i,int j)构造方法
10+5=20 调用了Computation(const Computation & Computation)复制构造方法
10+5=20 调用了Computation(const Computation & Computation)复制构造方法
Press any key to continue


请教各位前辈,谢谢

水中无月 发表于 2008-7-11 17:37

C++中也可以用this关键字啊
一时我也看不出问题的所在,建议你调试一下

冥玫怪盗 发表于 2008-7-11 17:43

this有是有,可是在这里无法使用,vc6.0提示有错误,无法通过编译。

水中无月 发表于 2008-7-11 17:50

VC6不是可以很方便的调试吗?所以建议你调试一下,很容易就找出问题了[em01]

mqh21364 发表于 2008-7-11 17:56

this->i;
this->j;

C++里面如果引用指针的成员,用->; 引用对象的成员,用. 。

水中无月 发表于 2008-7-11 18:08

回LS:其实去掉“this->”都一样

冥玫怪盗 发表于 2008-7-11 18:12

请说的详细点!谢谢

[[it] 本帖最后由 冥玫怪盗 于 2008-7-11 18:55 编辑 [/it]]

linren 发表于 2008-7-11 18:30

#include "iostream.h"


class Computation
{
public:
        int i,j;
       
        Computation(int i,int j);
        Computation(int i);
        Computation(const Computation & fzComputation);
       
        ~Computation();
};

Computation::Computation(int i,int j)
{
        this->i = i;
        this->j = j;
        cout<<i<<"+"<<j<<'='<<i+j<<'\t'<<"调用了 Computation(int i,int j)构造方法"<<'\n';
}

Computation::Computation(int i)
{
        this->i = i;
        this->j = i;
        cout<<i<<"-"<<j<<'='<<i-j<<'\t'<<"调用了 Computation(int i)构造方法"<<'\n';
}

Computation::Computation(const Computation & fzComputation)
{
        i = fzComputation.i;
        j = fzComputation.j;
        cout<<i<<"+"<<j<<'='<<i+j<<'\t'<<"调用了Computation(const Computation & Computation)复制构造方法"<<'\n';
}

Computation::~Computation()
{
}

Computation CopyData(Computation obj)
{
        return obj;
}

void test()
{
        Computation cpt(10,5);
        CopyData(cpt);
}

int main(int argc, char* argv[])
{
        test();
        return 0;
}


[bo]结果:[/bo]
10+5=15 调用了 Computation(int i,int j)构造方法
10+5=15 调用了Computation(const Computation & Computation)复制构造方法
10+5=15 调用了Computation(const Computation & Computation)复制构造方法
Press any key to continue

[bo]说明:[/bo]
结果的第一行,是这句的结果:
Computation cpt(10,5);

第二行是调用函数CopyData时使用的(参数)

第三行是函数CopyData返回时使用的(返回值)

冥玫怪盗 发表于 2008-7-11 18:52

回复 8# linren 的帖子

感谢,十分感谢!

水中无月 发表于 2008-7-11 19:46

linren的代码写得好整齐,好规范!很方便于阅读
看来我也要学着点[em01]

晨曦的朝阳 发表于 2008-7-11 22:07

不错的办法,学习了

linren 发表于 2008-7-12 11:42

[quote][bo][un]水中无月[/un] 在 2008-7-11 19:46 的发言:[/bo]

linren的代码写得好整齐,好规范!很方便于阅读
看来我也要学着点[em01] [/quote]
过奖……
我也是初学者,大家一起进步吧[tk03]……

我是杨过 发表于 2008-7-12 21:19

[em03]

页: [1]

编程论坛