用成员函数实现运算符 “+”、“-”、“++”、“–”和”[ ]”的重载。
(1)实现将两个二维数组相加、相减。其中第一个数组的值由构造函数设置,第二个数组由键盘输入。
(2)数组能进行自增和自减运算。前”++”、“–”和后”++”、 “–”都要分别实现。数组通过构造函数设置
(3)实现数组和一个整数相加、相减。数组和整数都采取键盘输入。
(4)实现下标运算符重载。根据键盘输入i,j来访问数组中的值。
提示:
(1)定义一个类,类里面有一个私有数据成员(二维数组)。
(2)类里面含有一个有参数的构造函数,用于对二维数组赋值。
(3)类中包含一个无参构造函数,用于键盘输入对数组赋值时,定义对象。
(4)类中有一个input()函数,用于通过键盘输入赋值。
(5)类中有show()函数,用于显示二维数组。
#include<iostream>
#include<stdlib.h>
using namespace std;
class Array
{
public:
Array(int a[][3]); //有参构造函数
Array() //无参构造函数 对无参对象分配空间 使对象能调用input为数组赋值
{}
void intput(); //输入数组
void show(); //打印数组
Array operator +(Array a);//重载+运算符 使两个数组能相加
Array operator -(Array a);//重载-运算符 使两个数组能相减
Array operator --();//重载++前置自增运算符 使数组能进行前置自减
Array operator ++();//重载--前置自减运算符 使数组能进行前置自增
Array operator --(int ); //重载++后置运算符 使数组能进行后置自增
Array operator ++(int );//重载--后置运算符 使数组能进行后置自减
Array operator +(int a);//重载+运算符 使数组能与整数相加
Array operator -(int a);//重载+运算符 使数组能与整数相减
int * operator[](int a);//重载[]运算符 使对象能通过下标直接访问数组元素
private:
int arr[3][3];
};
//********************************************************
Array::Array(int a[][3])
{
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
arr[i][j] = a[i][j];
}
}
void Array::intput()
{
int i, j;
cout << "请输入一个3*3数组" << endl;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
cin >> arr[i][j];
}
}
void Array::show()
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
cout << arr[i][j] << "\t";
}
cout << endl;
}
}
Array Array::operator +(Array a)
{
Array temp;
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
temp.arr[i][j] = arr[i][j] + a.arr[i][j];
}
return temp;
}
Array Array ::operator- (Array a2)
{
Array temp;
int i, j;
for (i = 0;i<3; i++)
for (j = 0;j<3; j++)
{
temp.arr[i][j] = arr[i][j] - a2.arr[i][j];
}
return temp;
}
Array Array:: operator -- ()
{
int i, j;
for (i = 0;i<3; i++)
for (j = 0;j<3;j++)
{
--arr[i][j];
}
return * this ;
}
Array Array::operator++()
{
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j< 3; j++)
{
++arr[i][j];
}
return *this;
}
Array Array:: operator -- (int)
{
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
--arr[i][j];
}
return *this;
}
Array Array::operator++(int)
{
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
++arr[i][j];
}
return *this;
}
Array Array::operator +(int a)
{
Array temp;
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
temp.arr[i][j] = arr[i][j] +a;
}
return temp;
}
Array Array::operator -(int a)
{
Array temp;
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
temp.arr[i][j] = arr[i][j] - a;
}
return temp;
}
int *Array::operator[](int a)
{
return arr[a];
}
//**********************************************************
int main()
{
//调用有参构造为对象赋初值
int arr[][3] = {1,2,5,8,6,5,7,4,6};
Array a1(arr);
a1.show();
//调用无参构造为对象赋值
Array a2;
a2.intput();
//数组对象相加
Array a3;
a3 = a1 + a2; //a3 = a1.operator+(a2);
cout << "两个数组和为:"<<endl;
a3.show();
cout << endl;
//数组对象相减
Array a4;
a4 = a1 - a2; //a3 = a1.operator-(a2);
cout << "两个数组差为:"<<endl;
a4.show();
cout << endl<<"-----------------"<<endl;
//数组对象前置自减
Array a5;
a5 = a1;
a1.show();
cout << "前置自减后为:"<<endl;
a5=--a5;
a5.show();
cout << endl;
//数组对象前置自增
Array a6;
a6 = a1;
a1.show();
cout << "前置自增后为:" << endl;
++a6;
a6.show();
cout << endl;
//数组对象后置自减
Array a7;
a7 = a1;
a1.show();
cout << "后置自减后为:" << endl;
a7 = --a7;
a7.show();
cout << endl;
//数组对象后置自增
Array a8;
a8 = a1;
a8.show();
cout << "后置自增后为:" << endl;
++a8;
a8.show();
cout << endl<<"-----------"<<endl;
//数组与整数相加减
Array a9; Array a10; int t;
a9.intput();
a10 = a9;
cout << "请输入要相加减的整数" << endl;
cin >> t;
a9 = a9 + t;
cout << "相加后为:" << endl;
a9.show();
cout << endl;
a10 = a10 - t;
cout << "相减后为:" << endl;
a10.show();
cout << endl;
//输入下标 访问数组元素
int i, j;
a1.show();
cout << "请输入想要访问的数组下标" << endl;
while (true)
{
cin >> i >> j;
if (i >= 0 && i < 3 && j >= 0 && j < 3)
{
printf("array[%d][%d]=",i,j);
cout << a1[i][j] << endl;
exit(1);
}
else
{
cout << "输入下标有误,请重新输入" << endl;
}
}
return 0;
}