| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1420 人关注过本帖
标题:[求助]运算符重载 运行不正确
只看楼主 加入收藏
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

问题1:去掉单型参的构造函数,可以定义两个+重载,但是必须是友员重载,因为如果是类成员函数的话,需要由对象调用,doubel在前不行。
两个友员重载不会抱错:
friend Complex operator+(const Complex&,const double);
friend Complex operator+(const double d,const Complex &s){return s+d;};

问题2:我试了才会贴上来告诉你,不是我乱掰的,想要的话,我可以给你截图看运行结果。


我认真看了你的问题,不过你确实没怎么描述清楚。

ps:在vc6中友员重载存在一个问题,是编译器问题,不支持标准,在前面的帖子讨论过:
http://bbs.bc-cn.net/viewthread.php?tid=133743&extra=&page=10#112525

还有,看了你的错误信息,似乎不是程序本身的问题吧,应该是编译器哪里冲突,等等,vc++毛病多多!

[此贴子已经被作者于2007-5-3 21:31:58编辑过]


Fight  to win  or  die...
2007-05-03 21:23
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
以下是引用aipb2007在2007-5-3 21:23:11的发言:

问题1:去掉单型参的构造函数,可以定义两个+重载,但是必须是友员重载,因为如果是类成员函数的话,需要由对象调用,doubel在前不行。
两个友员重载不会抱错:
friend Complex operator+(const Complex&,const double);
friend Complex operator+(const double d,const Complex &s){return s+d;};

问题2:我试了才会贴上来告诉你,不是我乱掰的,想要的话,我可以给你截图看运行结果。


我认真看了你的问题,不过你确实没怎么描述清楚。

ps:在vc6中友员重载存在一个问题,是编译器问题,不支持标准,在前面的帖子讨论过:
http://bbs.bc-cn.net/viewthread.php?tid=133743&extra=&page=10#112525

我想我们遇到的问题是不一样的
我看了那个贴子了,我改成了。h了

唯一的区别就是改前编译报告这个错误,
改后编译不报错,但运行报这个错误。

我也不是瞎掰的,在我机器上确实是这样的,,无论是。h还是标准格式。。


“运行正确”的程序不见得是高质量的程序
2007-05-03 21:31
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
那就不知道了,我用的dev-cpp,家里没vc,没办法试。

可能有其他原因吧,呵呵。

Fight  to win  or  die...
2007-05-03 21:37
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
也许是VC++6.0的一个BUG吧,不过还好在VC2005已经修正了。
友员函数在声明的时候需要加上friend,但是在定义的时候就不要加了,暂时还没发现你的那个程序没有其他问题,定义时去掉friend就行了,在VC2005编译运行的图片如下:
图片附件: 游客没有浏览图片的权限,请 登录注册


再仔细看一下你的程序哈

[此贴子已经被作者于2007-5-3 22:02:14编辑过]


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-05-03 21:54
未入流小菜鸟
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-5-1
收藏
得分:0 

//针对5楼的代码,改正如下,红色为修改处。v6中编译通过
#include<iostream>
//using namespace std;//注释掉这句,因为std中也重载了+这个操作符,会与楼主定义的友元+冲突(个人看法,还未证实)。

class Complex
{
public:
Complex(double, double);
Complex(double value){ a=value;}
Complex operator+(Complex& );

Complex operator+ (double value);
friend Complex operator+ (double t, Complex& s);

void Display();
private:
double a;
double b;
};

Complex:: Complex(double x, double y)
{
a=x;
b=y;
}

Complex Complex::operator+(Complex &s)
{
double A=a+s.a;
double B=b+s.b;
Complex temp(A, B);
return temp;
}

Complex Complex::operator+(double value)
{
double A=a+value;
Complex temp(A, b);
return temp;
}
Complex operator+ (double t, Complex& s) //去掉最前面的friend,只需在类中声明为友元,定义处不用
{
double A=t+s.a;
Complex temp(A,s.b);
return temp;
}
void Complex::Display()
{
std::cout<<a<<"+"<<b<<"i"<<std::endl; //加上std
}
int main()
{
Complex a(2,5), b(7, 9), c(0,0);
a.Display();b.Display();c.Display();
c=a+b;
c.Display();
c=4.1+a;
c=b+5.6;
c.Display();

return 0;
}

[此贴子已经被作者于2007-5-3 22:23:02编辑过]

2007-05-03 22:10
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
收藏
得分:0 
到处是人民币......

Viva,espana!
2007-05-03 22:14
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
以下是引用未入流小菜鸟在2007-5-3 22:10:37的发言:

//针对5楼的代码,改正如下,红色为修改处。v6中编译通过
#include<iostream>
//using namespace std;//注释掉这句,因为std中也重载了+这个操作符,会与楼主定义的友元+冲突(个人看法,还未证实)。

友员函数在声明的时候需要加上friend,但是在定义的时候就不要加了,暂时还没发现你的那个程序没有其他问题,定义时去掉friend就行

我的VC好落后啊

这两个地方全部改过来就对了


谢谢大家了啊  
辛苦了

“运行正确”的程序不见得是高质量的程序
2007-05-03 22:53
快速回复:[求助]运算符重载 运行不正确
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017179 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved