C++ | 重载 | 实验七
描述
定义一个类MatrixAdd,其数据成员为一个M*N的矩阵(即二维数组),其中M和N是两个预先定义的符号常数。通过重载运算符”+”和”=”,实现矩阵相加和赋值运算。
具体要求如下:
(1)私有数据成员
int a[M][N]:存放二维数组值。
(2)公有成员函数
MatrixAdd():缺省构造函数,空操作。
MatrixAdd(int x[M][N]):构造函数,用x初始化数据成员a。
MatrixAdd operator+(MatrixAdd &b):重载加法运算符”+”实现两个矩阵相加。 l
void operator=(MatrixAdd &b):重载赋值运算符”=”实现两个矩阵赋值。 l
定义“<<”和“>>”运算符重载函数,实现矩阵的输入输出。
(3)在主函数中完成对该类的测试。
注意:在程序的开头,定义符号常数M和N的值分别为2和3,表示二维数组的行数和列数。在主函数中定义整型数组a[M][N]和b[M][N],它们的初值取上述示例值。定义三个MatrixAdd类的对象A、B和C,并用数组a和b初始化对象A和B。将A加B后赋值给C。然后输出对象C的数据成员a矩阵的值。
输入
两个2X3矩阵
输出
两个矩阵之和
样例输入
1 2 3
4 5 6
2 2 2
3 3 3
样例输出
3 4 5
7 8 9
#include <iostream>
using namespace std;
const int M = 2;
const int N = 3;
class MatrixAdd
{
public:
MatrixAdd() {}//缺省构造参数,需要它是因为有被定义时无参数的对象 C ,用时需要加{}
MatrixAdd(int x[M][N]) //带参构造函数,main函数里规定的值->形参x[M][N]->实参a[M][N]
{
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
a[i][j] = x[i][j]; //注意不要写成[M][N]
}
}
}
MatrixAdd operator+(MatrixAdd &b);
void operator=(MatrixAdd b);//void函数不能加&,不知道为什么
friend istream& operator>>(istream& i, MatrixAdd& d1);
friend ostream& operator<<(ostream& o, MatrixAdd& d2);
private:
int a[M][N];
};
MatrixAdd MatrixAdd::operator+(MatrixAdd &b)//A.a[M][N]+B.a[M][N]等价于A.a[M][N].MatrixAdd( b.a[M][N] )
{
MatrixAdd m;
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
m.a[i][j] = a[i][j] + b.a[i][j];
}
}
return m;
}
void MatrixAdd::operator=(MatrixAdd b)
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
a[i][j] = b.a[i][j];//赋值语句,每个具体数值->形参x[M][N]->实参a[M][N]
}
}
}
istream& operator>>(istream& i, MatrixAdd& d1)
{
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
i >> d1.a[i][j];
}
}
return i;
}
ostream& operator<<(ostream& o, MatrixAdd& d2)
{
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
o << d2.a[i][j] << " ";
}
o << endl;
}
return o;
}
int main()
{
int a[M][N] = { { 1,2,3 },{ 4,5,6 } };
int b[M][N] = { { 2,2,2 },{ 3,3,3 } };
MatrixAdd A(a), B(b), C;
C = A + B;//重载“=”的意义在此.但不重载也无所谓,直接用于这样的赋值。
//系统已经为每一个新声明的类重载了一个赋值运算符,作用是逐个复制类的数据成员
//但如果数据成员包括指向 动态分配内存 的指针成员时,需要重载
/*C.show();*/
cout << C;
system("pause");
return 0;
}

浙公网安备 33010602011771号