我正在尝试用c ++学习Operator Overloading
。我使用Operator Overloading
概念添加两个矩阵。
我使用语句t3=t1+t2;
来调用重载方法。
但是o / p并不像预期的那样.o / p矩阵与第二个矩阵相同。我不明白为什么。
这是代码。
#include<iostream>
using namespace std;
int m,n;
class test
{
int a[][10];
public:
void get()
{
cout<<"enter matrix elements"<<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
}
void print()
{
cout<<"matrix is as follows "<<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
}
test operator + (test t2)
{
test temp;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
temp.a[i][j]=a[i][j]+t2.a[i][j];
}
}
return temp;
}
};
int main()
{
cout<<"enter value of m and n"<<endl;
cin>>m;
cin>>n;
test t1;
t1.get();
test t2;
t2.get();
t1.print();
t2.print();
test t3;
t3=t1+t2;
t3.print();
return 0;
}
o / p是---
G:\>a.exe
enter value of m and n
2
2
enter matrix elements
1
1
1
1
enter matrix elements
2
2
2
2
matrix is as follows
2 2
2 2
matrix is as follows
2 2
2 2
third matrix is as follows
2 2
2 2
答案 0 :(得分:2)
int a[][10];
那不是分配一个合适的数组。我相信这会产生一个大小为[1] [10]的数组,当你说
时,你会在以后访问界限cin>>a[i][j];
和
cout<<a[i][j]<<"\t";
与i > 0
;
你应该使用std :: vector的std :: vector,否则你需要使用new / delete自己分配动态内存。您无法在c ++中在堆栈上创建动态大小的数组。
您可以在此处看到在您发布的代码上显示警告/错误级别时应该出现的错误:
http://melpon.org/wandbox/permlink/AByJI3YnPijl6WYM
prog.cc:6:5: error: flexible array member 'a' in otherwise empty class is a GNU extension [-Werror,-Wgnu-empty-struct]
int a[][10];
^
prog.cc:6:5: error: flexible array members are a C99 feature [-Werror,-Wc99-extensions]
2 errors generated.
答案 1 :(得分:-3)
我也不熟悉编码,也不熟悉C ++,但我并没有真正看到代码中的运算符重载。我只看到两个对象调用相同的类函数。对象(我认为)具有相同的值,所以是的,输出将是相同的 运算符重载将类似于函数(int x),然后是另一个函数 function(int x,int y)。不同的参数,相同的函数名称。