为什么以下C ++代码提供此输出?

时间:2016-05-01 19:50:58

标签: c++ operator-overloading

我正在尝试用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

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)。不同的参数,相同的函数名称。