| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 619 人关注过本帖
标题:不能实现重载相加,能说出这是哪错了吗?
只看楼主 加入收藏
轮廓
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-4-20
收藏
 问题点数:0 回复次数:9 
不能实现重载相加,能说出这是哪错了吗?

实现两个矩阵的相加,但好像那个void operator+(Rectangle R1,Rectangle R2);函数实现有错误,
请高手指点



#include<iostream>
using namespace std;
int const N=2;
class Rectangle
{
private:
int Array[N][N];

public:
Rectangle();

void operator+(Rectangle R1,Rectangle R2);

void display();
void setR();

};

Rectangle::Rectangle()
{
for(int j=0;j<N;j++)
for(int i=0;i<N;i++)
Array[j][i]=0;
}

void Rectangle::setR()
{
for(int j=0;j<N;j++)
for(int i=0;i<N;i++)
cin>>Array[j][i];

}


void Rectangle::operator+(Rectangle R1,Rectangle R2)
{

for(int j=0;j<N;j++)
for(int i=0;i<N;i++)
R1.Array[j][i]=R1.Array[j][i]+R2.Array[j][i];


}


void Rectangle::display()
{
for(int j=0;j<N;j++)
{for(int i=0;i<N;i++)
cout<<Array[j][i]<<'\t';
cout<<endl;
}
}

int main()
{
Rectangle R1,R2;//R3;
R1.setR();
cout<<"输出R1: \n";
R1.display();


R2.setR();
cout<<"输出R2: \n";
R2.display();

//R1与R2相加后把值给R1
R1=R1+R2;
cout<<"输出R1: \n";
R1.display();


return 0;
}

搜索更多相关主题的帖子: 相加 重载 
2007-06-06 15:56
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
单看了下你的函数调用

r1 = r1 + r2不对,因为你+的返回是void,不能把void赋值给r1吧!
改成
r1 + r2;
这样就好。

Fight  to win  or  die...
2007-06-06 16:50
轮廓
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-4-20
收藏
得分:0 
回复:(轮廓)不能实现重载相加,能说出这是哪错了吗...
谢谢,但那我也试过但还是错
2007-06-06 17:12
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
重载的方式不对啊,2元操作符一般作为友员重载而不是作为类成员重载。
并且,即使你作为类成员重载,参数应该只有一个。

声明那这样改:
friend void operator+(Rectangle R1,Rectangle R2); //友员重载
或者
void operator+(Rectangle R1); //类成员重载

实现都差不多,注意下参数和访问控制就好了。

Fight  to win  or  die...
2007-06-06 17:29
轮廓
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-4-20
收藏
得分:0 
谢谢 去试试
2007-06-06 17:35
轮廓
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-4-20
收藏
得分:0 

void operator+(Rectangle R1); //类成员重载

实现都差不多,注意下参数和访问控制就好了。


这个我开始就是这样试的,但就是不行

能写一下吗?

2007-06-06 17:39
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
回复:(轮廓)不能实现重载相加,能说出这是哪错了吗...

Rectangle Rectangle::operator+(Rectangle R1)
{
Rectangle R2;

for(int j=0;j<N;j++)
for(int i=0;i<N;i++)
R2.Array[j][i]=Array[j][i]+R1.Array[j][i];
return R2;
}

你去试试,返回类型给你改回来了.
因为最好不改变操作数的值。


Fight  to win  or  die...
2007-06-06 17:54
轮廓
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-4-20
收藏
得分:0 

谢谢,我回去再去试一下

我现在是在网吧,没编译器,有的请编完发一下错误,谢谢

2007-06-08 14:25
neverDie
Rank: 1
等 级:新手上路
威 望:1
帖 子:123
专家分:0
注 册:2007-5-5
收藏
得分:0 
能说的都被说了!

应该没错误了哦!

2007-06-08 17:28
轮廓
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-4-20
收藏
得分:0 
恩,谢谢无限循环,搞定了
谢晚了
2007-06-12 21:01
快速回复:不能实现重载相加,能说出这是哪错了吗?
数据加载中...
 
   



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

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