找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 805|回复: 9

不能实现重载相加,能说出这是哪错了吗?

[复制链接]
发表于 2009-11-6 02:01:42 | 显示全部楼层 |阅读模式 IP:江苏扬州
实现两个矩阵的相加,但好像那个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;
}
发表于 2009-11-6 02:01:43 | 显示全部楼层 IP:江苏扬州
单看了下你的函数调用

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

使用道具 举报

发表于 2009-11-6 02:01:45 | 显示全部楼层 IP:江苏扬州
谢谢,但那我也试过但还是错
回复

使用道具 举报

发表于 2009-11-6 02:01:46 | 显示全部楼层 IP:江苏扬州
重载的方式不对啊,2元操作符一般作为友员重载而不是作为类成员重载。
并且,即使你作为类成员重载,参数应该只有一个。

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

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

使用道具 举报

发表于 2009-11-6 02:01:47 | 显示全部楼层 IP:江苏扬州
谢谢 去试试
回复

使用道具 举报

发表于 2009-11-6 02:01:48 | 显示全部楼层 IP:江苏扬州
void operator+(Rectangle R1); //类成员重载
实现都差不多,注意下参数和访问控制就好了。


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

能写一下吗?
回复

使用道具 举报

发表于 2009-11-6 02:01:49 | 显示全部楼层 IP:江苏扬州
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;
}

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

使用道具 举报

发表于 2009-11-6 02:01:51 | 显示全部楼层 IP:江苏扬州
谢谢,我回去再去试一下

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

使用道具 举报

发表于 2009-11-6 02:01:52 | 显示全部楼层 IP:江苏扬州
能说的都被说了!

应该没错误了哦!
回复

使用道具 举报

发表于 2009-11-6 02:01:53 | 显示全部楼层 IP:江苏扬州
恩,谢谢无限循环,搞定了
谢晚了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 19:30 , Processed in 0.317959 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表